Condividi tramite


Funzione EngDeleteDriverObj (winddi.h)

La funzione EngDeleteDriverObj libera l'handle usato per tenere traccia di una risorsa gestita dal dispositivo.

Sintassi

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

Parametri

hdo

Handle per l'oggetto driver da eliminare. Questo handle GDI è stato ottenuto da EngCreateDriverObj.

bCallBack

Specifica se deve essere chiamato il callback di pulizia. Se TRUE, GDI richiama il callback di pulizia prima di rimuovere DRIVEROBJ dal gestore di handle. Se FALSE, GDI non esegue questa operazione. Se la funzione di callback restituisce un errore, EngDeleteDriverObj avrà esito negativo.

bLocked

Specifica se l'oggetto è stato bloccato dal driver (tramite una chiamata a EngLockDriverObj) prima della chiamata a EngDeleteDriverObj . Se TRUE, l'oggetto è stato bloccato; se FALSE, l'oggetto non è stato bloccato.

Valore restituito

Il valore restituito è TRUE se la funzione ha esito positivo e l'handle viene liberato; è FALSE se l'handle non è stato liberato. Se la funzione driver pFreeObjProc specificata in EngCreateDriverObj restituisce FALSE, EngDeleteDriverObj avrà esito negativo e l'handle non verrà liberato. Ciò può verificarsi se il callback di pulizia deve bloccare un'altra struttura DRIVEROBJ (per liberare la struttura DRIVEROBJ corrente) e ha esito negativo perché l'altra struttura DRIVEROBJ è in uso da un altro thread.

Commenti

Dopo aver liberato l'handle, la risorsa driver associata non viene più rilevata da GDI e la funzione a cui punta il parametro pFreeObjProc di EngCreateDriverObj non verrà più chiamata al termine del processo. È responsabilità del driver assicurarsi che la risorsa venga liberata.

La maggior parte dei driver deve essere coerente nel modo in cui gli oggetti vengono puliti al momento della terminazione. Di conseguenza, passeranno TRUE per bCallback, a indicare a GDI che deve chiamare la funzione di pulizia del driver per liberare questa risorsa driver.

Il parametro bCallBack indica a GDI se è necessario chiamare la funzione di callback. Il passaggio di TRUE per bCallBack indica a GDI di chiamare nuovamente la funzione di pulizia del driver per liberare questa risorsa driver. Il passaggio di FALSE impedisce a GDI di chiamare la funzione di pulizia. Se pFreeObjProc restituisce FALSE, EngDeleteDriverObj ha esito negativo e l'handle non verrà liberato. Ad esempio, ciò può verificarsi se pFreeObjProc doveva bloccare un'altra struttura DRIVEROBJ per liberare la struttura DRIVEROBJ corrente e non è riuscita perché la struttura era utilizzata da un altro thread. PFreeObjProc non dovrebbe mai avere esito negativo in fase di pulizia, perché nessun thread, diverso dal thread di pulizia, è in esecuzione, quindi i blocchi di altri oggetti non riusciranno.

Il parametro bLocked indica a GDI che l'oggetto è già stato bloccato una volta dal driver. Spesso, prima dell'eliminazione di un oggetto, il driver potrebbe aver bloccato per primo l'uso. In questo modo il driver può chiamare GDI senza prima dover sbloccare l'oggetto, eliminando così la possibilità che un altro thread possa entrare nel driver e bloccarlo prima che l'handle venga liberato.

Requisiti

   
Client minimo supportato Disponibile in Windows 2000 e versioni successive dei sistemi operativi Windows.
Piattaforma di destinazione Universale
Intestazione winddi.h (include Winddi.h)
Libreria Win32k.lib
DLL Win32k.sys

Vedi anche

DRIVEROBJ

EngCreateDriverObj