C语言简易的硬盘操作器

用C语言写的
说一下程序命令
文件名 ReadMBR               //这个是读取MBR

文件名 WriteMBR 要写入主引导记录的文件名            //这个是改写MBR

命令栗子(当文件名为set.exe的时候)
set.exe ReadMBR               //这个是读取MBR

set.exe WriteMBR 1.txt            //这个是改写MBR(将当前目录下的 1.txt 文件中的内容写入到主引导记录。。。假设文件存在)

测试环境:XP
编辑器:VC++6.0

将上面的一条或者两条命令保存为 XXX.bat (XXX为你的BAT文件名)

 

下面是代码

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define DiskSize 512 //一个扇区512字节

void pause();
void ReadMBR();
void WriteMBR(unsigned char *Byte);
int bl;

int main(int argc,char* argv[])
{
	SetConsoleTitle("Read Master Boot Record    By:紫玫冰心");
	if(argc==2 && !strcmp(argv[1],"ReadMBR"))
		ReadMBR();//读MBR
	else if(argc==3 && !strcmp(argv[1],"WriteMBR"))
	{
		//写MBR
		FILE *MBRFile;
		unsigned char MBR[DiskSize]={0};
		MBRFile=fopen(argv[2],"rb+");
		if(!MBRFile)
		{
			printf("Can't open file");
			pause();
			return 0;
		}else if(!feof(MBRFile))
		{
			fread(MBR,1,DiskSize,MBRFile);
			WriteMBR(MBR);
			fclose(MBRFile);
		}
	}else{
		//产生一个随机数
		int r;
		srand((unsigned)time(NULL));
		r=rand()%1000;
		printf("%d\n",r);
	}
	return 0;
}
void pause()
{
	printf("\nPress any key to countinue");
	getchar();
}
void ReadMBR()
{
	//硬盘文件
	FILE *Disk;
	//保存文件
	FILE *File;
	int j;
	//引导记录
	unsigned char MBRCode[DiskSize]={0};
	Disk=fopen("\\\\.\\PhysicalDrive0","rb+");//打开硬盘
	if(!Disk)
		printf("Hard Disk not found!");//没有打开硬盘
	else if(!feof(Disk))
	{
		fseek(Disk,0,SEEK_SET);//移动到引导记录的位置
		fread(MBRCode,1,DiskSize,Disk);//读取引导记录
		fclose(Disk);//关闭硬盘
		File=fopen("MBR.ima","wb+");//硬盘文件
		if(!File)
			puts("Can't create 'MBR.ima'!");//没有创建文件
		else if(!feof(File))
		{
			//将引导记录保存
			fwrite(MBRCode,DiskSize,1,File);
			fclose(File);//关闭文件
			printf("----------------------Master Boot Record(Machine Code-char)---------------------");
			for(j=0;j<DiskSize;j++)
				printf("%c",MBRCode[j]);
			printf("\n----------------------Master Boot Record(Machine Code-int)----------------------");
			for(j=0;j<DiskSize;j++)
			{
				if(j<511)
					printf("%d\t",MBRCode[j]);
				else
					printf("%d\n",MBRCode[j]);
			}
			if(MBRCode[510]==85 && MBRCode[511]==170)//引导记录结束标记
				printf("The Master Boot Record is ok!\n");
			else
			printf("Operating system not found!\n");
			pause();
		}
	}
}
void WriteMBR(unsigned char *Byte)
{
	//硬盘文件
	FILE *ADisk;
	//保存文件
	FILE *AFile;
	int Aj;
	//引导记录
	unsigned char AMBRCode[DiskSize]={0};
	ADisk=fopen("\\\\.\\PhysicalDrive0","rb+");//打开硬盘
	if(!ADisk)
		puts("Hard Disk not found!");//没有打开硬盘
	else if(!feof(ADisk))
	{
		fseek(ADisk,0,SEEK_SET);//移动到引导记录的位置
		fread(AMBRCode,1,DiskSize,ADisk);//读取引导记录
		AFile=fopen("MBR.ima","wb+");//硬盘文件
		if(!AFile)
			puts("Can't create 'MBR.ima'!");//没有创建文件
		else if(!feof(AFile))
		{
			printf("MBRCode:\n");
			for(bl=0;bl<DiskSize;bl++)
				printf("%c",Byte[bl]);
			//将引导记录保存
			fwrite(AMBRCode,DiskSize,1,AFile);
			fseek(ADisk,0,SEEK_SET);//移动到引导记录的位置
			fwrite(Byte,DiskSize,1,ADisk);
			fclose(AFile);//关闭文件
		}
		fclose(ADisk);//关闭硬盘
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值