How to retrieve DELL Computer Service Tag by WMI programming

To accomplish my system administration task at work. I've wrote a WMI helper class to retrieve some system information (by modifying the MSDN sample code). The following code shows how to retrieve Service Tag from a Dell computer by using the simple WMI class.

Sample:
#include 
" wimhelper.h "

    myWMI wmiobj;
    BOOL bRet 
=  wmiobj.Initialize();
    CString strRet 
=   wmiobj.WMIQuery(L " SerialNumber " ,L " Win32_BIOS " );


///
// Filename wmihelper.h
#pragma  once

#include 
" wbemidl.h "
#include 
< comdef.h >

# pragma comment(lib, 
" wbemuuid.lib " )  

class  myWMI
{
private:
    IWbemLocator 
*m_pLoc;
    IWbemServices 
*m_pSvc;
public:
    CString m_strErrorMsg;
public:
    myWMI(
void);
    
~myWMI(void);
    BOOL Initialize(
void);
    CString WMIQuery(WCHAR
* wsztrPropName ,WCHAR* wszNameSpace);

}
;
///
// Filename wmihelper.cpp
#include  " StdAfx.h "
#include 
" .winadminapi.h "

myWMI::myWMI(
void )
{
    m_pLoc 
= NULL;
    m_pSvc 
= NULL;
}


myWMI::
~ myWMI( void )
{
    
if(m_pSvc)
        m_pSvc
->Release();
    
if(m_pLoc)
        m_pLoc
->Release();
    CoUninitialize();
}


BOOL myWMI::Initialize()
{

    HRESULT hres;
    
//Step1: initialize COM
    hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    
if(hres != S_OK )
    
{
        m_strErrorMsg.Format(
"Failed to initialize COM library. Error code: %d",hres);
        
return FALSE;
    }

    
// Step 2: --------------------------------------------------
    
// Set general COM security levels --------------------------
    
// Note: If you are using Windows 2000, you need to specify -
    
// the default authentication credentials for a user by using
    
// a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
    
// parameter of CoInitializeSecurity ------------------------
    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(hres != S_OK)
    
{
        m_strErrorMsg.Format(
"Failed to initialize security. Error code: %d",hres);
        
return FALSE;
    }


    
// Step 3: ---------------------------------------------------
    
// Obtain the initial locator to WMI -------------------------

    hres 
= CoCreateInstance(
        CLSID_WbemLocator,             
        
0
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID 
*&m_pLoc);
    
if(hres != S_OK)
    
{
        m_strErrorMsg.Format(
"Failed to create IWbemLocator object. Error code: %d",hres);
        
return FALSE;
    }


    
// Step 4: -----------------------------------------------------
    
// Connect to WMI through the IWbemLocator::ConnectServer method


    
// Connect to the rootcimv2 namespace with
    
// the current user and obtain pointer m_pSvc
    
// to make IWbemServices calls.
    hres = m_pLoc->ConnectServer(
        _bstr_t(L
"ROOT/CIMV2"), // 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 
        &m_pSvc                    // pointer to IWbemServices proxy
        );
    
if (hres != S_OK)
    
{
        m_strErrorMsg.Format(
"Could not connect. Error code = %d",hres);
        
return FALSE;                // Program has failed.
    }

    m_strErrorMsg.Format(
"Connected to ROOT/CIMV2 WMI namespace" );

    
return TRUE;   //Initialization successfully completed.

}


CString myWMI::WMIQuery(WCHAR
*  wszPropName ,WCHAR *  wszNameSpace)
{
    
// Step 6: --------------------------------------------------
    
// Use the IWbemServices pointer to make requests of WMI ----

    HRESULT hres;
    IEnumWbemClassObject
* pEnumerator = NULL;
    bstr_t bstrQuery(
"SELECT * FROM ");
    bstrQuery 
+= wszNameSpace;
    hres 
= m_pSvc->ExecQuery(
        bstr_t(
"WQL"), 
        bstrQuery,
        WBEM_FLAG_FORWARD_ONLY 
| WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        
&pEnumerator);

    
if (hres != S_OK)
    
{
        m_strErrorMsg.Format(
"Query for operating system name failed.Error code = %d",hres);
        
return FALSE;               // Program has failed.
    }

    
// Step 7: -------------------------------------------------
    
// Get the data from the query in step 6 -------------------

    IWbemClassObject 
*pclsObj;
    ULONG uReturn 
= 0;
    CString strResult;

    
while (pEnumerator)
    
{
        HRESULT hr 
= pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);

        
if(0 == uReturn)
        
{
            
break;
        }


        VARIANT vtProp;
        VariantInit(
&vtProp);

        
// Get the value of the Name property
        hr = pclsObj->Get(wszPropName, 0&vtProp, 00);  //bob.liu
        _bstr_t bstrValue = &vtProp;  
        strResult 
= (char*)bstrValue;
        VariantClear(
&vtProp);
    }


    
// Cleanup
    
// ========
    pEnumerator->Release();
    pclsObj
->Release();
    
//CoUninitialize();
    return strResult;
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值