WMI调用方法

问题描述 投票:2回答:2

我正在尝试使用WMI更改英特尔网络适配器设置。访问类工作正常,但是根据Intel documentation第40页,我需要调用两个方法才能应用这些更改。

因此IANet_NetService类应具有BeginApply和Apply方法。当我使用PowerShell命令get-wmiobject -namespace root\intelncs2 -class IAnet_NetService | get-member对此进行检查时,我可以确认是否存在这些方法。

英特尔文档说,我应该在IANet_NetService中枚举单个实例。

因此,当我使用CreateInstanceEnum方法时,它将在枚举中给我一个结果,但是当我尝试枚举此实例的方法时,将找不到任何结果。

后来我尝试使用没有结果的CreateClassEnum

[最后,我尝试了一个简单的GetObject调用以获取IANet_NetService项目。通过此项,我还能够枚举方法并找到BeginApply和Apply方法。

也可以调用GetMethod来接收签名信息。对于BeginApply方法,它没有输入参数,根据英特尔文档,该参数是正确的。因此,我尝试使用返回pService->ExecMethod(L"IAnet_NetService", L"BeginApply", 0, 0, 0, &pOutInst, 0);WBEM_E_INVALID_METHOD_PARAMETERS执行此方法。 MSDN说,当输入参数错误或我在方法上缺少[静态]限定符时,可能会返回此值。

输入参数正确,但是在这种情况下,我不知道缺少的[静态]限定词是什么意思。

任何人都知道如何调用此方法吗?

c++ windows wmi
2个回答
2
投票

问题是,我需要使用GetObject/GetMethod组合来检索输入参数,然后获得该对象的唯一实例并询问其路径。此路径替换了L"IAnet_NetService"调用中的ExecMethod,并且正在运行。


0
投票

没有参数的WMI方法调用:

这是确切的代码参考:

    IEnumWbemClassObject * enum_obj;
    hres = pSvc>CreateInstanceEnum(_bstr_t(L"IANet_NetService"),WBEM_FLAG_RETURN_IMMEDIATELY , NULL ,&enum_obj);


   IWbemClassObject * spInstance;
   ULONG uNumOfInstances = 0;
   hres = enum_obj->Next(10000, 1,&spInstance,&uNumOfInstances);

   VARIANT path;
   hres = spInstance->Get(_bstr_t("__Path"), 0,&path, 0, 0);

   IWbemClassObject *results = NULL;
   hres = pSvc->ExecMethod( path.bstrVal, _bstr_t( L"Apply" ), 0,
   NULL,NULL,&results, NULL );

© www.soinside.com 2019 - 2024. All rights reserved.