猿问

发送到正确的句柄时,SendMessageTimeout 有时会静默失败

我们正在从一个进程 (process01) 向另一个进程 (process02) 发送一条 Win32 消息。


Console.WriteLine(targetHandle); // 0x3072a


SendMessageTimeout(

    targetHandle, 

    WM_COPYDATA, 

    IntPtr.Zero, 

    ref cds, 

    SendMessageTimeoutFlags.SMTO_NORMAL, 

    timeoutMs, 

    out result);

我们已经确定 process01 正在发送到正确的句柄。有时消息到达 process02,有时它没有到达。


// SomeForm.cs

protected override void WndProc(ref Message m) {

    // Sometimes the message arrives here


    Console.WriteLine(m); // 0x3072a

}

当消息没有到达 process02 时,process01 中没有错误消息。它只是默默地失败了。


什么可能导致这种情况?我们如何进一步解决这个问题?我们已经使用 Spy++ 来搜索和监听发送到接收句柄的消息。Spy++ 总是通过它的句柄找到进程。当消息没有出现在 中时SomeForm.WndProc,它也不会出现在 Spy++ 消息中。


慕田峪4524236
浏览 561回答 1
1回答

慕的地8271018

问题是权限提升:发送会话没有提升,并且接收会话被提升(即以管理员身份运行)。
随时随地看视频慕课网APP
我要回答