VC是读写硬盘的引导区

VC是读写硬盘的引导区,第1张

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和硬盘序列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9327272.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存