Я начинаю обучение программированию окон, используя C. Моя программа для чтения загрузочных секторов отображает один и тот же вывод для каждого диска, например, на дискете или жестком диске. Программа не должна генерировать один и тот же вывод для каждого диска.программирование окон в C
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#pragma pack(1)
struct boot
{
BYTE JUMP[3];
char bsOemName[8];
WORD bytesperSector;
BYTE sectorspercluster;
WORD sectorsreservedarea;
BYTE copiesFAT;
WORD maxrootdirentries;
WORD totalSectors;
BYTE mediaDescripter;
WORD sectorsperFAT;
WORD sectorsperTrack;
WORD sides;
WORD hiddenSectors;
char reserve[480];
WORD volumelabel;
};
void ReadSector(char *src,int ss,int num,void *buff);
void main()
{
struct boot b;
ReadSector("\\\\dell-PC\\c:",0,1,&b);
printf("Boot Sector name: %d\n",b.bsOemName);
printf("Bytes per Sector: %d\n",b.bytesperSector);
printf("Sectors per Cluster: %d\n",b.sectorspercluster);
printf("Total sectors: %d\n",b.totalSectors);
printf("copies FAT: %d\n",b.copiesFAT);
printf("hidden sectors: %d\n",b.hiddenSectors);
printf("volume label: %d\n",b.volumelabel);
}
void ReadSector(char *src,int ss,int num,void *buff)
{
HANDLE h;
unsigned int br;
h=CreateFile(src,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
SetFilePointer(h,(ss*512),NULL,FILE_BEGIN);
ReadFile(h,buff,512*num,&br,NULL);
CloseHandle(h);
}
Он генерирует тот же вывод для каждого аргумента, который я передаю функции ReadSector(). То есть, если я передаю d:
или e:
, выход всегда будет таким же. Я получаю значения мусора в качестве результата?
Boot Sector name: 1637707
Bytes per Sector: 52428
Sectors per Cluster: 204
Total sectors: 52428
copies FAT: 204
hidden sectors: 52428
volume label: 52428
Во-первых, вам лучше проверить, равен ли результат 'h'' INVALID_HANDLE_VALUE' – sinelaw
Обратите внимание на то, что опубликовал @wallyk. Вам будет очень сложно достичь того, что вам кажется ... –
Вы должны проверить каждый API-запрос на успех или неудачу. Вы этого не делаете. Один воображает, что вызов 'CreateFile' терпит неудачу, но вы никогда не узнаете, если не проверите. Внимательно прочитайте тему MSDN для каждой функции API. –