Я много гуглил и не нашел ответа на эту проблему ...
У меня есть консольное приложение 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.
Надеюсь, что это помогает понять и спасибо за любую помощь
Я думаю, это связано со строкой пути "buffer"; Я столкнулся с той же проблемой. Путь, который вы используете для доступа к устройству, должен выглядеть так: "\\.\PhysicalDrive%d" %d — десятичное число диска.
Начиная с Vista, в этой строке учитывается регистр. Проверьте правописание. Вам также нужны права администратора, как и раньше в XP.
Для томов. письмо должно быть ЗАГЛАВНЫМ например "\\.\G:"
Также обратите внимание, что гораздо лучше обращаться к SD-карте как к устройству, а не к тому, поскольку, если Windows смонтирует ее, может быть смонтирована файловая система с кешем записи.
Кроме того: я забыл упомянуть, что буфер, в который вы читаете/записываете данные, должен быть выровнен по страницам, а чтение должно быть кратно размеру сектора. VirtualAlloc() делает это