取得系统防病毒软件和防火墙的信息

 
  1. #define _WIN32_DCOM
  2. #include <iostream>
  3. using namespace std;
  4. #include <comdef.h>
  5. #include <Wbemidl.h>
  6. # pragma comment(lib, "wbemuuid.lib")
  7. IWbemLocator *pLoc = NULL;  
  8. IWbemServices *pSvc = NULL;
  9. IEnumWbemClassObject* pEnumerator = NULL;
  10. IWbemClassObject *pclsObj = NULL;
  11. //http://msdn.microsoft.com/en-us/library/aa390423(VS.85).aspx
  12. bool IniWMI()
  13.     HRESULT hres;
  14.     // Initialize COM. ------------------------------------------
  15.     hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
  16.     if (FAILED(hres))
  17.     {
  18.         cout << "Failed to initialize COM library. Error code = 0x" 
  19.             << hex << hres << endl;
  20.         return NULL; 
  21.     }
  22.     // Set general COM security levels --------------------------
  23.     hres =  CoInitializeSecurity(
  24.         NULL, 
  25.         -1,                          // COM authentication
  26.         NULL,                        // Authentication services
  27.         NULL,                        // Reserved
  28.         RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
  29.         RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation  
  30.         NULL,                        // Authentication info
  31.         EOAC_NONE,                   // Additional capabilities 
  32.         NULL                         // Reserved
  33.         );
  34.                       
  35.     if (FAILED(hres))
  36.     {
  37.         cout << "Failed to initialize security. Error code = 0x" 
  38.             << hex << hres << endl;
  39.         CoUninitialize();
  40.         return NULL; 
  41.     }
  42.     
  43.     // Obtain the initial locator to WMI -------------------------
  44.     //IWbemLocator *pLoc = NULL;
  45.     hres = CoCreateInstance(
  46.         CLSID_WbemLocator,             
  47.         0, 
  48.         CLSCTX_INPROC_SERVER, 
  49.         IID_IWbemLocator, (LPVOID *) &pLoc);
  50.     if (FAILED(hres))
  51.     {
  52.         cout << "Failed to create IWbemLocator object."
  53.             << " Err code = 0x"
  54.             << hex << hres << endl;
  55.         CoUninitialize();
  56.         return NULL; 
  57.     }
  58.     return true;
  59. }
  60. void ReleaseWMI()
  61. {
  62.     if( NULL!=pSvc)  pSvc->Release();
  63.     if( NULL!=pLoc)  pLoc->Release();
  64.     if( NULL!=pEnumerator)  pEnumerator->Release();
  65.     if( NULL!=pclsObj)  pclsObj->Release();
  66.     CoUninitialize();
  67. }
  68. //bool GetInfoFromWMI( std::string strPath, std::string strSQL )
  69. bool GetInfoFromWMI()
  70. {
  71.     HRESULT hres;
  72.     // Connect to WMI through the IWbemLocator::ConnectServer method
  73.     hres = pLoc->ConnectServer(
  74.          //_bstr_t(L"ROOT//CIMV2"), // Object path of WMI namespace
  75.          _bstr_t(L"root//SecurityCenter"), // Object path of WMI namespace
  76.          //_bstr_t( strPath.c_str() ), // Object path of WMI namespace
  77.          NULL,                    // User name. NULL = current user
  78.          NULL,                    // User password. NULL = current
  79.          0,                       // Locale. NULL indicates current
  80.          NULL,                    // Security flags.
  81.          0,                       // Authority (e.g. Kerberos)
  82.          0,                       // Context object 
  83.          &pSvc                    // pointer to IWbemServices proxy
  84.          );
  85.     
  86.     
  87.     if (FAILED(hres))
  88.     {
  89.         cout << "Could not connect. Error code = 0x" 
  90.              << hex << hres << endl;
  91.         pLoc->Release();     
  92.         CoUninitialize();
  93.         return false;   
  94.     }
  95.     cout << "Connected to ROOT//CIMV2 WMI namespace" << endl;
  96.     // Set security levels on the proxy -------------------------
  97.     hres = CoSetProxyBlanket(
  98.        pSvc,                        // Indicates the proxy to set
  99.        RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx
  100.        RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx
  101.        NULL,                        // Server principal name 
  102.        RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
  103.        RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
  104.        NULL,                        // client identity
  105.        EOAC_NONE                    // proxy capabilities 
  106.     );
  107.     if (FAILED(hres))
  108.     {
  109.         cout << "Could not set proxy blanket. Error code = 0x" 
  110.             << hex << hres << endl;
  111.         ReleaseWMI();
  112.         return false;
  113.     }
  114.     // Use the IWbemServices pointer to make requests of WMI ----
  115.     hres = pSvc->ExecQuery(
  116.         //bstr_t("WQL"), 
  117.         //bstr_t("SELECT * FROM Win32_OperatingSystem"),
  118.         _bstr_t(L"WQL"),
  119.         //_bstr_t(L"Select * From AntiVirusProduct"),
  120.         _bstr_t(L"Select * from FirewallProduct"),
  121.         //bstr_t( strSQL.c_str() ),
  122.         WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
  123.         NULL,
  124.         &pEnumerator);
  125.     
  126.     if (FAILED(hres))
  127.     {
  128.         cout << "Query for operating system name failed."
  129.             << " Error code = 0x" 
  130.             << hex << hres << endl;
  131.         ReleaseWMI();
  132.         return false;
  133.     }
  134.     return true;
  135. }
  136. int main(int argc, char **argv)
  137. {
  138.     if ( false == IniWMI() ) return 1;
  139.     //if ( false == GetInfoFromWMI( "root//SecurityCenter",
  140.     //                          "Select * from FirewallProduct" ) 
  141.     //  ) return 1;
  142.     if ( false == GetInfoFromWMI() ) return 1;
  143.     // Get the data from the query in step 6 -------------------
  144.     ULONG uReturn = 0;
  145.    
  146.     while (pEnumerator)
  147.     {
  148.         HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
  149.             &pclsObj, &uReturn);
  150.         if(0 == uReturn)
  151.         {
  152.             break;
  153.         }
  154.         VARIANT vtProp;
  155.         //{
  156.         //  // Get the value of the Name property
  157.         //  hr = pclsObj->Get(L"DisplayName", 0, &vtProp, 0, 0);
  158.         //  //wcout << " OS Name : " << vtProp.bstrVal << endl;
  159.         //  wcout << " Virus Name : " << vtProp.bstrVal << endl;
  160.         //  
  161.         //  hr = pclsObj->Get(L"VersionNumber", 0, &vtProp, 0, 0);
  162.         //  //wcout << " OS Name : " << vtProp.bstrVal << endl;
  163.         //  wcout << " Version Number : " << vtProp.bstrVal << endl;        
  164.         //  
  165.         //  hr = pclsObj->Get(L"CompanyName", 0, &vtProp, 0, 0);
  166.         //  //wcout << " OS Name : " << vtProp.bstrVal << endl;
  167.         //  wcout << " CompanyName : " << vtProp.bstrVal << endl;
  168.         //  
  169.         //  //hr = pclsObj->Get(L"ProductUptoDate", 0, &vtProp, 0, 0);
  170.         //  wcout << " OS Name : " << vtProp.bstrVal << endl;
  171.         //  //wcout << " ProductUptoDate : " << vtProp.bstrVal << endl;
  172.         //  
  173.         //  //hr = pclsObj->Get(L"pathToUpdateUI", 0, &vtProp, 0, 0);
  174.         //  wcout << " OS Name : " << vtProp.bstrVal << endl;
  175.         //  //wcout << " pathToUpdateUI : " << vtProp.bstrVal << endl;
  176.         //}
  177.         {
  178.             // Get the value of the Name property
  179.             hr = pclsObj->Get(L"displayName", 0, &vtProp, 0, 0);
  180.             //wcout << " OS Name : " << vtProp.bstrVal << endl;
  181.             wcout << " Virus Name : " << vtProp.bstrVal << endl;
  182.         }
  183.             
  184.         VariantClear(&vtProp);
  185.     }
  186.     // Cleanup
  187.     //pEnumerator->Release();
  188.     //pclsObj->Release();
  189.     //pSvc->Release();
  190.     //pLoc->Release();
  191.     //CoUninitialize();
  192.     ReleaseWMI();
  193.     return 0;   // Program successfully completed.
  194.     
  195. }

 

参考:

MSDN Sample

http://msdn.microsoft.com/en-us/library/aa390423(VS.85).aspx

http://msdn.microsoft.com/en-us/library/aa390423(VS.85).aspx

 

学习笔记 -- 使用WMI获得系统信息

http://blog.csdn.net/flood1984/archive/2007/12/03/1913904.aspx

WMI Administrative Tools

http://www.pczone.com.tw/vbb3/thread/28/139363/

C#

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/99013012-a227-4edc-9c64-832c4287718d/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值