Deos quelqu'un connait un moyen, en C++, pour obtenir une liste complète de tous les biens disponibles dans une classe WMI donné? J'ai trouvé des questions similaires ici sur SO, mais ils utilisent tous Powershell, VB ou C#.Liste toutes les propriétés de classe WMI en C++
3
A
Répondre
5
Vous pouvez utiliser la méthode GetObject
pour obtenir une instance de la classe WMI et, en utilisant la méthode GetNames
, vous pouvez récupérer les noms de propriétés.
Essayez cet échantillon.
#include "stdafx.h"
#define _WIN32_DCOM
#include <iostream>
using namespace std;
#include <comdef.h>
#include <Wbemidl.h>
# pragma comment(lib, "wbemuuid.lib")
#pragma argsused
int main(int argc, char* argv[])
{
BSTR strNetworkResource;
//To use a WMI remote connection set localconn to false and configure the values of the pszName, pszPwd and the name of the remote machine in strNetworkResource
bool localconn = true;
strNetworkResource = localconn ? L"\\\\.\\root\\CIMV2" : L"\\\\remote--machine\\root\\CIMV2";
// Initialize COM. ------------------------------------------
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
// Set general COM security levels --------------------------
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres))
{
cout << "Failed to initialize security. Error code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
// Obtain the initial locator to WMI -------------------------
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);
if (FAILED(hres))
{
cout << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
// Connect to WMI through the IWbemLocator::ConnectServer method
IWbemServices *pSvc = NULL;
hres = pLoc->ConnectServer(
_bstr_t(strNetworkResource), // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
pLoc->Release();
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
cout << "Connected to root\\CIMV2 WMI namespace" << endl;
// Set security levels on the proxy -------------------------
hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
// Use the IWbemServices pointer to make requests of WMI ----
IWbemClassObject* pClass = NULL;
hres = pSvc->GetObject(L"Win32_Process", 0, NULL, &pClass, NULL);
if (FAILED(hres))
{
cout << "GetObject failed" << " Error code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
SAFEARRAY *psaNames = NULL;
hres = pClass->GetNames(
NULL,
WBEM_FLAG_ALWAYS | WBEM_FLAG_NONSYSTEM_ONLY,
NULL,
&psaNames);
if (FAILED(hres))
{
cout << "GetNames failed" << " Error code = 0x" << hex << hres << endl;
cout << _com_error(hres).ErrorMessage() << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 1; // Program has failed.
}
// Get the number of properties.
long lLower, lUpper;
BSTR PropName = NULL;
SafeArrayGetLBound(psaNames, 1, &lLower);
SafeArrayGetUBound(psaNames, 1, &lUpper);
for (long i = lLower; i <= lUpper; i++)
{
// Get this property.
hres = SafeArrayGetElement(
psaNames,
&i,
&PropName);
wcout << PropName<< endl;
SysFreeString(PropName);
}
SafeArrayDestroy(psaNames);
ULONG uReturn = 0;
pSvc->Release();
pLoc->Release();
CoUninitialize();
cout << "press enter to exit" << endl;
cin.get();
return 0; // Program successfully completed.
}
0
Vous utilisez IWbemClassObject::GetNames pour obtenir une liste des propriétés après avoir obtenu une instance de classe à partir d'une requête WMI ou énumération.
Questions connexes
- 1. C# WMI Propriétés de Win32_ScheduledJob
- 2. Groovy Liste toutes les propriétés de la classe
- 3. Javascript - liste de toutes les propriétés
- 4. Liste par programme les classes WMI et leurs propriétés
- 5. IIS + WMI: impossible d'obtenir toutes les informations WMI
- 6. C# créer la liste dans les propriétés de la classe
- 7. Comment parcourir toutes les propriétés d'une classe?
- 8. Récupère les propriétés de classe en C# (sans l'instancier)
- 9. Liste des propriétés Json en ordonnées C#
- 10. C# obtenir toutes les propriétés d'un objet
- 11. Énumérer Propriétés de classe en C#
- 12. C# PropertyGrid - Rendre toutes les propriétés non en gras
- 13. Comment itérer sur toutes les propriétés d'un objet en C#?
- 14. Sérialiser toutes les propriétés de la classe au format XML
- 15. Java JACOB récupère toutes les propriétés d'un objet de classe Win32_ *
- 16. Comment obtenir toutes les propriétés de classe par type?
- 17. Comment obtenir toutes les propriétés de .class en Java?
- 18. LINQ Somme toutes les propriétés
- 19. WMI - IIS 7 - Récupérer toutes les liaisons de site Web
- 20. Obtenir toutes les propriétés d'attribut
- 21. C# question sur les propriétés de la classe de base
- 22. Renvoie toutes les propriétés d'un objet dans Objective-C
- 23. WMI ManagementObjectSearcher Classe invalide
- 24. Toutes les propriétés sont égales à une liste d'objets
- 25. C# asp.net TreeView - toutes les propriétés de travail, sauf TEXT
- 26. C#/WPF: PropertyChanged pour toutes les propriétés dans ViewModel?
- 27. asp.net C# l'exception des propriétés de classe
- 28. Privilèges WMI C#
- 29. Inscrivez toutes les classes d'enfants déclarés d'une classe en C#
- 30. classe avec toutes les méthodes synchronisées en C++