|
原帖由 chiannet 于 2012-12-23 09:06 发表
可否麻烦你贴一个delphi 识别硬盘主分区、逻辑分区的完整代码?
给你来段c语言的,linux下 gcc 编译,你可以参考改成delphi的。- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <linux/types.h>
- #pragma pack(1) // 内存按1bit对齐,主要是为了省内存,此句不要也没关系
- struct partion_table //分区表结构
- {
- __u8 boot_flag;//启动类型
- __u8 start[3];
- __u8 fs_type;//分区类型
- __u8 end[3];
- __u32 sectors_before;//分区前扇区数
- __u32 sectors;//分区总扇区数
- };
- struct mbr //MBR结构
- {
- __u8 boot_code[446];
- struct partion_table pt[4];
- __u8 end_sign[2];//结束标记55AA
- };
- int fd;
- unsigned long first_ebr_offset=0;
- #define sector_size 512
- unsigned char buf[sector_size];
- unsigned char tmp[32];
- unsigned char device[16];
- struct mbr *mymbr;
- int main(int argc,char **argv)
- {
- if (argc != 2)
- {
- printf("Usage: %s <device>\n",argv[0]);
- return 0;
- }
- //loff_t num=strtol(argv[2],NULL,10);
- strcpy(device,argv[1]);
- openfile(argv[1]);
- readsector(0);
- show_mbr();
- close(fd);
- return 0;
- }
- int openfile(unsigned char *filename) //open a device
- {
- fd=open(filename, O_RDWR); //read and write
- if (fd == -1) return 1;
- return 0;
- }
复制代码
[ 本帖最后由 clonecd 于 2013-1-8 22:47 编辑 ] |
|