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。
返回值
此方法可以返回其中一个值。
返回代码 | 说明 |
---|---|
|
成功。 |
|
指定的句柄不是 Direct3D 设备句柄。 |
|
DXGI 设备管理器未初始化。 设备所有者必须调用 IMFDXGIDeviceManager::ResetDevice。 |
|
设备句柄无效。 |
|
设备已锁定, fBlock 为 FALSE。 |
注解
使用完 Direct3D 设备后,调用 IMFDXGIDeviceManager::UnlockDevice 以解锁设备。
如果该方法返回 MF_E_DXGI_NEW_VIDEO_DEVICE,请调用 IMFDXGIDeviceManager::CloseDeviceHandle 以关闭句柄,然后再次调用 OpenDeviceHandle 以获取新句柄。 IMFDXGIDeviceManager::ResetDevice 方法使所有打开的设备句柄失效。
如果 fBlock 为 TRUE,则此方法可能会造成死锁。 例如,如果一个线程调用 LockDevice ,然后在另一个调用 LockDevice 的线程上等待,它将死锁。 如果线程两次调用 LockDevice 而不在两者之间调用 UnlockDevice ,也会死锁。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2012 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | mfobjects.h (包括 Mfidl.h) |