列出C中WMI类的所有属性
发布时间:2020-12-16 09:47:42 所属栏目:百科 来源:网络整理
导读:Deos有没有人知道在C中找到给定WMI类中每个可用属性的完整列表?我在SO上发现了一些类似的问题,但它们都使用Power shell,VB或C#. 解决方法 您可以使用 GetObject 方法获取WMI类的实例,并使用 GetNames 方法检索属性名称. 试试这个样本. #include "stdafx.h"#
Deos有没有人知道在C中找到给定WMI类中每个可用属性的完整列表?我在SO上发现了一些类似的问题,但它们都使用Power
shell,VB或C#.
解决方法
您可以使用
GetObject 方法获取WMI类的实例,并使用
GetNames 方法检索属性名称.
试试这个样本. #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"\.rootCIMV2" : L"\remote--machinerootCIMV2"; // 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,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 rootCIMV2 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",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,&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,&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. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |