从Windows驱动程序执行WMI方法的示例

从Windows驱动程序执行WMI方法的示例,windows,wmi,drivers,wdk,Windows,Wmi,Drivers,Wdk,我正在寻找一个如何从Windows驱动程序执行WMI方法的示例。 我需要从我的WMI类调用TestFunction MSDN说我必须打电话 IoWMIQueryAllData 及 IoWMIExecuteMethod 功能。IoWMIExecuteMethod函数有一个InstanceName参数,我不知道如何获取该参数 NTSTATUS IoWMIExecuteMethod( _In_ PVOID DataBlockObject, _In_ PUNICO

我正在寻找一个如何从Windows驱动程序执行WMI方法的示例。 我需要从我的WMI类调用TestFunction

MSDN说我必须打电话

IoWMIQueryAllData

IoWMIExecuteMethod

功能。IoWMIExecuteMethod函数有一个InstanceName参数,我不知道如何获取该参数

NTSTATUS IoWMIExecuteMethod(
  _In_    PVOID           DataBlockObject,
  _In_    PUNICODE_STRING InstanceName,
  _In_    ULONG           MethodId,
  _In_    ULONG           InBufferSize,
  _Inout_ PULONG          OutBufferSize,
  _Inout_ PUCHAR          InOutBuffer
);

找到了我自己问题的答案

    PVOID       wmiObject = NULL;
    ULONG       allocSize = 100;
    UCHAR       pBuffer[100] = ;

    //Open block
    rc = IoWMIOpenBlock(&guid, WMIGUID_EXECUTE, &wmiObject);

    //get instance name
    rc = IoWMIQueryAllData(wmiObject, &allocSize, pBuffer);


    WNODE_ALL_DATA *pWNode = (WNODE_ALL_DATA*)pBuffer;
    ULONG offset = *((PULONG)(pBuffer + pWNode->OffsetInstanceNameOffsets));
    PWCHAR str = (PWCHAR)(pBuffer + offset + 2);

    UNICODE_STRING uniInstanceName = { 0 };
    RtlInitUnicodeString(&uniInstanceName, str);

    UINT8 data[100];
    size = 100;

    //execute a method 
    rc = IoWMIExecuteMethod(wmiObject, &uniInstanceName, 1, 0, &size, data);

你想达到什么目标?您能否共享MSDN链接,以便我们提供更好的解决方案?添加了更多信息
    PVOID       wmiObject = NULL;
    ULONG       allocSize = 100;
    UCHAR       pBuffer[100] = ;

    //Open block
    rc = IoWMIOpenBlock(&guid, WMIGUID_EXECUTE, &wmiObject);

    //get instance name
    rc = IoWMIQueryAllData(wmiObject, &allocSize, pBuffer);


    WNODE_ALL_DATA *pWNode = (WNODE_ALL_DATA*)pBuffer;
    ULONG offset = *((PULONG)(pBuffer + pWNode->OffsetInstanceNameOffsets));
    PWCHAR str = (PWCHAR)(pBuffer + offset + 2);

    UNICODE_STRING uniInstanceName = { 0 };
    RtlInitUnicodeString(&uniInstanceName, str);

    UINT8 data[100];
    size = 100;

    //execute a method 
    rc = IoWMIExecuteMethod(wmiObject, &uniInstanceName, 1, 0, &size, data);