如何将类传递给WMI函数? [英] How to pass a class to a WMI function?
问题描述
以下是示例代码.
我不知道如何将类传递给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);
我使用过,它总是会因``类型不匹配''而失败.
//相关的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);
};
推荐答案
你好,罗义中,
感谢您的帖子!我建议用以下其中一种方式发布您的问题
|