Ошибка WriteFile # 5 «отказано в доступе» в win Vista / seven

Я много гуглил и не нашел ответа на эту проблему ...

У меня есть консольное приложение C ++, которое читает SD-карту объемом 1 ГБ, которая исправляет неправильно закрытые файлы и записывает таблицу FAT соответственно , SD-карта вначале записывается с помощью прошивки на заказном устройстве. Он работал нормально до Xp и перестал работать в Win Vista / 7. Я попытался повысить привилегии: в рамках типа учетной записи администратора я запустил окно cmd, используя метод «Запуск от имени администратора», но безуспешно. Я также попытался с манифестом, запрашивающим самые высокие доступные привилегии, но безуспешно.

Я прочитал в одном посте, что «Windows Vista вообще не позволяет вам получить доступ к дискам из процессов пользовательского режима. Кто-нибудь знает о каком-либо способе обойти это поведение?

Я работаю в обходной путь, однако я хотел бы знать, если это невозможно или нет

Редактировать:

Это мой первый пост здесь, поэтому я не Я не совсем понимаю проблему линковки ... Но я не имею никакого отношения к спаму ... просто спрашиваю на сайте сообщества:)

Код выглядит как

hDevice = CreateFile(buffer,GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING,0,NULL); 

. Затем я читаю информацию BTB. с SD и найдите и неправильно закрыли файл.

Наконец, при попытке записи на SD

WriteFile(hDevice,buffer,SD_SECTOR_SIZE, &temp, 0)

я получаю отказано в доступе (ошибка # 5)

Строка в CreateFile () - \. \ g: так как данная буква соответствует SD-карте на моей машине. Все это работает хорошо, и, как я уже говорил, это работает на XP. Я также пытался использовать: DeviceIoControl с FSCTL_LOCK_VOLUME, но это выдает ошибку mem.

Надеюсь, что это помогает понять и спасибо за любую помощь

7
задан balpha 30 August 2010 в 19:20
поделиться

1 ответ

Я думаю, это связано со строкой пути "buffer"; Я столкнулся с той же проблемой. Путь, который вы используете для доступа к устройству, должен выглядеть так: "\\.\PhysicalDrive%d" %d — десятичное число диска.

Начиная с Vista, в этой строке учитывается регистр. Проверьте правописание. Вам также нужны права администратора, как и раньше в XP.

Для томов. письмо должно быть ЗАГЛАВНЫМ например "\\.\G:"

Также обратите внимание, что гораздо лучше обращаться к SD-карте как к устройству, а не к тому, поскольку, если Windows смонтирует ее, может быть смонтирована файловая система с кешем записи.

Кроме того: я забыл упомянуть, что буфер, в который вы читаете/записываете данные, должен быть выровнен по страницам, а чтение должно быть кратно размеру сектора. VirtualAlloc() делает это

2
ответ дан 7 December 2019 в 18:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: