Ошибка чтения роздела, где ошибка?

Тема в разделе "WASM.WIN32", создана пользователем XshStasX, 23 фев 2011.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Не могу понять где затаилась ошибка?...
    Проблема в том что ReadFile возвращает 0, а GetLastError() (0x57 : неверный параметр)
    ОС ХР х64

    Код (Text):
    1. #define MAX_BOOT_CODE_SIZE  0x000001BE
    2.  
    3. HANDLE OpenHDD(
    4.       IN DWORD nDisk
    5.       )
    6.   {
    7.     WCHAR   szDiskName[32];
    8.  
    9.     swprintf( szDiskName, L"\\\\.\\PhysicalDrive%x", nDisk );
    10.  
    11.     return CreateFileW(szDiskName /*szDiskName*/, GENERIC_READ|GENERIC_WRITE,
    12.                       FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
    13.                       NULL,
    14.                       OPEN_EXISTING,
    15.                       FILE_ATTRIBUTE_NORMAL,//             /*FILE_FLAG_WRITE_THROUGH|*/FILE_FLAG_NO_BUFFERING,
    16.                       NULL
    17.                 );
    18.   };
    19.  
    20. void main(){
    21.  
    22.  
    23.                 CHAR lpFile[MAX_PATH];
    24.                 BYTE BootCode[MAX_BOOT_CODE_SIZE]= {0x90};
    25.                 DWORD NumDrive,s=0;
    26.                 printf("Enter number PhysicalDrive: ");
    27.                 scanf("%d",&NumDrive);
    28.                 printf("Enter file name to save: ");
    29.                 scanf("%255s",lpFile);
    30.                
    31.                 HANDLE hDrive =OpenHDD(NumDrive);
    32.                
    33.                 if (hDrive == INVALID_HANDLE_VALUE){
    34.                         PrintError();
    35.                     printf("Error open hdd\n");
    36.                     break;
    37.                 };
    38.                
    39.            
    40.                 s = sizeof(BootCode);
    41.                  if(!ReadFile(hDrive,&BootCode[0],s,&s,NULL))
    42.                     PrintError();
    43.  
    44.                 CloseHandle(hDrive);
    45.                
    46.                 if (!s)
    47.                     break;
    48.                
    49.                 HANDLE hFile = CreateFile(lpFile,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    50.                
    51.                 if (hFile == INVALID_HANDLE_VALUE){
    52.                     PrintError();
    53.                     printf("Error create \"%s\"\n",lpFile);
    54.                     break;
    55.                 };
    56.                
    57.                 WriteFile(hFile,BootCode,sizeof(BootCode),&s,NULL);
    58.  
    59.                 CloseHandle(hFile);
    60. };
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    FILE_SHARE_DELETE убери
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    убрал результат аналогичный.
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Размер буфера должен быть кратным размеру сектора. У тебя 0x000001BE