Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

WinAPI функции FSCTL_LOCK_VOLUME не работает

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> WinAPI функции FSCTL_LOCK_VOLUME не работает
Имя
Сообщение << Старые топики   Новые топики >>
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 Данная функция была описана в журнале (её я использовал как первоисточник)
описывал её Крис (Мыщь)… Если по счастливой случайности он увидит это письмо… Я буду необычайно рад если он поможет в решении проблемы.



Post #: 1
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. Вот и посмотри че там за ошибка. Смею предположить что буфер маленький.
Post #: 2
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
Post #: 3
RE: WinAPI функции FSCTL_LOCK_VOLUME не работает - 2010-10-29 00:10:39.820000   
Ltonid

Сообщений: 4970
Оценки: 740
Присоединился: 2008-12-29 13:21:56.166666
Попробуй в варианте "б" оставить только Read. Вроде нарушений не видно, но так часто бывает что права необходимо получать отдельными функциями или использовать флаги синхронизации.
Post #: 4
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
флеха блок - УРААА
Post #: 5
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> WinAPI функции FSCTL_LOCK_VOLUME не работает







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.