C/Visual C - ¿FUNCION PARA EXTRAER EL SERIAL NUMBER DEL PC ?

 
Vista:

¿FUNCION PARA EXTRAER EL SERIAL NUMBER DEL PC ?

Publicado por Cesar Rodríguez (1 intervención) el 04/07/2003 02:23:28
¿Alguién tiene algún código o ejecutable para extraer el Serial Number de la máquina en ambientes Windows?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Código para extraer el serial number en Windows

Publicado por Alejandro (1238 intervenciones) el 07/07/2025 22:21:02
César, para extraer el número de serie de la máquina en ambientes Windows, puedes utilizar el siguiente código en C++ que hace uso de la API de Windows. Este código utiliza la clase `WMI` (Windows Management Instrumentation) para obtener el número de serie del BIOS.

Aquí tienes un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>
 
#pragma comment(lib, "wbemuuid.lib")
 
void GetSerialNumber()
{
    HRESULT hres;
 
    // Inicializa COM
    hres = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hres))
    {
        std::cout << "Error al inicializar COM." << std::endl;
        return;
    }
 
    // Inicializa la biblioteca WMI
    hres = CoInitializeSecurity(
        NULL,
        -1,                          // COM negotiates service
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,  // Default authentication
        RPC_C_IMP_LEVEL_IMPERSONATE, // Impersonation
        NULL,                        // Reserved
        EOAC_NONE,                  // Additional capabilities
        NULL                         // Reserved
    );
 
    // Conecta a la WMI
    IWbemLocator *pLoc = NULL;
    hres = CoCreateInstance(
        CLSID_WbemLocator,
        0,
        CLSCTX_INPROC_SERVER,
        IID_IWbemLocator, (LPVOID *)&pLoc);
 
    IWbemServices *pSvc = NULL;
    hres = pLoc->ConnectServer(
        _bstr_t(L"ROOT\\CIMV2"), // WMI namespace
        NULL,                    // User name
        NULL,                    // User password
        0,                       // Locale
        NULL,                    // Security flags
        0,                       // Authority
        0,                       // Context object
        &pSvc                    // IWbemServices proxy
    );
 
    // Configura el contexto de seguridad
    hres = CoInitializeSecurity(
        NULL,
        -1,                          // COM negotiates service
        NULL,                        // Authentication services
        NULL,                        // Reserved
        RPC_C_AUTHN_LEVEL_DEFAULT,  // Default authentication
        RPC_C_IMP_LEVEL_IMPERSONATE, // Impersonation
        NULL,                        // Reserved
        EOAC_NONE,                  // Additional capabilities
        NULL                         // Reserved
    );
 
    // Ejecuta la consulta WMI para obtener el número de serie
    IEnumWbemClassObject* pEnumerator = NULL;
    hres = pSvc->ExecQuery(
        bstr_t("WQL"),
        bstr_t("SELECT SerialNumber FROM Win32_BIOS"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
        NULL,
        &pEnumerator);
 
    IWbemClassObject *pclsObj = NULL;
    ULONG uReturn = 0;
 
    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
        if (0 == uReturn)
        {
            break;
        }
 
        VARIANT vtSerialNumber;
        hr = pclsObj->Get(L"SerialNumber", 0, &vtSerialNumber, 0, 0);
        std::wcout << "Serial Number: " << vtSerialNumber.bstrVal << std::endl;
 
        VariantClear(&vtSerialNumber);
        pclsObj->Release();
    }
 
    // Limpieza
    pSvc->Release();
    pLoc->Release();
    pEnumerator->Release();
    CoUninitialize();
}
 
int main()
{
    GetSerialNumber();
    return 0;
}

Instrucciones para compilar y ejecutar:



1. Configuración del entorno: Asegúrate de tener un entorno de desarrollo de C++ configurado, como Visual Studio.

2. Crear un nuevo proyecto: Crea un nuevo proyecto de consola en Visual Studio.

3. Agregar el código: Copia y pega el código anterior en el archivo principal de tu proyecto.

4. Compilar el proyecto: Compila el proyecto. Asegúrate de que no haya errores.

5. Ejecutar el programa: Ejecuta el programa y debería mostrar el número de serie de la máquina.

Este código utiliza la API de WMI para acceder a la información del BIOS y extraer el número de serie. Asegúrate de tener los permisos necesarios para ejecutar consultas WMI en tu máquina.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar