如何将类传递给WMI函数? [英] How to pass a class to a WMI function?

查看:77
本文介绍了如何将类传递给WMI函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是示例代码.
我不知道如何将类传递给WMI函数.
有什么方法可以完成WMI函数调用?

<字体大小= 2> IWbemLocator * pLocator = NULL;
IWbemServices * pNamespace = 0;
IWbemClassObject * pClass = NULL;
IWbemClassObject * pOutInstst = NULL;
IWbemClassObject * pInClass = NULL;
IWbemClassObject * pInInst = NULL;

BSTR路径= SysAllocString(L``ROOT \\ WMI''); ; BFn'');
BSTR MethodName = SysAllocString(L''DoBFn'');
BSTR ArgName = SysAllocString(L''Data'');
BSTR Text;
连接到WMI搜索结果HRESULT HR = CoInitialize的(0);结果,HR = CoInitializeSecurity(NULL,结果,-1,结果,NULL,NULL,点击,点击RPC_C_AUTHN_LEVEL_DEFAULT,结果RPC_C_IMP_LEVEL_IMPERSONATE,结果NULL,结果EOAC_NONE,点击NULL);
hr = CoCreateInstance(CLSID_WbemLocator,0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator,(LPVOID *)& pLocator); <=> NULL,0,NULL,NULL,& pNamespace);

/>//获取方法定义的类对象.

hr = pNamespace-> GetObject(ClassPath,0,
NULL,& pClass,NULL);

////获取输入参数类对象并
//创建实例.

hr = pClass-> GetMethod(MethodName) ,0,
& pInClass,NULL);

hr = pInClass-> SpawnInstance(0,& pInInst);

/>//设置属性.

VARIANT var;
<字体颜色=#ff0000"> hr = pInInst-> Put(ArgName,0,& var,0);

The following is the sample code.
I don't know how to pass a class to a WMI function.
Is there any way I can complete the WMI function call?

    IWbemLocator *pLocator = NULL;
    IWbemServices *pNamespace = 0;
    IWbemClassObject * pClass = NULL;
    IWbemClassObject * pOutInst = NULL;
    IWbemClassObject * pInClass = NULL;
    IWbemClassObject * pInInst = NULL;
 
    BSTR path = SysAllocString(L"ROOT\\WMI");
    BSTR ClassPath = SysAllocString(L"BFn");
    BSTR MethodName = SysAllocString(L"DoBFn");
    BSTR ArgName = SysAllocString(L"Data");
    BSTR Text;
 
    // Initialize COM and connect to WMI.
 
    HRESULT hr = CoInitialize(0);
    hr  =  CoInitializeSecurity(NULL,
                                -1,
                                NULL,
                                NULL,
                                RPC_C_AUTHN_LEVEL_DEFAULT,
                                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);
 
    // Get the class object for the method definition.
 
    hr = pNamespace->GetObject(ClassPath, 0,
           NULL, &pClass, NULL);
 
    // Get the input-argument class object and
    // create an instance.
 
    hr = pClass->GetMethod(MethodName, 0,
         &pInClass, NULL);
 
    hr = pInClass->SpawnInstance(0, &pInInst);
 
    // Set the property.
 
    VARIANT var;
 
   hr = pInInst->Put(ArgName, 0, &var, 0);

//我不知道如何通过VARIANT传递课程 .
我使用过,它总是会因``类型不匹配''而失败.
//相关的MOF文件位于以下 .

/>//调用该方法.

hr = pNamespace-> ExecMethod(ClassPath,
MethodName,0,NULL,
pInInst,& pOutInst,NULL);

========================
MOF:

[WMI,
Locale("XX \\ 0xXXX"),
Description(数据"),
guid("{xxxxxxxx-xxxx-xxxx-xxx x-xxxxxxxxxxxx}"))
]
BDat类{[WmiDataId(1),读取,写入,描述(数据")]] uint8字节[4096];
};

[WMI ,
动态,
Provider("WmiProv"),
Locale("XX \\ 0xXXX"),
Description("Interface"),
guid("{ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx }"}]
]
class BFn {
[key,read] string InstanceName;
[read]布尔有效;
[WmiMethodId(1),已实现,读取,写入,描述("Do BFn")
] void DoBFn([in,out,Description("Fn buf" ;)] BDat Data);
};

[WMI,
 Dynamic,
 Provider("WmiProv"),
 Locale("XX\\0xXXX"),
 Description("Interface"),
 guid("{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}")
]
class BFn {
    [key, read] string InstanceName;
    [read] boolean Active;
    [WmiMethodId(1), Implemented, read, write, Description("Do BFn")
    ] void DoBFn([in, out, Description("Fn buf")] BDat Data);
};

推荐答案

你好,罗义中,

感谢您的帖子!我建议用以下其中一种方式发布您的问题

<身体>
<身体>
<身体>
MSDN论坛»Windows Vista的软件开发»适用于Windows的应用程序兼容性Windows Vista» WMI不会返回所有CIM_Directory条目吗? 位于此处: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1360512&SiteID=1 .

Thank you for your post!  I would suggest posting your question in one of the 

 MSDN Forums » Software Development for Windows Vista » Application Compatibility for Windows Vista » WMI does not return all CIM_Directory entries ?
located here:  http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1360512&SiteID=1.


这篇关于如何将类传递给WMI函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆