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 不再追蹤相關聯的驅動程式資源,而且EngCreateDriverObj的pFreeObjProc參數所指向的函式將不會在進程終止時呼叫。 驅動程式的責任是確保資源已釋放。
大部分的驅動程式在終止時間清除物件的方式應該一致。 因此,他們會針對bCallback傳遞TRUE,指出它應該呼叫驅動程式的清除函式以釋放此驅動程式資源。
bCallBack參數會向 GDI 指出是否需要呼叫回呼函式。 針對bCallBack傳遞TRUE會告知 GDI 呼叫驅動程式的清除函式,以釋放此驅動程式資源。 傳遞 FALSE 可防止 GDI 呼叫清除函式。 如果 pFreeObjProc 傳回 FALSE, EngDeleteDriverObj 會失敗,而且不會釋放控制碼。 例如,如果 pFreeObjProc 需要鎖定另一個 DRIVEROBJ 結構以釋放目前的 DRIVEROBJ 結構,而且因為另一個執行緒正在使用結構而失敗,就會發生這種情況。 pFreeObjProc不應該在清除時失敗,因為清除執行緒以外的任何執行緒正在執行,因此其他物件的鎖定不會失敗。
bLocked參數會向 GDI 指出驅動程式已鎖定物件一次。 通常,在刪除物件之前,驅動程式可能會先將其鎖定以使用。 這可讓驅動程式呼叫 GDI,而不需要先解除鎖定物件,因而消除另一個執行緒可以進入驅動程式並鎖定它的可能性,再釋放控制碼。
規格需求
最低支援的用戶端 | 可在 Windows 2000 和更新版本的 Windows 作業系統中使用。 |
目標平台 | Universal |
標頭 | winddi.h (包括 Winddi.h) |
程式庫 | Win32k.lib |
Dll | Win32k.sys |