Я написал дисковую утилиту, которая позволяла стирать все физические диски. он использует api файла Windows, вызывая:
destFile = CreateFile("\\\\.\\PhysicalDrive1",
GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,createflags, NULL);
а затем просто вызовите WriteFile
и убедитесь, что вы пишете несколько секторов, то есть 512 байт.
в прошлом это прекрасно работало на XP и даже на Win7 RC, все, что вам нужно сделать, это убедиться, что вы запускаете его как администратор.
но теперь у меня есть розничная Win7 professional, она больше не работает! диски по-прежнему открыты для записи, но вызов WriteFile
на успешно открытом диске теперь не выполняется!
кто-нибудь знает, почему это может быть? могло ли это иметь какое-то отношение к его открытию с помощью общих флагов? это всегда то, что я делал раньше, и это сработало. может быть, что-то сейчас разделяет диск? блокирование записи? Есть ли способ правильно «размонтировать» диск или, по крайней мере, его разделы, чтобы у меня был монопольный доступ к нему?
некоторые другие инструменты, которые раньше работали, тоже больше не работают, но некоторые работают, например, функция стирания WD Diagnostic. и после того, как он стер данные с диска, мой инструмент тоже работает с ним! Это заставило меня поверить в то, что мне нужно сначала выполнить какой-то процесс "размонтирования" с диском, чтобы освободить права на запись на него.
Любые идеи?
Обновлять:
код ошибки, возвращаемый из WriteFile
, - «5», ERROR_ACCESS_DENIED
, но опять же, если я сначала «сотру» диск с помощью WD Diag, я могу получить доступ и записать на диск в порядке. когда я снова инициализирую диск и задаю ему раздел, я возвращаюсь к ошибке ERROR_ACCESS_DENIED
.