визуальный Не удается получить уникальный идентификатор процессора с помощью классов WMI Переполнение стека

В приложении необходимо получить системный уникальный идентификатор. ТАК, что я попытался получить уникальный идентификатор процессора. и я использую свойство класса WMI, чтобы получить это.
Но при попытке получить свойство UniqueId класса win32_processor возвращает VT_NULL в варианте, в котором ожидается вывод. Но в то же время он предоставляет действительные выходные данные для других свойств, таких как, deciveId, processorId и т. Д., Но они не являются уникальными и не могут выполнить мою задачу.

Кто-нибудь знает, почему это происходит? Пожалуйста, помогите мне ….

ниже приведен код, который я использовал … пожалуйста, посмотрите, и скажите, есть ли проблема в этом ….
какую модификацию я могу сделать, чтобы она работала …

   if(CoInitializeSecurity( NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
0
) != S_OK)
return;

IWbemLocator * pIWbemLocator = NULL;
IWbemServices * pWbemServices = NULL;
IEnumWbemClassObject * pEnumObject  = NULL;

BSTR bstrNamespace = (L"root\\cimv2");if(CoCreateInstance (
CLSID_WbemAdministrativeLocator,
NULL ,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER ,
IID_IUnknown ,
( void ** ) & pIWbemLocator
) != S_OK)
return;

if(pIWbemLocator->ConnectServer(
bstrNamespace,  // Namespace
NULL,          // Userid
NULL,           // PW
NULL,           // Locale
0,              // flags
NULL,           // Authority
NULL,           // Context
&pWbemServices
) != S_OK)
return;HRESULT hRes;
BSTR strQuery = (L"Select * from Win32_Processor");
BSTR strQL = (L"WQL");
hRes = pWbemServices->ExecQuery(strQL, strQuery,WBEM_FLAG_RETURN_IMMEDIATELY,NULL,&pEnumObject);

if(hRes != S_OK)
{
MessageBox("Could not execute Query");
return;
}

ULONG uCount = 1, uReturned;
IWbemClassObject * pClassObject = NULL;hRes = pEnumObject->Reset();

if(hRes != S_OK)
{
MessageBox("Could not Enumerate");
return;
}

hRes = pEnumObject->Next(WBEM_INFINITE,uCount, &pClassObject, &uReturned);
if(hRes != S_OK)
{
MessageBox("Could not Enumerate");
return;
}

VARIANT v;BSTR strClassProp = SysAllocString(L"UniqueId");

hRes = pClassObject->Get(strClassProp, 0, &v, 0, 0);// here the v is VT_NULL but works if the vlaue of strClassProp is processerId, deviceId
if(hRes != S_OK)
{
MessageBox("Could not Get Value");
return;
}

SysFreeString(strClassProp);

_bstr_t bstrPath = &v;  //it causes exception if the v is VT_NULL in other cases its working

char* strPath = new char [1024];
_stprintf(strPath, ("%s"),(char*)bstrPath);if (SUCCEEDED(hRes))
MessageBox(strPath);

Ожидается консультация специалиста и помощь ….
Заранее спасибо….

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]