Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Открытие жесткого / оптического диска как потока вывода (http://forum.oszone.net/showthread.php?t=277301)

mrcnn 07-02-2014 10:03 2304610

Открытие жесткого / оптического диска как потока вывода
 
Если открывать оптический диск как поток вывода (т.е. структура файловой системы значения не имеет), то на каком уровне привилегий это должно осуществляться? Необходимо ли это писать как драйвер с привилегиями 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/libr...(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/libr...(v=vs.85).aspx

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

Iska 07-02-2014 10:49 2304646

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


Время: 20:32.

Время: 20:32.
© OSzone.net 2001-