¿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


0
#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;
}