Использование DeviceIoControl с FSCTL_LOCK_VOLUME для блокировки тома. Проблема с отладчиком

Я использую DeviceIoControl с FSCTL_LOCK_VOLUME для блокировки USB-накопителя перед прямым чтением/записью диска. Программа работает - иногда. У меня проблема с самим вызовом блокировки. Когда я выполняю команду в Visual Studio 2008, результат правильный, и блокировка выполняется успешно - каждый раз! При запуске кода (отладка или нет) вызов время от времени терпит неудачу с недопустимым дескриптором. Единственная заметная разница заключается в том, что при шаге происходит пауза в полсекунды, которой я доволен, но при запуске/отладке вызов сразу терпит неудачу.

Пожалуйста, не могли бы вы дать мне подсказку относительно того, где это падает.

Думаю, это для настоящих технарей!


person Matt    schedule 30.09.2012    source источник
comment
Несмотря на то, что CreateFile вернул вам действительный дескриптор, этот дескриптор может не иметь правильных спецификаций для работы вашей операции FSCTL_LOCK_VOLUME. Например, должны быть указаны FILE_SHARE_READ и FILE_SHARE_WRITE. Мой опыт работы с DeviceIoControl заключается в том, что сообщения об ошибках точны, но содержат простые детали. Недопустимый дескриптор означает, что ваш дескриптор недействителен для этой операции.   -  person    schedule 24.01.2013


Ответы (1)


Похоже на ошибку синхронизации. Есть ли другие потоки с доступом к дескриптору? Если это так, один из них может закрыть его до того, как вы вызовете DeviceIoControl.

person Marc Sherman    schedule 01.10.2012