访问分区表

下面程序访问磁盘上的前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);

 } 

 

 

}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值