Сейчас на форуме: Rio, tyns777, zombi-vadim (+6 невидимых) |
eXeL@B —› Программирование —› Windows7: WriteFile access denied только на дальних секторах. Помогите разобраться. |
Посл.ответ | Сообщение |
|
Создано: 20 февраля 2015 16:00 · Поправил: ToBad · Личное сообщение · #1 Здравствуйте! Есть код записи сектора на PhysicalDrive0 который при записи на дальние сектора выдаёт "access denied" на некоторых Windows 7 машинах. Запуск от админа, в режиме эмуляции windows XP, с разными состояниями UAC, с FSCTL_DISMOUNT_VOLUME и FSCTL_LOCK_VOLUME я пробовал. Даже политики копировал с компа где всё работает - ничего не помогло. Ставлю CPConverted.QuadPart:=$6800; - всё работает (читаю и пишу), ставлю в конец диска например (где предварительно записал что-то через WinHex) - работает только чтение! Code:
|
|
Создано: 20 февраля 2015 16:58 · Личное сообщение · #2 |
|
Создано: 20 февраля 2015 17:11 · Личное сообщение · #3 |
|
Создано: 20 февраля 2015 17:42 · Поправил: ToBad · Личное сообщение · #4 unknownproject пишет: А теперь вопрос.Зачем ? Зачем лезть на дальние сектора ? Товарищ извращенец, не иначе. Точно, зачем лезть на дальние когда есть ближние! Прочитал ваш информативный пост и переосмыслил всю свою жизнь, простите, что не оправдал ваших надежд. p.s. И хорошо, что вы добавили смайлики, без них ценность вашего ответа была бы на порядок ниже. reversecode пишет: NTFS? а вообще принято читать коды ошибок, а не фантазировать пишет не пишет, прям как на ромашках Да, NTFS. В смысле не SysErrorMessage(GetLastError), а именно код возвращаемый GetLastError? Насчёт NTFS разве есть разница, ведь я к PhysicalDrive0 обращаюсь, вот например смещение $6800 это сектор $34, даже в диск C: не попадает на котором NTFS... |
|
Создано: 20 февраля 2015 18:12 · Личное сообщение · #5 |
|
Создано: 20 февраля 2015 18:14 · Поправил: vden · Личное сообщение · #6 |
|
Создано: 20 февраля 2015 18:15 · Личное сообщение · #7 скорее всего смещение не выровняно Добавлено спустя 12 минут для общего познания всевозможные проблемы рассмотрены |
|
Создано: 20 февраля 2015 19:03 · Личное сообщение · #8 vden пишет: Может выравнивание смещения должно быть например на 512 или 4096 или по размеру блока фс. Еще может быть нужно читать/писать блок целиком. Да, конечно, и то и то верно. Смещение кратно 512, читаю и пишу полностью 512 байт, без этого и на ХП проблемы.... Ещё с WinHex проверяю что-бы начало сектора, ну и вычитывается без проблем (то есть SetFilePointer указывает куда нужно)... Добавлено спустя 23 минуты reversecode пишет: для общего познания всевозможные проблемы рассмотрены --> Link <-- Почитал, попробую с буфером 1024 и 4096... |
|
Создано: 20 февраля 2015 20:20 · Личное сообщение · #9 |
|
Создано: 20 февраля 2015 21:14 · Личное сообщение · #10 reversecode пишет: так что говорит гет ласт еррор? Я через teamviewer тестирую, жду когда комп включат... Добавлено спустя 4 часа 36 минут Ошибка 5, доступ запрещён. В общем чуть изменил код и с определённым шагом в секторах читал и писал сектор. Таким способом удалось узнать с какого сектора возникает ошибка. В общем от 0 до 32788728 пишет без проблем, от 32788729 и до конца диска - ошибка... Code:
Таким образом получается, что хотя и открываю PhysicalDrive0, писать могу только до начала диска С и его первый сектор, но не дальше... Почему так? |
|
Создано: 21 февраля 2015 09:37 · Личное сообщение · #11 |
|
Создано: 21 февраля 2015 12:09 · Поправил: redlord · Личное сообщение · #12 |
|
Создано: 21 февраля 2015 14:29 · Личное сообщение · #13 Я согласен, что может блочить доступ с дискам\занятым секторам, но во первых на других компах с Win7 этого не происходит (нативирусов\фаерволов - нет), а во вторых писать получается сюда: Code:
А сюда уже нет: Code:
Давайте забудем о диске С с его пейджфайлами, грубо говоря в Partition 1 писать можно, а в Partition 2 и Partition 3, а так же Unpartitionable space идущем за ним уже нет! |
|
Создано: 21 февраля 2015 14:29 · Личное сообщение · #14 Господи. Прямая запись на неразмонтированный диск (еще и системный) это мягко говоря плохая идея и типичный быдлокодинг уровня виндоус хп. Менеджер разделов вам очень обрадуется. Что можно порекомендовать в этой ситуации? Первое - не заниматься подобной херней. Второе если уж хочется то придется это делать через SPTI интерфейсы, как это и делает винхекс. Дрова какие-то тут уже насочиняли и прочий бред. Берем и делаем STPD запрос через DeviceIoControl на устройства диска, все, победа. https://msdn.microsoft.com/en-us/library/windows/hardware/ff565346%28v=vs.85%29.aspx |
|
Создано: 23 февраля 2015 22:41 · Личное сообщение · #15 |
eXeL@B —› Программирование —› Windows7: WriteFile access denied только на дальних секторах. Помогите разобраться. |