wishful
驱动牛犊
驱动牛犊
  • 注册日期2008-04-30
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望38点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3111回复:2

请教关于WMI执行Win32_NetworkAdapter方法的问题

楼主#
更多 发布于:2009-12-28 17:31
要通过Win32_NetworkAdapter控制网卡。
已经通过WQL取得了具体网卡类实例Instance到 CComPtr<IWbemClassObject> m_InstancePtr;
执行方法好像只有这个函数 IWbemServices::ExecMethod:
HRESULT ExecMethod(
  [in] const BSTR strObjectPath,
  [in] const BSTR strMethodName,
  [in] long lFlags,
  [in] IWbemContext* pCtx,
  [in] IWbemClassObject* pInParams,
  [out, in, unique] IWbemClassObject** ppOutParams,
  [out, in, unique] IWbemCallResult** ppCallResult
);
这个函数没有传instance句柄的地方,是不是已经取得的实例m_InstancePtr用不上了?是不是只能通过这个函数的strObjectPath语句限定到实例?限定到具体instance的语法什么样的,例子只有到类的。

谢谢。


MikeJean
驱动牛犊
驱动牛犊
  • 注册日期2009-12-28
  • 最后登录2010-01-19
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-12-28 21:22
Win32_NetworkAdapter只有4个方法:Reset, SetPowerState, Enable, Disable。

关于WMI instance方法调用,参考MSDN:
http://msdn.microsoft.com/en-us/library/aa390421(VS.85).aspx
wishful
驱动牛犊
驱动牛犊
  • 注册日期2008-04-30
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望38点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-01-05 09:34
    // set up to call the Win32_Process::Create method
    BSTR MethodName = SysAllocString(L"Create");
    BSTR ClassName = SysAllocString(L"Win32_Process");

    IWbemClassObject* pClass = NULL;
    hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);  //这里取得的是CLASS, 通过打印对象可以证实。

    IWbemClassObject* pInParamsDefinition = NULL;
    hres = pClass->GetMethod(MethodName, 0,
        &pInParamsDefinition, NULL);

    IWbemClassObject* pClassInstance = NULL;
    hres = pInParamsDefinition->SpawnInstance(0, &pClassInstance);

    // Create the values for the in parameters
    VARIANT varCommand;
    varCommand.vt = VT_BSTR;
    varCommand.bstrVal = L"notepad.exe";

    // Store the value for the in parameters
    hres = pClassInstance->Put(L"CommandLine", 0,
        &varCommand, 0);
    wprintf(L"The command is: %s\n", V_BSTR(&varCommand));

    // Execute Method
    IWbemClassObject* pOutParams = NULL;

    hres = pSvc->ExecMethod(ClassName, MethodName, 0,
    NULL, pClassInstance, &pOutParams, NULL);      //这里的pClassInstance并不是我要执行的类的对象,而是输入参数实例。

找不到ClassName所对应的类实例在哪里。感觉Win32_Process象一个静态类。而Win32_NetworkAdapter会有很多对象。
游客

返回顶部