IMFDXGIDeviceManager::LockDevice 方法 (mfobjects.h)

授予调用方对 Microsoft Direct3D 设备的独占访问权限。

语法

HRESULT LockDevice(
  [in]  HANDLE hDevice,
  [in]  REFIID riid,
  [out] void   **ppUnkDevice,
  [in]  BOOL   fBlock
);

参数

[in] hDevice

Direct3D 设备的句柄。 若要获取设备句柄,请调用 IMFDXGIDeviceManager::OpenDeviceHandle

[in] riid

所请求的接口的接口标识符 (IID)。 Direct3D 设备将支持以下接口:

[out] ppUnkDevice

接收指向所请求接口的指针。 调用方必须释放接口。

[in] fBlock

指定是否等待设备锁定。 如果设备已锁定且此参数为 TRUE,则 方法将阻止,直到设备解锁。 否则,如果设备已锁定且此参数为 FALSE,该方法将立即返回错误代码 DXVA2_E_VIDEO_DEVICE_LOCKED

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK
成功。
E_HANDLE
指定的句柄不是 Direct3D 设备句柄。
MF_E_DXGI_DEVICE_NOT_INITIALIZED
DXGI 设备管理器未初始化。 设备所有者必须调用 IMFDXGIDeviceManager::ResetDevice
MF_E_DXGI_NEW_VIDEO_DEVICE
设备句柄无效。
MF_E_DXGI_VIDEO_DEVICE_LOCKED
设备已锁定, fBlockFALSE

注解

使用完 Direct3D 设备后,调用 IMFDXGIDeviceManager::UnlockDevice 以解锁设备。

如果该方法返回 MF_E_DXGI_NEW_VIDEO_DEVICE,请调用 IMFDXGIDeviceManager::CloseDeviceHandle 以关闭句柄,然后再次调用 OpenDeviceHandle 以获取新句柄。 IMFDXGIDeviceManager::ResetDevice 方法使所有打开的设备句柄失效。

如果 fBlockTRUE,则此方法可能会造成死锁。 例如,如果一个线程调用 LockDevice ,然后在另一个调用 LockDevice 的线程上等待,它将死锁。 如果线程两次调用 LockDevice 而不在两者之间调用 UnlockDevice ,也会死锁。

要求

要求
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 mfobjects.h (包括 Mfidl.h)

另请参阅

IMFDXGIDeviceManager