php 硬盘序号_关于取硬盘序列号

测试环境:win7 64位

参考:http://www.cnblogs.com/lenmom/p/8556611.html

方法1,结果:5VP9MZ60

ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");

//网上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive获得的硬盘信息中并不包含SerialNumber属性。

ManagementObjectCollection moc = mc.GetInstances();

string strID = null;

foreach (ManagementObject mo in moc)

{

strID = mo.Properties["SerialNumber"].Value.ToString();

break;

}

textBox1.Text += "硬盘 ID:" + strID;

方法2,结果:4031371149,同方法3,此是10进制。

ManagementObjectSearcher mos = new ManagementObjectSearcher();

mos.Query = new SelectQuery("Win32_DiskDrive", "", new string[] { "PNPDeviceID", "Signature" });

ManagementObjectCollection myCollection = mos.Get();

ManagementObjectCollection.ManagementObjectEnumerator em = myCollection.GetEnumerator();

em.MoveNext();

ManagementBaseObject moo = em.Current;

string id = moo.Properties["Signature"].Value.ToString().Trim();

this.textBox1.Text = id;

方法3,结果:F049D78D,同方法2,一个是10进制,一个是16进制

CMD指令:diskpart,具体操作方法百度查。

方法4,结果:5VP9MZ60

使用软件:Everest.exe

四种方法,共有两个结果,哪个是对的呢?

其实网上除了c#托管代码读硬盘号外,还有一些win32做好的dll,测试下来也是5VP9MZ60,甚至有人说普通权限运行和管理员权限运行得到的结果也不一样。

最终还是把电脑打开自己看,结果显示,S/N: 5VP9MZ60,有图有真像。

11468

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows操作系统中,可以使用WMI(Windows Management Instrumentation)API函数来获取硬盘序列号。以下是一个示例代码: ```c++ #include <iostream> #include <windows.h> #include <winioctl.h> #include <Ntddscsi.h> #pragma comment(lib, "wbemuuid.lib") using namespace std; int main() { // 初始化COM库 HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); if (FAILED(hr)) { cerr << "Failed to initialize COM library." << endl; return 1; } // 连接WMI服务 IWbemLocator *pLoc = NULL; hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc); if (FAILED(hr)) { cerr << "Failed to create IWbemLocator object." << endl; CoUninitialize(); return 1; } IWbemServices *pSvc = NULL; hr = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc); if (FAILED(hr)) { cerr << "Failed to connect to IWbemServices." << endl; pLoc->Release(); CoUninitialize(); return 1; } // 设置WMI查询语句 BSTR query = SysAllocString(L"SELECT * FROM Win32_DiskDrive"); IEnumWbemClassObject* pEnumerator = NULL; hr = pSvc->ExecQuery(_bstr_t(L"WQL"), query, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); if (FAILED(hr)) { cerr << "Failed to execute query." << endl; pSvc->Release(); pLoc->Release(); CoUninitialize(); return 1; } // 遍历查询结果 ULONG uReturn = 0; while (pEnumerator) { IWbemClassObject *pclsObj = NULL; HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if (0 == uReturn) { break; } VARIANT vtProp; hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0); if (FAILED(hr)) { cerr << "Failed to get serial number." << endl; pclsObj->Release(); continue; } wcout << "Serial number: " << vtProp.bstrVal << endl; VariantClear(&vtProp); pclsObj->Release(); } // 释放资源 pEnumerator->Release(); pSvc->Release(); pLoc->Release(); CoUninitialize(); return 0; } ``` 该程序使用WMI查询语句"SELECT * FROM Win32_DiskDrive"获取所有硬盘的信息,然后遍历结果集,获取每个硬盘序列号。请注意,该程序需要管理员权限才能读硬盘信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值