下面程序访问磁盘上的前512字节分区表内容:
#include <windows.h>
#include <stdio.h>
//分区表数据结构,注意用“单字节”对齐
#pragma pack(1)
typedef struct tagCMOSMemory
{
ULONG ulBaseMem;
ULONG ulExtMem;
}CMOS_MEMORY, *PCMOS_MEMORY;
typedef struct tagPartitionInfo
{
UCHAR ucActivePartFlag; // Indicator of active (boot) partition
UCHAR ucDH; // Starting CHS, in Int13h format
UCHAR ucCL;
UCHAR ucCH;
UCHAR ucType; // Partition (File System) type
UCHAR ucEndDH; // Ending CHS, in Int13h format
UCHAR ucEndCL;
UCHAR ucEndCH;
DWORD dwLba; // Start of partition (in sectors)
DWORD dwSize; // Size of partition (in sectors)
} PART_INFO, *PPART_INFO;
typedef struct tagMBR
{
UCHAR ucBootProgramAndData[0x1be]; // Bootstrap app. //[446]
PART_INFO PartInfo[4]; // Storage for up to 4 primary partitions
USHORT usSignature; // MBR signature - should be 0xaa55
}MBR, *PMBR;
#pragma pack()
void main()
{
MBR data;
DWORD dwBytesRead;
HANDLE hDriver = CreateFile(".//physicaldrive0",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
0,
0);
printf("sizeof(MBR) = %d/n",sizeof(MBR));
printf("sizeof(tagPartitionInfo) = %d/n",sizeof(tagPartitionInfo));
if(hDriver != NULL)
{
ReadFile(hDriver, &data, 512,&dwBytesRead, NULL);
}
}