Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2012, 11:12   #1
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию Почему не работает код?

Запускаемый код с правами администратора под Windows 7:

Код:
hfile = CreateFile("\\\\.\\PHYSICALDRIVE4",
			 GENERIC_READ | GENERIC_WRITE,
			 FILE_SHARE_READ|FILE_SHARE_WRITE,
			 NULL,
			 OPEN_EXISTING,
		         FILE_FLAG_NO_BUFFERING,
			 NULL);
При выполнении дает ошибку доступа 5. При удалении флага GENERIC_WRITE все работает.

В чем дело?
Asdprom вне форума Ответить с цитированием
Старый 08.03.2012, 11:18   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну не дает винда вам права писать напрямую на диск.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.03.2012, 11:33   #3
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию

Понятно, что не дает!
Понятно, что для прямой записи нужно заблокировать и размонтировать диск ( FSCTL_LOCK_VOLUME и FSCTL_DISMOUNT_VOLUME).
Но DeviceIoControl в качестве аргумента требует дескриптор устройства, а CreateFile дает ошибку доступа вместо него.
Как быть?
Asdprom вне форума Ответить с цитированием
Старый 08.03.2012, 11:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

чтоб размонтировать вам не нужен GENERIC_WRITE.
а значит будет два открытия диска.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.03.2012, 11:52   #5
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию

Понятно, что для размонтирования и блокирования он не нужен!
Но как понять "два открытия"?
Т.е. после блокировки и размонтирования нужно повторно использовать CreateFile с флагом GENERIC_WRITE? Но в этом случае не получим ли мы дескриптор отличный от первого? Если да, то какой использовать для записи?
Asdprom вне форума Ответить с цитированием
Старый 08.03.2012, 12:25   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

открыли, размонтировали, закрыли.
открыли, пишите, закрыли.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.03.2012, 12:47   #7
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию

"открыли, размонтировали, закрыли."
Но при закрытии дескриптора (CloseHandle) блокировка разве не исчезнет?
Разве не нужно его удерживать открытым?
Asdprom вне форума Ответить с цитированием
Старый 08.03.2012, 12:57   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не должна, так как не полученно же команды разблокировки.
да и попробуйте всетаки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.03.2012, 13:38   #9
Asdprom
Форумчанин
 
Регистрация: 05.02.2011
Сообщений: 119
По умолчанию

Спасибо) Буду пробовать!
Если возникнут вопросы, то можно будет обратиться к Вам в ЛС?
Asdprom вне форума Ответить с цитированием
Старый 08.03.2012, 13:59   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

лучше создавайте темы или продолжайте старые(если вопрос все тот же)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает код? Bogusgl Microsoft Office Excel 20 10.08.2010 11:14
Почему не работает данный код? C# byte916 Помощь студентам 4 11.12.2009 21:19
кто знает почему не работает код andRR Общие вопросы C/C++ 6 14.06.2009 22:24
Почему не работает код? Kashp Общие вопросы Delphi 3 09.08.2007 17:33