
VC是否可以读写硬盘的引导区(破还原精灵方法求解)?
BOOL CDirectAccessHDDlg::ReadSectors(BYTE bDrive, DWORD dwStartSector, WORD wSectors, LPBYTE lpSectBuff)
// 对磁盘扇区数据的读取
{
if (bDrive == 0) return 0;
char devName[] = "\\\\\\A:";
devName[4] ='A' + bDrive - 1;
HANDLE hDev = CreateFile(devName, GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDev == INVALID_HANDLE_VALUE) return 0;
SetFilePointer(hDev, 512 dwStartSector, 0, FILE_BEGIN);
DWORD dwCB;
BOOL bRet = ReadFile(hDev, lpSectBuff, 512 wSectors, &dwCB, NULL);
CloseHandle(hDev);
return bRet;
}
不过估计对付不了某些还原软件,这些软件一般是带有磁盘过滤驱动的,像这些通过驱动 *** 作磁盘的
方法往往都会被知道,可以利用DDK做个IO驱动,然后通过IO驱动直接 *** 作IDE设备的IO使用ATAPI协议来完成 *** 作;这样就
不容易被拦截,当然IO也是有办法拦截的,那我就不 知道怎么办了!
wmi、注册表、shell等编程方法,可以获取到和windows设备管理器相同的信息,如果设备管理器没有,标准编程方法是获取不到的。
鲁大师的检测获取,可不是简单代码可以完成的,如果不是商业应用,建议放弃,太麻烦了。这个首先,需要做一个r0级别的驱动程序,才可以直接获取硬件信息,然后窗口程序和驱动程序进行信息交互。(对未识别硬件的简单识别或SSD这样的简单判断,这样做就可以)
但获取后,实际只是一组标识数据,是无法直接确定品牌和版本的,也无法直接判断ssd的参数和品牌。要像鲁大师那样详细的驱动信息,实际是需要一个非常详细的硬件信息对比库,将r0获取的硬件标识数据和数据库中每个产品的信息作对比,尤其是山寨产品,数据标识混乱,还需要一个智能匹配逻辑,根据周边信息作综合判定。这可不是一个简单的事情,可以说是鲁大师的“发家”根本。
首先打开运行窗口,在运行窗口中输入cmd进入命令提示符。然后在命令提示符中执行命令diskpart来查看硬盘序列号。接着执行list disk把硬盘列表显示出来,图中显示只有一个硬盘。输入select disk 0回车选择硬盘。最后输入命令detail disk即可把硬盘信息显示出来了,在硬盘信息中我们就能够看到硬盘序列号了。
代码如下(具体看注释):
view plaincopy to clipboardprint
using System;
using SystemManagement;
namespace SoyeeComm
{
/// summary
/// Computer Information
/// /summary
public class Computer
{
public string CpuID;
public string MacAddress;
public string DiskID;
public string IpAddress;
public string LoginUserName;
public string ComputerName;
public string SystemType;
public string TotalPhysicalMemory; //单位:M
private static Computer _instance;
public static Computer Instance()
{
if (_instance == null)
_instance = new Computer();
return _instance;
}
protected Computer()
{
CpuID=GetCpuID();
MacAddress=GetMacAddress();
DiskID=GetDiskID();
IpAddress=GetIPAddress();
LoginUserName=GetUserName();
SystemType=GetSystemType();
TotalPhysicalMemory=GetTotalPhysicalMemory();
ComputerName=GetComputerName();
}
string GetCpuID()
{
try
{
//获取CPU序列号代码
string cpuInfo = ;//cpu序列号
ManagementClass mc = new ManagementClass(Win32_Processor);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
{
cpuInfo = moProperties[ProcessorId]ValueToString();
}
moc=null;
mc=null;
return cpuInfo;
}
catch
{
return unknow;
}
finally
{
}
}
string GetMacAddress()
{
try
{
//获取网卡硬件地址
string mac=;
ManagementClass mc = new ManagementClass(Win32_NetworkAdapterConfiguration);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo[IPEnabled] == true)
{
mac=mo[MacAddress]ToString();
break;
}
}
moc=null;
mc=null;
return mac;
}
catch
{
return unknow;
}
finally
{
}
}
string GetIPAddress()
{
try
{
//获取IP地址
string st=;
ManagementClass mc = new ManagementClass(Win32_NetworkAdapterConfiguration);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo[IPEnabled] == true)
{
//st=mo[IpAddress]ToString();
SystemArray ar;
ar=(SystemArray)(moProperties[IpAddress]Value);
st=arGetValue(0)ToString();
break;
}
}
moc=null;
mc=null;
return st;
}
catch
{
return unknow;
}
finally
{
}
}
string GetDiskID()
{
try
{
//获取硬盘ID
String HDid=;
ManagementClass mc = new ManagementClass(Win32_DiskDrive);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
{
HDid = (string)moProperties[Model]Value;
}
moc=null;
mc=null;
return HDid;
}
catch
{
return unknow;
}
finally
{
}
}
/// summary
/// *** 作系统的登录用户名
/// /summary
/// returns/returns
string GetUserName()
{
try
{
string st=;
ManagementClass mc = new ManagementClass(Win32_ComputerSystem);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
{
st=mo[UserName]ToString();
}
moc=null;
mc=null;
return st;
}
catch
{
return unknow;
}
finally
{
}
}
/// summary
/// PC类型
/// /summary
/// returns/returns
string GetSystemType()
{
try
{
string st=;
ManagementClass mc = new ManagementClass(Win32_ComputerSystem);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
{
st=mo[SystemType]ToString();
}
moc=null;
mc=null;
return st;
}
catch
{
return unknow;
}
finally
{
}
}
/// summary
/// 物理内存
/// /summary
/// returns/returns
string GetTotalPhysicalMemory()
{
try
{
string st=;
ManagementClass mc = new ManagementClass(Win32_ComputerSystem);
ManagementObjectCollection moc = mcGetInstances();
foreach(ManagementObject mo in moc)
相关代码如下:
CString zxcstr(DWORD zvalue)
{
CString zxstr;
zxstrFormat("%ld",zvalue);
return zxstr;
}
void CZXbakupDlg::Ontest()
{
// TODO: Add your control notification handler code here
DWORD clu,sec,freeclu,talclu;
GetDiskFreeSpaceEx("c:\\",(PULARGE_INTEGER)&clu,(PULARGE_INTEGER)&sec,(PULARGE_INTEGER)&freeclu);
MessageBox("磁盘总空间:"+zxcstr(sec)+ "剩余空间:"+zxcstr(freeclu));
}
以上就是关于VC是读写硬盘的引导区全部的内容,包括:VC是读写硬盘的引导区、vc++如何获取主板芯片组信息(已经试过api、wmi、注册表,紧急~)、WIN10 C++获取CPU和硬盘序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)