Red de conocimiento informático - Problemas con los teléfonos móviles - ¿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.~.

¿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.~.

Puede intentar usar WMI (detalles en msdn):

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;