私はCを使ってWindowsプログラミングを学習する初心者です。ブートセクタを読み取る私のプログラムは、すべてのドライブ、つまりフロッピーまたはハードディスクの同じ出力を表示します。プログラムはすべてのドライブに対して同じ出力を生成しません。Windowsでの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'への呼び出しが失敗すると想像していますが、あなたがチェックしない限り、あなたは決して知りません。各API関数のMSDNトピックを注意深くお読みください。 –