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) |