Как получить имя объекта из метода GET класса IWbemClassObject в запросах wmi?

Мой код следующий. Я не могу получить разрешение на репозиторий.

int CWmiQueries::InitWmiQueries()
{
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. "<< "Error code = 0x"<< hex << hres << endl;
return 1;              // Program has failed.
}

// Initialize
hres =  CoInitializeSecurity(
NULL,
-1,      // COM negotiates service
NULL,    // Authentication services
NULL,    // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT,    // authentication
RPC_C_IMP_LEVEL_IMPERSONATE,  // Impersonation
NULL,             // Authentication info
EOAC_NONE,        // Additional capabilities
NULL              // Reserved
);if (FAILED(hres))
{
cout << "Failed to initialize security. "<< "Error code = 0x"<< hex << hres << endl;
CoUninitialize();
return 1;          // Program has failed.
}

// Obtain the initial locator to Windows Management
// on a particular host computer.
IWbemLocator *pLoc = 0;

hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLoc);

if (FAILED(hres))
{
cout << "Failed to create IWbemLocator object. "<< "Error code = 0x"<< hex << hres << endl;
CoUninitialize();
return 1;       // Program has failed.
}

IWbemServices *pSvc = 0;

// Connect to the root\cimv2 namespace with the
// current user and obtain pointer pSvc
// to make IWbemServices calls.

hres = pLoc->ConnectServer(

_bstr_t(L"root\\VisualSVN"), // WMI namespace
NULL,                    // User name
NULL,                    // User password
0,                       // Locale
NULL,                    // Security flags
0,                       // Authority
0,                       // Context object
&pSvc                    // IWbemServices proxy
);

if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x"<< hex << hres << endl;
pLoc->Release();
CoUninitialize();
return 1;                // Program has failed.
}

cout << "Connected to ROOT\\VisualSVN WMI namespace" << endl;

// Set the IWbemServices proxy so that impersonation
// of the user (client) occurs.
hres = CoSetProxyBlanket(

pSvc,                         // the proxy to set
RPC_C_AUTHN_WINNT,            // authentication service
RPC_C_AUTHZ_NONE,             // authorization service
NULL,                         // Server principal name
RPC_C_AUTHN_LEVEL_CALL,       // authentication level
RPC_C_IMP_LEVEL_IMPERSONATE,  // impersonation level
NULL,                         // client identity
EOAC_NONE                     // proxy capabilities
);

if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x"<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;               // Program has failed.
}// Use the IWbemServices pointer to make requests of WMI.
// Make requests here:

// For example, query for all the running processes
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM VisualSVN_SecurityDescriptor"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);

if (FAILED(hres))
{
cout << "Query for processes failed. "<< "Error code = 0x"<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1;               // Program has failed.
}
else
{
IWbemClassObject *pclsObj;
ULONG uReturn = 0;

while (pEnumerator)
{

hres = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);

if(0 == uReturn)
{
break;
}

VARIANT vtProp;
SAFEARRAY *psaNames = NULL;
CIMTYPE type;
LONG flavor;

hres = pclsObj->Get(L"Permissions", 0, &vtProp, &type, &flavor);

// Получить методы получения массива объекта в VARIANT vtProp. Но я не могу понять этот объект? Я пытался, но не смог найти имя объекта.

SAFEARRAY *pSafeArray = vtProp.parray;
UINT lDim = SafeArrayGetDim(pSafeArray);

long lLbound = 0;
long lUbound = 0;
SafeArrayGetLBound(pSafeArray, 1, &lLbound);
SafeArrayGetUBound(pSafeArray, 1, &lUbound);
long lDim3Size = lUbound - lLbound + 1;

for (long k = 0; k < lDim3Size; k++)
{
char* PropName1;
hres = SafeArrayGetElement(
pSafeArray,
&k,
&PropName1);

wcout << PropName1<< endl;
SysFreeString(PropName);
}

VariantClear(&vtProp);
}

}

// Cleanup
// ========

pSvc->Release();
pLoc->Release();
CoUninitialize();
getchar();
return 0;   // Program successfully completed.

}

Мой вопрос в жирном разделе. Любой способ получить имя объекта из варианта.

1

Решение

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

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

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

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