Войти

Показать полную графическую версию : Открытие жесткого / оптического диска как потока вывода


mrcnn
07-02-2014, 10:03
Если открывать оптический диск как поток вывода (т.е. структура файловой системы значения не имеет), то на каком уровне привилегий это должно осуществляться? Необходимо ли это писать как драйвер с привилегиями SYSTEM?

HANDLE hDev = CreateFile(TEXT("\\\\.\\D:"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hDev == INVALID_HANDLE_VALUE)
{
printf("Could not open file (error %d)\n", GetLastError());
return 0;
}

Этот код создает хэндл.

Однако при попытке считать данные


if( FALSE == ReadFile(hDev, ReadBuffer, BUFFER_SIZE-2, &dwBytesRead, NULL) )
{
printf("Could not read from file (error %d)\n", GetLastError());
CloseHandle(hDev);
return 0;
}

if (dwBytesRead > 0)
{
ReadBuffer[dwBytesRead+1]='\0'; // NULL character

_tprintf(TEXT("Text read (%d bytes): \n"), dwBytesRead);
printf("%s\n", ReadBuffer);
}
else
{
printf("exit\n");
}


появляется ошибка 87. ( ERROR_INVALID_PARAMETER http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx)

Если я пытаюсь открывать жесткий диск кодом

HANDLE hDev = CreateFile(TEXT("\\\\.\\PhysicalDrive0"),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

то ошибка номер 5 ( ERROR_ACCESS_DENIED5 (0x5) Access is denied. http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

В чем я ошибаюсь?

Iska
07-02-2014, 10:49
mrcnn, посмотрите исходный код Far Manager'а. Он умеет открывать «\\.\PhysicalDriveN» как для просмотра, так и для редактирования. Может, что найдёте полезного.




© OSzone.net 2001-2012