共用方式為


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