zw1988116 2014-02-27 05:26 采纳率: 0%
浏览 1259

Windows Embeded 8 WMI C++ 问题 ,好像是没找Enable到该方法,会是什么原因呢

提问者悬赏:10分 | ZW1988116 | 分类:C/C++ | 浏览5次
IWbemLocator pLocator = NULL;
IWbemServices *pNamespace = 0;
//IWbemClassObject * pClass = NULL;
// IWbemClassObject * pOutInst = NULL;
// IWbemClassObject * pInClass = NULL;
IWbemCallResult * ppCallResult = NULL;
//IWbemClassObject * pInst = NULL;
BSTR path = SysAllocString(L"root\standardcimv2\embedded");
BSTR ClassPath = SysAllocString(L"UWF_Filter");
BSTR MethodName = SysAllocString(L"Enable");
HRESULT hr = CoInitialize(0);
hr = CoInitializeSecurity(NULL,
-1,
NULL,
NULL,
RPC_C_AUTHN_LEVEL_PKT,
RPC_C_IMP_LEVEL_IMPERSONATE,
NULL,
EOAC_NONE,
NULL);
hr=CoCreateInstance(CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,
(LPVOID
)&pLocator);
hr=pLocator->ConnectServer(path,
NULL,
NULL,
NULL,
0,
NULL,
NULL,
&pNamespace);

hr=pNamespace->ExecMethod(ClassPath,MethodName,0,NULL,NULL,NULL,&ppCallResult);
SysFreeString(path);
SysFreeString(ClassPath);
SysFreeString(MethodName);
pClass->Release();
//pInst->Release();
//pInClass->Release();
//ppCallResult->Release();
pNamespace->Release();
pLocator->Release();
CoUninitialize();

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-26 22:30
    关注

    该回答引用ChatGPT-3.5

    根据您提供的代码,我注意到您在连接到WMI命名空间之前使用了CoInitializeCoInitializeSecurity函数来初始化COM库和安全性。这是正确的做法。


    然而,您的代码中有几个问题可能导致您无法启用UWF_Filter类中的Enable方法。

    1. 请确保您的WMI命名空间路径正确。在代码中,您将路径设置为root\standardcimv2\embedded。但是,路径中的反斜杠字符需要进行转义,所以您应该将路径设置为"root\\standardcimv2\\embedded"

    2. 在连接到WMI服务器后,您应该检查ConnectServer函数的返回值hr,以确保连接成功。如果连接失败,可能是由于权限问题或者WMI服务未运行等原因。

    3. 在执行方法之前,您需要获取UWF_Filter类的指针。您可以使用pNamespace->GetObject方法来获取该类的实例。然后,您可以使用该实例来调用Enable方法。

    下面是更新后的代码示例:

    IWbemLocator* pLocator = NULL;
    IWbemServices* pNamespace = NULL;
    IWbemClassObject* pClass = NULL;
    IWbemClassObject* pInParams = NULL;
    IWbemClassObject* pOutParams = NULL;
    IWbemCallResult* pCallResult = NULL;
    BSTR path = SysAllocString(L"root\\standardcimv2\\embedded");
    BSTR className = SysAllocString(L"UWF_Filter");
    BSTR methodName = SysAllocString(L"Enable");
    HRESULT hr = CoInitialize(NULL);
    hr = CoInitializeSecurity(NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_PKT,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        EOAC_NONE,
        NULL);
    hr = CoCreateInstance(CLSID_WbemLocator,
        0,
        CLSCTX_INPROC_SERVER,
        IID_IWbemLocator,
        (LPVOID*)&pLocator);
    hr = pLocator->ConnectServer(path,
        NULL,
        NULL,
        NULL,
        0,
        NULL,
        NULL,
        &pNamespace);
    hr = pNamespace->GetObject(className, 0, NULL, &pClass, NULL);
    hr = pClass->GetMethod(methodName, 0, &pInParams, NULL);
    hr = pNamespace->ExecMethod(className, methodName, 0, NULL, pInParams, &pOutParams, &pCallResult);
    
    // 处理方法调用结果
    
    SysFreeString(path);
    SysFreeString(className);
    SysFreeString(methodName);
    pClass->Release();
    pInParams->Release();
    pOutParams->Release();
    pCallResult->Release();
    pNamespace->Release();
    pLocator->Release();
    CoUninitialize();
    

    请注意,我添加了获取UWF_Filter类的指针,并创建了输入参数对象pInParams和输出参数对象pOutParams。在实际处理方法调用结果时,您可能需要进一步编写代码来提取返回值或处理任何错误。

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题