WinAPI функции FSCTL_LOCK_VOLUME не работает
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
WinAPI функции FSCTL_LOCK_VOLUME не работает - 2010-10-28 22:44:48.063333
|
|
|
Benjamen
Сообщений: 39
Оценки: 0
Присоединился: 2010-06-12 18:53:32.043333
|
Пишу алгоритм для блокировки тома (флешки) Испытывал алгоритм на Win XP/Vista; блокируемый том - FAT32 и NTFS Алгоритм не работает(запускаеться) но не блакирует Всё перебрал устал не могу понять проблемы…. Вот сам алгор HANDLE hDevice; DWORD lpBytesReturned; hDevice = CreateFile ("\\.\F:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0); DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &lpBytesReturned, 0); _____ DeviceIoControl возвращает = 0 В MSDN написанно если всё хорошо и смог он блокировать диск (флеху), то возврат = 0 (вроде бы, просто я англ не знаю, и перевожу через переводчик) Help me. p\s Данная функция была описана в журнале (её я использовал как первоисточник) описывал её Крис (Мыщь)… Если по счастливой случайности он увидит это письмо… Я буду необычайно рад если он поможет в решении проблемы.
|
|
|
RE: WinAPI функции FSCTL_LOCK_VOLUME не работает - 2010-10-28 22:54:18.680000
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
quote:
Return Value If the operation completes successfully, the return value is nonzero. If the operation fails or is pending, the return value is zero. To get extended error information, call GetLastError. Перевожу. Если успешно то возвращает НЕ нулевое значение. Если 0 юзайте GetLatError. Вот и посмотри че там за ошибка. Смею предположить что буфер маленький.
|
|
|
RE: WinAPI функции FSCTL_LOCK_VOLUME не работает - 2010-10-28 23:46:20.256666
|
|
|
Benjamen
Сообщений: 39
Оценки: 0
Присоединился: 2010-06-12 18:53:32.043333
|
Ltonid Огромное тебе спасибо за подсказку… Это незнание англ языка меня убьет… Спасибо за подсказку про GetLatError Кажется нашел ошибку.. и теперь пытаюсь устранить её: 1) если вызывать GetLastError после DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &lpBytesReturned, 0); то номер ошибки = 6; (Неверный дескриптор.) 2) если вызывать после a)hDevice = CreateFile ("\\.\F:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0); то ошибка - 123; (Имя файла, имени каталога или метке тома синтаксис неверен.) б) hDevice = CreateFile ("F:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0); ошибка 5; (отказ в доступе) да кстати файрвол выругался (сказал попытка доступа к дискуу, я ему сказал всё гуд, и отрубил файр… (нужного эфекта не принесло). с) hDevice = CreateFile ("\\.\F", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0); ошибка 2; (Системе не удается найти указанный файл.) SOS
|
|
|
RE: WinAPI функции FSCTL_LOCK_VOLUME не работает - 2010-10-29 00:10:39.820000
|
|
|
Ltonid
Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
|
Попробуй в варианте "б" оставить только Read. Вроде нарушений не видно, но так часто бывает что права необходимо получать отдельными функциями или использовать флаги синхронизации.
|
|
|
RE: WinAPI функции FSCTL_LOCK_VOLUME не работает - 2010-10-29 09:44:40.866666
|
|
|
Benjamen
Сообщений: 39
Оценки: 0
Присоединился: 2010-06-12 18:53:32.043333
|
нашол ошибку и звучит она так: обратный слэш в строковых лексемах - это экранирующий символ. Собственно обратный слэш кодируется последовательностью \\. Так что имя файла \\.\F: в строковой лексеме запишется как "\\\\.\\F:" и всё получилось номер ошибки = 0 флеха блок - УРААА
|
|
|
|
|