Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar C para obtener el número de serie del disco duro de la CPU

Cómo utilizar C para obtener el número de serie del disco duro de la CPU

#include "StdAfx.h"

#include ".\puiddisk.h"

#define _WIN32_DCOM

#include lt;iostreamgt;

usando el espacio de nombres std;

#include lt;comdef.hgt;

#include lt;Wbemidl.hgt;# pragma comment(lib, "wbemuuid.

CpuIDDisk::CpuIDDisk(void)

{

GetInfomation();

0, // Objeto de contexto

amp ;pSvc // Puntero al proxy IWbemServices

);

if (FAILED(hres))

{

pLoc-gt ; Release ();

CoUninitialize();

return 1; // El programa ha fallado.

}

// No. Paso 5: Establecer el nivel de seguridad del proxy

hres = // RPC_C_IMP_LEVEL_xxx

NULL, // Identidad del cliente

EOAC_NONE // Función de proxy

); si (FAILED(hres))

{

pSvc- gt;

pLoc-gt; ;

CoUninitialize();

return 1;

} // Paso 6.// Paso 6: utilizar el puntero IWbemServices para solicitar WMI --- -

IEnumWbemClassObject* pEnumerator = NULL;

// Calcular CPUID

hres = pSvc-gt; WQL" ),

bstr_t("SELECT * FROM Win32_Processor"), //Win32_OperatingSystem

WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,

NULL,

amp ;pEnumerator);

if (FAILED(hres))

{

pSvc-gt;Release();

pLoc- gt; Release();

CoUninitialize();

return

}

// Paso 7: Desde consulta Obtener datos en

IWbemClassObject *pclsObj;

ULONG uReturn = 0;

while (pEnumerator)

{

RRHH

ESULT hr = pEnumerator-gt; Siguiente(WBEM_INFINITE, 1,

amp; pclsObj, amp.uReturn); if(pEnumerator-gt; Siguiente(WBEM_INFINITE, 1,

amp; pclsObj, amp.uReturn)uReturn); if(0 == uReturn)

{

break;

}

VARIANT vtProp

VariantInit(amp; vtProp);

hr = pclsObj-gt; Get(L "ProcessorId", 0, amp; vtProp, 0, 0);

strProcessID = _com_util::ConvertBSTRToString(vtProp.bstrVal); //strProcessID: variable de nivel de clase

}//Calcular el número de serie del disco duro

hres = pSvc- gt ; ExecQuery(

bstr_t("WQL"),

bstr_t("SELECT * FROM Win32_DiskDrive"),

WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_ RETURN_IMMEDIATELY,

NULL,

amp;pEnumerator); if (FAILED(hres))

{

pSvc-gt;Release();

pLoc-gt; Liberar( );

CoUninitialize();

devolver

}

( pEnumerator)

{

HRESULT hr = pEnumerator-gt; Next(WBEM_ INFINITE, 1,

amp; pclsObj, amp; uReturn); 0 == uReturn)

{

break;

}VARIANT vtProp;

VariantInit(amp. vtProp);

hr = pclsObj-gt; Get(L "PNPDeviceID", 0, y; vtProp, 0, 0);

strDisk=_com_util::ConvertBSTRToString(vtProp.bstrVal); >

} pSvc-gt; Lanzamiento();

pLoc-gt;

Lanzamiento de pEnumerator(); pclsObj -gt; Release();

CoUninitialize(); return 0;

Este artículo proviene del blog de CSDN, indique la fuente: /honkerhero/archive/2007/01/ 04/1473589 .aspx