共用方式為


EngDeleteDriverObj 函式 (winddi.h)

EngDeleteDriverObj函式會釋放用來追蹤裝置管理資源的控制碼。

語法

ENGAPI BOOL EngDeleteDriverObj(
  HDRVOBJ hdo,
  BOOL    bCallBack,
  BOOL    bLocked
);

參數

hdo

要刪除的驅動程式物件的控制碼。 此 GDI 控制碼是從 EngCreateDriverObj取得。

bCallBack

指定是否應該呼叫清除回呼。 如果 為 TRUE,GDI 會先叫用清除回呼,再從控制碼管理員移除 DRIVEROBJ 。 如果 為 FALSE,則 GDI 不會這麼做。 如果回呼函式傳回失敗, EngDeleteDriverObj 將會失敗。

bLocked

指定在呼叫EngDeleteDriverObj之前,驅動程式是否 (呼叫EngLockDriverObj) 鎖定物件。 如果 為 TRUE,表示物件已鎖定;如果 為 FALSE,則表示物件未鎖定。

傳回值

如果函式成功且控制碼釋放,則傳回值為 TRUE ;如果控制碼尚未釋放,則為 FALSE 。 如果EngCreateDriverObj中指定的pFreeObjProc驅動程式函式傳回FALSE則 EngDeleteDriverObj將會失敗,而且不會釋放控制碼。 如果清除回呼需要鎖定另一個 DRIVEROBJ 結構 (,才能釋放目前的 DRIVEROBJ 結構 ) 並失敗,因為另一個執行緒正在使用其他 DRIVEROBJ 結構。

備註

釋放控制碼之後,GDI 不再追蹤相關聯的驅動程式資源,而且EngCreateDriverObjpFreeObjProc參數所指向的函式將不會在進程終止時呼叫。 驅動程式的責任是確保資源已釋放。

大部分的驅動程式在終止時間清除物件的方式應該一致。 因此,他們會針對bCallback傳遞TRUE,指出它應該呼叫驅動程式的清除函式以釋放此驅動程式資源。

bCallBack參數會向 GDI 指出是否需要呼叫回呼函式。 針對bCallBack傳遞TRUE會告知 GDI 呼叫驅動程式的清除函式,以釋放此驅動程式資源。 傳遞 FALSE 可防止 GDI 呼叫清除函式。 如果 pFreeObjProc 傳回 FALSEEngDeleteDriverObj 會失敗,而且不會釋放控制碼。 例如,如果 pFreeObjProc 需要鎖定另一個 DRIVEROBJ 結構以釋放目前的 DRIVEROBJ 結構,而且因為另一個執行緒正在使用結構而失敗,就會發生這種情況。 pFreeObjProc不應該在清除時失敗,因為清除執行緒以外的任何執行緒正在執行,因此其他物件的鎖定不會失敗。

bLocked參數會向 GDI 指出驅動程式已鎖定物件一次。 通常,在刪除物件之前,驅動程式可能會先將其鎖定以使用。 這可讓驅動程式呼叫 GDI,而不需要先解除鎖定物件,因而消除另一個執行緒可以進入驅動程式並鎖定它的可能性,再釋放控制碼。

規格需求

   
最低支援的用戶端 可在 Windows 2000 和更新版本的 Windows 作業系統中使用。
目標平台 Universal
標頭 winddi.h (包括 Winddi.h)
程式庫 Win32k.lib
Dll Win32k.sys

另請參閱

DRIVEROBJ

EngCreateDriverObj