C++ RDP会话期间IDirectDrawSurface7上的锁定失败

C++ RDP会话期间IDirectDrawSurface7上的锁定失败,c++,windows-7,remote-desktop,rdp,directdraw,C++,Windows 7,Remote Desktop,Rdp,Directdraw,我正在维护一个旧的应用程序,其中包括在屏幕上显示微小的视频源。除非您在通过RDP查看桌面时运行应用程序,否则该应用程序工作正常 当我们通过的获取写入指针时: 除非您通过RDP连接到系统,否则一切正常。在这种情况下,锁失败,并且DDERR\u的HRESULT仍在绘制中 关于此错误只应在“默认条件”下,当使用标志DDLOCK\u DONOTWAIT时发生的状态的备注,我已经诊断性地注释掉了该标记 在不进行重大重新设计的情况下,让这个应用程序在RDP8/Windows7上运行有希望吗 打开应用程序、连

我正在维护一个旧的应用程序,其中包括在屏幕上显示微小的视频源。除非您在通过RDP查看桌面时运行应用程序,否则该应用程序工作正常

当我们通过的获取写入指针时:

除非您通过RDP连接到系统,否则一切正常。在这种情况下,锁失败,并且
DDERR\u的
HRESULT
仍在绘制中

关于此错误只应在“默认条件”下,当使用标志
DDLOCK\u DONOTWAIT
时发生的状态的备注,我已经诊断性地注释掉了该标记

在不进行重大重新设计的情况下,让这个应用程序在RDP8/Windows7上运行有希望吗


打开应用程序、连接新的RDP会话以及通过现有RDP会话启动应用程序都会导致这种行为。

因此,基本上您的DirectX应用程序在本机运行良好,但当您通过远程桌面远程使用它时,它会崩溃。我说得对吗?如果是这种情况,我可以尝试提供帮助,但我需要源代码来编译和调试二进制文件。我已经并可以使用IDA Pro来修复这些问题,这些问题通常是由封闭的源代码引起的。我不认为有人能在这些有限的信息上帮助你,因为这个问题看起来非常特定于平台。@sasho648它不会崩溃。我们检测到DDERR_WASSTILLDRAWING的HRESULT,在本例中,我们使用另一种机制绘制一个静态图像占位符,我们通常将视频提要放在其中,并通过对话框告诉用户,他们的RDP会话已导致视频提要停止。我开始跟踪该对话框,并确定在RDP会话期间未能获取锁是该对话框的根触发器。不,我只是找到了它的根。这是因为在我的原始帖子中描述的RDP会话上运行时,试图锁定DDSURFACEDESC2失败,我希望其他人也遇到了这个问题,并找到了解决方案/解决方法。祝你好运。但是,如果您可以发布源代码,或者如果您不能发布,则只有二进制文件我可以尝试使用IDA查找故障。您必须使用
DDLOCK\u wait
等待,因为位块传输(bitblt)操作正在进行中。
DDSURFACEDESC2 dsd;
ZeroMemory(&dsd, sizeof(dsd));
dsd.dwSize = sizeof(dsd);
hr = m_pSurface->Lock(NULL, &dsd, DDLOCK_NOSYSLOCK|DDLOCK_WRITEONLY/*|DDLOCK_DONOTWAIT*/, NULL);