调用本地RPC调用时,RPC_S_CANNOT_SUPPORT错误

问题描述

我正在尝试模拟wevtutil.exe的行为,该行为使用本地RPC调用与EventLog Service通信。 EventLog RPC Server是documented-我从那里拿走IDL file,然后在程序中使用它。

当我呼叫EvtRpcRegisterControllableOperation时,此调用失败,并显示RPC_S_CANNOT_SUPPORT(“不支持请求的操作”。)

我调试了程序和wevtutil.exe,并得出以下结论:

  1. 对这些函数的所有调用(RpcStringBindingCompose,RpcBindingFromStringBinding,RpcBindingSetAuthInfoEx,RpcBindingSetoption)都是相同的,并且可以正常工作。

  2. NdrClientCall3在第一个参数中接收指向MIDL_STUBLESS_PROXY_INFO结构的指针。然后,将方法编号用作偏移量,以从FormatStringOffset数组中提取条目(该数组中的值在我的程序和wevtutil.exe之间是不同的,但是由于它们仅用作偏移量,因此并不重要)。 然后将该值用作ProcFormatString数组的偏移量,该数组具有ndr information about each method。这是最关键的信息,在我的程序和wevtutil.exe之间是不同的。

ndr info from wevtutil

ndr info from myprogram

我还尝试使用RpcView工具转储EventLog RPC服务器IDL,但是数组值与从MSDN上的IDL编译的client.c相同。

有没有办法让Midl产生与wevtutil使用的相同的数据结构?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)