⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskdlg.cpp

📁 该程序可以分析磁盘的bpb
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		sprintf(Str,"%s%02X ",Str,Buf[i]);
		if((i%16)==15)sprintf(Str,"%s\r\n",Str);
	}

	SetDlgItemText(IDC_EDIT1,Str);
	if( num == 1 )
		SoftdiskFDT(Buf,10);
	else
		HarddiskFDT(Buf,10);
}


//////////////////////////////////

///////////////////////////////////////////////////////////
////////////SoftdiskBPB////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::SoftdiskBPB(unsigned char *Buf,int n) 
{
	char *Str = new char[1024*n];
	memset(Str,0,1024*n);
	
	sprintf(Str,"         %s%s\r\n",Str,"软盘BPB:");
	sprintf(Str,"%s%s",Str,"每个扇区的字节数:");
	sprintf(Str,"%s%d         ",Str,Buf[12]*16*16+Buf[11]);
	sprintf(Str,"%s%s",Str,"每个簇的扇区数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[13]);
	sprintf(Str,"%s%s",Str,"保留的扇区数:");
	sprintf(Str,"%s%d               ",Str,Buf[15]*16*16+Buf[14]);
	sprintf(Str,"%s%s",Str,"FAT的个数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[16]);
	sprintf(Str,"%s%s",Str,"根目录项数:");
	sprintf(Str,"%s%d               ",Str,Buf[18]*16*16+Buf[17]);
	sprintf(Str,"%s%s",Str,"卷内总扇区数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[20]*16*16+Buf[19]);
	sprintf(Str,"%s%s",Str,"介质描述字节:");
	sprintf(Str,"%s%d             ",Str,Buf[21]);
	sprintf(Str,"%s%s ",Str,"每个FAT的扇节数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[23]*16*16+Buf[22]);
	sprintf(Str,"%s%s",Str,"每个磁道的扇区数:");
	sprintf(Str,"%s%d          ",Str,Buf[25]*16*16+Buf[24]);
	sprintf(Str,"%s%s ",Str,"磁头数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[27]*16*16+Buf[26]);
	sprintf(Str,"%s%s",Str,"隐藏的扇区数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[29]*16*16+Buf[28]);
	SetDlgItemText(IDC_EDIT3,Str);
}
///////////////////////////////////////////////////////////
////////////HarddiskBPB////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::HarddiskBPB(unsigned char *Buf,int n) 
{
	char *Str = new char[1024*n];
	memset(Str,0,1024*n);
	sprintf(Str,"         %s%s\r\n",Str,"硬盘BPB:");
	sprintf(Str,"%s%s",Str,"每个扇区的字节数:");
	sprintf(Str,"%s%d         ",Str,Buf[12]*16*16+Buf[11]);
	sprintf(Str,"%s%s",Str,"每个簇的扇区数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[13]);
	sprintf(Str,"%s%s",Str,"保留的扇区数:");
	sprintf(Str,"%s%d              ",Str,Buf[15]*16*16+Buf[14]);
	sprintf(Str,"%s%s",Str,"FAT的个数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[16]);
	sprintf(Str,"%s%s",Str,"根目录项数:");
	sprintf(Str,"%s%d                 ",Str,Buf[18]*16*16+Buf[17]);
	sprintf(Str,"%s%s",Str,"卷内总扇区数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[20]*16*16+Buf[19]);
	sprintf(Str,"%s%s",Str,"介质描述字节:");
	sprintf(Str,"%s%d             ",Str,Buf[21]);
	sprintf(Str,"%s%s ",Str,"每个FAT的扇节数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[23]*16*16+Buf[22]);
	sprintf(Str,"%s%s",Str,"每个磁道的扇区数:");
	sprintf(Str,"%s%d          ",Str,Buf[25]*16*16+Buf[24]);
	sprintf(Str,"%s%s ",Str,"磁头的数目:");
	sprintf(Str,"%s%d\r\n",Str,Buf[27]*16*16+Buf[26]);
	sprintf(Str,"%s%s ",Str,"隐藏扇区的数目:");
	sprintf(Str,"%s%d     ",Str,Buf[31]*16*16*16*16*16*16+Buf[30]*16*16*16*16+Buf[29]*16*16+Buf[28]);
	sprintf(Str,"%s%s",Str,"扇区总数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[35]*16*16*16*16*16*16+Buf[34]*16*16*16*16+Buf[33]*16*16+Buf[32]);
	sprintf(Str,"%s%s ",Str,"每个FAT有几个扇区:");
	sprintf(Str,"%s%d     ",Str,Buf[39]*16*16*16*16*16*16+Buf[38]*16*16*16*16+Buf[37]*16*16+Buf[36]);
	sprintf(Str,"%s%s",Str,"扩展标记:");
	sprintf(Str,"%s%d\r\n",Str,Buf[41]*16*16+Buf[40]);
	sprintf(Str,"%s%s1",Str,"文件系统版本:");
	sprintf(Str,"%s%d              ",Str,Buf[43]*16*16+Buf[42]);
	sprintf(Str,"%s%s",Str,"根目录簇数:");
	sprintf(Str,"%s%d\r\n",Str,Buf[47]*16*16*16*16*16*16+Buf[46]*16*16*16*16+Buf[45]*16*16+Buf[44]);
	sprintf(Str,"%s%s",Str,"文件系统信息扇区数:");
	sprintf(Str,"%s%d         ",Str,Buf[49]*16*16+Buf[48]);
	sprintf(Str,"%s%s",Str,"保留:");
	int num(0);
	int x(1);
	for(int i=0;i<=11;i++)
	{
		num+=Buf[49+i]*x;
		x*=16*16;
	}
	sprintf(Str,"%s%d\r\n",Str,num);
	sprintf(Str,"%s%s",Str,"磁盘编号:");
	sprintf(Str,"%s%d                   ",Str,Buf[65]);
	sprintf(Str,"%s%s",Str,"保留:");
	sprintf(Str,"%s%d\r\n",Str,Buf[65]);
	
	SetDlgItemText(IDC_EDIT3,Str);
}
///////////////////////////////////////////////////////////
////////////SoftdiskFAT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::SoftdiskFAT(unsigned char *Buf,int n)
{
	char *Str = new char[1024*5*n];
	memset(Str,0,1024*5*n);
	sprintf(Str,"         %s%s\r\n",Str,"软盘FAT:");
	for(int i=0;i<512*n;i++)
	{
		sprintf(Str,"%s%02X ",Str,Buf[i]);
		if((i%16)==15)sprintf(Str,"%s\r\n",Str);
	}
	SetDlgItemText(IDC_EDIT3,Str);

}
///////////////////////////////////////////////////////////
////////////HarddiskFAT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::HarddiskFAT(unsigned char *Buf,int n)
{
	char *Str = new char[1024*5*n];
	memset(Str,0,1024*5*n);
	sprintf(Str,"         %s%s\r\n",Str,"硬盘FAT:");
	for(int i=0;i<512*n;i++)
	{
		sprintf(Str,"%s%02X ",Str,Buf[i]);
		if((i%16)==15)sprintf(Str,"%s\r\n",Str);
	}
	SetDlgItemText(IDC_EDIT3,Str);

}	
///////////////////////////////////////////////////////////
////////////SoftdiskFDT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::SoftdiskFDT(unsigned char *Buf,int n)
{
	char *Str = new char[10240*5*n];
	memset(Str,0,10240*5*n);

	sprintf(Str,"%s         %s\r\n",Str,"软盘FDT:");
	
	int i,j;
	for (i=0,j=1; i<n*16; i++)
	{
		if ( Buf[i*32] < 32 || Buf[i*32] > 127 || Buf[i*32+11]==15 )
		{
			continue;
		}
		sprintf(Str, "%s%s%d%s\r\n",Str,"第",j++,"个文件:");
		char name[9];
///////////输出文件名
		sprintf(Str, "%s%s ", Str,"文件名:");
		for(int k=0; k<8; k++)
		{
			sprintf(Str, "%s%02X ", Str, Buf[i*32+k]);
			if( Buf[i*32+k] < 32 || Buf[i*32+k] > 127 )
				continue;
			name[k]=(char)Buf[i*32+k];
			
		}
		name[k]='\0';
		sprintf(Str, "%s文件名:%s\r\n", Str, name);
///////////输出扩展名
		for(k=0; k<3; k++)
		{
			name[k]=(char)Buf[i*32+8+k];
			sprintf(Str, "%s%02X ", Str, Buf[i*32+8+k]);
		}
		name[k]='\0';
		sprintf(Str, "%s扩展名:%s\r\n", Str, name);
//////////输出属性
		sprintf(Str, "%s属性:", Str);
		int attr = Buf[i*32+11];
		if  ((attr>>0)&1)
			sprintf(Str, "%s写保护 ", Str);
		if  ((attr>>1)&1)
			sprintf(Str, "%s隐藏 ", Str);
		if  ((attr>>2)&1)
			sprintf(Str, "%s系统 ", Str);
		if  ((attr>>3)&1)
			sprintf(Str, "%s卷标 ", Str);
		if  ((attr>>4)&1)
			sprintf(Str, "%s子目录 ", Str);
		if  ((attr>>5)&1)
			sprintf(Str, "%s存档", Str);
		sprintf(Str, "%s\r\n", Str);
//////////输出时间
		sprintf(Str, "%s时间:", Str);
		int time = Buf[i*32+22] + Buf[i*32+23]*256;
		sprintf(Str, "%s%02d:", Str, time>>11);
		sprintf(Str, "%s%02d:", Str, (time&2047)>>5);
		sprintf(Str, "%s%02d  ", Str, time&31);
		sprintf(Str, "%s\r\n", Str);
//////////输出日期
		sprintf(Str, "%s日期:", Str);
		int date = Buf[i*32+24] + Buf[i*32+25]*256;
		sprintf(Str, "%s%04d-", Str, (date>>9)+1980);
		sprintf(Str, "%s%02d-", Str, (date&480)>>5);
		sprintf(Str, "%s%02d\r\n", Str, date&31);
		sprintf(Str, "%s\r\n", Str);

//over!
	}
	
	SetDlgItemText(IDC_EDIT3, Str);
}
///////////////////////////////////////////////////////////
////////////HarddiskFDT////////////////////////////////////
///////////////////////////////////////////////////////////
void CDiskDlg::HarddiskFDT(unsigned char *Buf,int n)
{
	char *Str = new char[1024*5*n];
	memset(Str,0,1024*5*n);
	sprintf(Str,"%s         %s\r\n",Str,"硬盘FDT:");

	int i,j;
	for (i=0,j=1; i<n*16; i++)
	{
		if ( !(32<Buf[i*32]) && (Buf[i*32]<127) || Buf[i*32+11]==15 )
		{
			continue;
		}
		sprintf(Str, "%s%s%d%s\r\n",Str,"第",j++,"个文件:");
		char name[9];
///////////输出文件名
		for(int k=0; k<8; k++)
		{
			sprintf(Str, "%s%02X ", Str, Buf[i*32+k]);
			if( Buf[i*32+k] < 32 || Buf[i*32+k] > 127 )
				continue;
			name[k]=(char)Buf[i*32+k];
			
		}
		name[k]='\0';
		sprintf(Str, "%s文件名:%s\r\n", Str, name);
///////////输出扩展名
		for(k=0; k<3; k++)
		{
			name[k]=(char)Buf[i*32+8+k];
			sprintf(Str, "%s%02X ", Str, Buf[i*32+8+k]);
		}
		name[k]='\0';
		sprintf(Str, "%s扩展名:%s\r\n", Str, name);
//////////输出属性
		sprintf(Str, "%s属性:", Str);
		int attr = Buf[i*32+11];
		if  ((attr>>0)&1)
			sprintf(Str, "%s写保护 ", Str);
		if  ((attr>>1)&1)
			sprintf(Str, "%s隐藏 ", Str);
		if  ((attr>>2)&1)
			sprintf(Str, "%s系统 ", Str);
		if  ((attr>>3)&1)
			sprintf(Str, "%s卷标 ", Str);
		if  ((attr>>4)&1)
			sprintf(Str, "%s子目录 ", Str);
		if  ((attr>>5)&1)
			sprintf(Str, "%s存档", Str);
		sprintf(Str, "%s\r\n", Str);
//////////输出时间
		sprintf(Str, "%s时间:", Str);
		int time = Buf[i*32+22] + Buf[i*32+23]*256;
		sprintf(Str, "%s%02d:", Str, time>>11);
		sprintf(Str, "%s%02d:", Str, (time&2047)>>5);
		sprintf(Str, "%s%02d  ", Str, time&31);
		sprintf(Str, "%s\r\n", Str);
//////////输出日期
		sprintf(Str, "%s日期:", Str);
		int date = Buf[i*32+24] + Buf[i*32+25]*256;
		sprintf(Str, "%s%04d-", Str, (date>>9)+1980);
		sprintf(Str, "%s%02d-", Str, (date&480)>>5);
		sprintf(Str, "%s%02d\r\n", Str, date&31);
		sprintf(Str, "%s\r\n", Str);

//over!
	}
	
	SetDlgItemText(IDC_EDIT3,Str);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -