You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于UMD的DirectX 11纹理共享失败:OpenSharedResource返回E_INVALIDARG

从用户模式驱动(UMD)向常规用户态进程共享D3D11纹理失败问题

我基于Microsoft Indirect Display Driver Sample开发用户模式驱动(UMD),希望与实时用户态进程共享D3D11纹理。但客户端进程尝试打开共享资源时,OpenSharedResource调用失败并返回E_INVALIDARG。

我已尝试以下操作:

  • 确保UMD与客户端使用同一GPU适配器
  • 确认句柄有效且有值
  • 对比CreateSharedHandle+OpenSharedResource1与GetSharedHandle+OpenSharedResource的使用差异
  • 设置desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED | D3D11_RESOURCE_MISC_SHARED_NTHANDLE
  • 将句柄转换为UINT64以适配64位架构
  • 相同代码在两个常规进程间可正常运行

UMD端共享纹理代码

HANDLE hPipe = CreateNamedPipeW(
    L"\\\\.\\pipe\\MyD3DSharedHandlePipe",
    PIPE_ACCESS_OUTBOUND,    
    PIPE_TYPE_BYTE | PIPE_WAIT,
    PIPE_UNLIMITED_INSTANCES,
    512, 512, 0, nullptr
);

D3D11_TEXTURE2D_DESC desc = {};
//...
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED;

ComPtr<ID3D11Texture2D> _SharedTexture;
HRESULT hr = _Device->CreateTexture2D(&desc, nullptr, &_SharedTexture);

ComPtr<IDXGIResource> sharedResource;
_SharedTexture.As(&sharedResource);

HANDLE sharedHandle = nullptr;
hr = sharedResource->GetSharedHandle(&sharedHandle);
//Tried UINT64 as well.
BOOL written = WriteFile(hPipe, &sharedHandle, sizeof(sharedHandle), &bytesWritten, nullptr);

客户端代码

ComPtr<ID3D11Texture2D> sharedTex;
HRESULT hr = device->OpenSharedResource(
    sharedHandle,
    __uuidof(ID3D11Texture2D),
    reinterpret_cast<void**>(sharedTex.GetAddressOf())
);

请问是否可以从UMD向常规用户态进程共享D3D11纹理?

内容的提问来源于stack exchange,提问作者Yudi Kahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:33:13