Cómo utilizar C para obtener el número de serie del disco duro de la CPU
#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(); p >
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