Я пишу управляемую оболочку для функции IOCTL_DISK_GET_DRIVE_LAYOUT_EX. Он отлично работает на флеш-накопителе, который я тестировал (используя «\\. \ PHYSICALDRIVE1», чтобы получить дескриптор). Но при вызове \\. \ PHYSICALDRIVE0 (системный диск) функция не работает должным образом, то есть:IOCTL_DISK_GET_DRIVE_LAYOUT_EX вызов никогда не возвращается
В первый раз, когда он вызывается с использованием размера буфера по умолчанию, он возвращает ошибку INSUFFICIENT_BUFFER. Когда буфер автоматически изменяется (используя Marshal.GlobalHRealloc), и функция вызывается снова, она никогда не возвращается.
(я использую действительный дескриптор без каких-либо прав доступа.)
Что может быть проблема?
Является ли диск чистым (об ошибках, сообщаемых Disk Management или 'chkdsk')? Правильно ли он работает в собственном коде (например, C++)? –
Кроме того, на ваших путях не хватает каких-либо '\\' обратных косых черт –
@BenVoigt - вы правы. Я не понимал, что С.О. вытеснял их без спасательного персонажа. Диск в порядке. (Это мой основной диск!) – afuna