¿Cómo obtener código de máquina en VC? Número de serie del disco duro, número de CPU, número de BIOS, etc.~.
Número de serie del disco duro: use la clase Win32_PhysicalMedia.
Número de CPU: Utilice la clase Win32_Processor.
Número de BIOS: Utilice la clase Win32_BIOS.
El siguiente ejemplo puede obtener el número de serie del disco duro, y otros ejemplos tienen un uso similar (el ejemplo en msdn cambia Win32_OperatingSystem a Win32_PhysicalMedia):
#define _WIN32_DCOM
#include lt;iostreamgt;
usando el espacio de nombres std;
#include lt;comdef.hgt;
#include lt;Wbemidl.hgt ;
# pragma comment(lib, "wbemuuid.lib")
int main(int argc, char **argv)
{
HRESULT hres;
// Paso 1: -------------------------------- -- ----- -----------
// Inicializar COM.-------------------- -- --------------------
hres = CoInitializeEx(0, COINIT_MULTITHREADED
if (FAILED(hres); ))
{
cout lt; "Error al inicializar la biblioteca COM. Código de error = 0x"
lt; hres lt ;lt.endl;
Retorno 1; // El programa falló.
}
// Paso 2:----------------------------- - --------------------
//Establecer nivel de seguridad COM general-------------- -- ---------
// Nota: si está utilizando Windows 2000, debe agregarlo a pAuthList ----
// Servicios de autenticación/ / Parámetros
Utilice la estructura SOLE_AUTHENTICATION_LIST para especificar las credenciales de autenticación predeterminadas del usuario
// NULL, // Reservado
RPC_C_AUTHN_LEVEL_DEFAULT, // Autenticación predeterminada
RPC_C_IMP_LEVEL_ IMPERSONATE, //Suplantación predeterminada
NULL, //Información de autenticación
EOAC_NONE, //Funciones adicionales
NULL // Reservado
);
EOAC_NONE, // Funciones adicionales
NULL // Reservado
NULL // Reservado
) ;
if (FAILED(hres))
{
cout lt; "Error al inicializar la seguridad. Código de error = 0x"
lt; lt; hex lt; hres lt; lt;
CoUninitialize();
}
// Paso 3:------------------------------ -- -------- --------------
// Obtener el localizador inicial de WMI----------- -- ------------
IWbemLocator *pLoc = NULL
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) amp;pLoc
if (FAILED(hres))
{
cout lt;lt; "Error al crear el objeto IWbemLocator."
lt;lt; "Código de error = 0x"
lt; ;lt; hex lt; hres lt; lt;
CoUninitialize();
retorno 1;
}
// Paso 4:----------------------------- - ----------------------
// Conéctese a WMI a través del método IWbemLocator::ConnectServer
IWbemServices * pSvc = NULL;
// Conéctese a root\cimvc() Utilice el usuario actual para conectarse al espacio de nombres root\cimv2
// Y obtenga el puntero pSvc
// Para realizar llamadas de IWbemServices.
hres = pLoc- gt; ConnectServer(
_bstr_t(L "ROOT\CIMV2"), // Ruta del objeto del espacio de nombres WMI
NULL, // Nombre de usuario. NULL = usuario actual
NULL, // Contraseña de usuario NULL = usuario actual
0, // NULL significa ubicación actual.
NULL. // Token de seguridad.
0, // Autorización (por ejemplo, Kerberos)
0, // Objeto de contexto
amp; proxy
);
if (FAILED(hres))
{
cout lt; code = 0x"
lt; lt; hex lt; lt; hres lt; lt; endl;
pLoc-gt; Release( );
CoUninitialize ();
return 1; // El programa falló.
}
cout lt;lt; "Conectado al espacio de nombres WMI ROOT\\CIMV2" lt;lt;
// Paso 5: -- -------------------------------------------------- -----------
//Establece el nivel de seguridad del proxy----------------------
hres = CoSetProxyBlanket(
pSvc, // Indica el proxy a configurar
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE,
NULL, // Nombre principal del servidor
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // identidad del cliente
EOAC_NONE // capacidades de proxy
p>
if (FAILED(hres))
{
cout lt; "No se pudo configurar el proxy. Código de error = 0x"
lt; hres lt; pSvc-gt;
pLoc-gt;
pLoc-gt;
CoUninitialize(); /p>
return 1; // El programa falló.
}
// Paso 6:----------------------------- - --------------------
// Utilice el puntero IWbemServices a WMI ----
// Por ejemplo, obtenga el sistema operativo Nombre del sistema
IEnumWbemClassObject * pEnumerator = NULL
hres = pSvc-gt; ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_PhysicalMedia"),
WBEM_ FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
& pEnumerator); if (FAILED(hres))
{
cout lt.lt; "Error en la consulta de medios físicos."
lt;lt; 0x"
lt; lt; hex lt; lt; hres lt; lt; endl;
pSvc-gt; Release( );
pLoc-gt ;Release();
CoUninitialize();
return 1; // El programa ha fallado.
}
// No Paso 7:---------------------------------------------- - --
// Obtener datos de la consulta en el paso 6 -------------------
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator-gt; ,
amp;pclsObj, amp;uReturn);
if(0 == uReturn)
{
break;
}
VARIANT vtProp;
// Obtener el valor del atributo Nombre
hr = pclsObj-gt Get(L "SerialNumber; ", 0 , amp; vtProp, 0, 0);
wcout lt; lt; "Número de serie:" lt; lt; vtProp.bstrVal lt; lt; endl;
VariantClear( amp ; vtProp);
}
// Limpieza
// ========
pSvc -gt; Liberar();
pLoc-gt;Liberar();
pEnumerator-gt.Release();<
/p>
pclsObj-gt; Release();
CoUninitialize();
return 0;