Partager via


Fonction EngDeleteDriverObj (winddi.h)

La fonction EngDeleteDriverObj libère le handle utilisé pour le suivi d’une ressource gérée par l’appareil.

Syntaxe

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

Paramètres

hdo

Gérez l’objet pilote qui doit être supprimé. Ce handle GDI a été obtenu à partir de EngCreateDriverObj.

bCallBack

Spécifie si le rappel de nettoyage doit être appelé. Si la valeur est TRUE, GDI appelle le rappel de nettoyage avant de supprimer le DRIVEROBJ du gestionnaire de handle. Si la valeur est FALSE, GDI ne le fait pas. Si la fonction de rappel retourne un échec, EngDeleteDriverObj échoue.

bLocked

Spécifie si l’objet a été verrouillé par le pilote (via un appel à EngLockDriverObj) avant l’appel d’EngDeleteDriverObj . Si la valeur est TRUE, l’objet a été verrouillé ; si la valeur est FALSE, l’objet n’était pas verrouillé.

Valeur retournée

La valeur de retour est TRUE si la fonction réussit et si le handle est libéré ; il est FALSE si le handle n’a pas été libéré. Si la fonction de pilote pFreeObjProc spécifiée dans EngCreateDriverObj retourne FALSE, EngDeleteDriverObj échoue et la poignée n’est pas libérée. Cela peut se produire si le rappel de nettoyage doit verrouiller une autre structure DRIVEROBJ (afin de libérer la structure DRIVEROBJ actuelle) et échouer, car l’autre structure DRIVEROBJ est utilisée par un autre thread.

Remarques

Une fois le handle libéré, la ressource de pilote associée n’est plus suivie par GDI et la fonction pointée vers le paramètre pFreeObjProc de EngCreateDriverObj n’est pas appelée à l’arrêt du processus. Il incombe au pilote de s’assurer que la ressource est libérée.

La plupart des pilotes doivent être cohérents dans la façon dont les objets sont nettoyés au moment de l’arrêt. Par conséquent, ils passent TRUE pour bCallback, indiquant à GDI qu’il doit appeler la fonction de nettoyage du pilote pour libérer cette ressource de pilote.

Le paramètre bCallBack indique à GDI si la fonction de rappel doit être appelée. La transmission de TRUE pour bCallBack indique à GDI d’appeler la fonction de nettoyage du pilote pour libérer cette ressource de pilote. Le passage de FALSE empêche GDI d’appeler la fonction de nettoyage. Si pFreeObjProc retourne FALSE, EngDeleteDriverObj échoue et le handle n’est pas libéré. Par exemple, cela peut se produire si pFreeObjProc devait verrouiller une autre structure DRIVEROBJ pour libérer la structure DRIVEROBJ actuelle et échouer, car la structure était utilisée par un autre thread. Le pFreeObjProc ne doit jamais échouer au moment du nettoyage, car aucun thread autre que le thread de nettoyage n’est en cours d’exécution, de sorte que les verrous d’autres objets ne échouent pas.

Le paramètre bLocked indique à GDI que l’objet a déjà été verrouillé une fois par le pilote. Souvent, avant la suppression d’un objet, le pilote l’a peut-être verrouillé pour l’utiliser en premier. Cela permet au pilote d’appeler GDI sans avoir d’abord à déverrouiller l’objet, éliminant ainsi la possibilité qu’un autre thread puisse entrer dans le pilote et le verrouiller avant que la poignée ne soit libérée.

Configuration requise

   
Client minimal pris en charge Disponible dans Windows 2000 et versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Universal
En-tête winddi.h (inclure Winddi.h)
Bibliothèque Win32k.lib
DLL Win32k.sys

Voir aussi

DRIVEROBJ

EngCreateDriverObj