EngDeleteDriverObj-Funktion (winddi.h)
Die EngDeleteDriverObj-Funktion gibt den Handle frei, der zum Nachverfolgen einer geräteverwalteten Ressource verwendet wird.
Syntax
ENGAPI BOOL EngDeleteDriverObj(
HDRVOBJ hdo,
BOOL bCallBack,
BOOL bLocked
);
Parameter
hdo
Handle mit dem Treiberobjekt, das gelöscht werden soll. Dieses GDI-Handle wurde von EngCreateDriverObj abgerufen.
bCallBack
Gibt an, ob der Bereinigungsrückruf aufgerufen werden soll. Wenn TRUE, ruft GDI den Bereinigungsrückruf auf, bevor der DRIVEROBJ aus dem Handle-Manager entfernt wird. Bei FALSE tut GDI dies nicht. Wenn die Rückruffunktion einen Fehler zurückgibt, schlägt EngDeleteDriverObj fehl.
bLocked
Gibt an, ob das Objekt vom Treiber gesperrt wurde (durch einen Aufruf von EngLockDriverObj), bevor EngDeleteDriverObj aufgerufen wurde. Wenn TRUE, wurde das Objekt gesperrt; wenn FALSE, wurde das Objekt nicht gesperrt.
Rückgabewert
Der Rückgabewert ist TRUE , wenn die Funktion erfolgreich ist und das Handle freigegeben wird. sie ist FALSE , wenn das Handle nicht freigegeben wurde. Wenn die in EngCreateDriverObj Angegebene pFreeObjProc-TreiberfunktionFALSE zurückgibt, schlägt EngDeleteDriverObj fehl, und das Handle wird nicht freigegeben. Dies kann passieren, wenn der Bereinigungsrückruf eine andere DRIVEROBJ-Struktur sperren muss (um die aktuelle DRIVEROBJ-Struktur freizusetzen) und ein Fehler auftritt, da die andere DRIVEROBJ-Struktur von einem anderen Thread verwendet wird.
Hinweise
Nachdem das Handle freigegeben wurde, wird die zugehörige Treiberressource nicht mehr von GDI nachverfolgt, und die Funktion, auf die der pFreeObjProc-Parameter von EngCreateDriverObj verweist, wird beim Beenden des Prozesses nicht aufgerufen. Es liegt in der Verantwortung des Treibers, sicherzustellen, dass die Ressource freigegeben wird.
Die meisten Treiber sollten konsistent sein, wie Objekte zum Zeitpunkt der Beendigung bereinigt werden. Folglich übergeben sie TRUE für bCallback, was GDI angibt, dass die Bereinigungsfunktion des Treibers aufgerufen werden soll, um diese Treiberressource freizusetzen.
Der bCallBack-Parameter gibt für GDI an, ob die Rückruffunktion aufgerufen werden muss. Die Übergabe von TRUE für bCallBack weist GDI an, die Bereinigungsfunktion des Treibers zurückzurufen, um diese Treiberressource freizusetzen. Das Übergeben von FALSE verhindert, dass GDI die Bereinigungsfunktion aufruft. Wenn pFreeObjProcFALSE zurückgibt, schlägt EngDeleteDriverObj fehl, und das Handle wird nicht freigegeben. Dies kann beispielsweise der Fall sein, wenn der pFreeObjProc eine andere DRIVEROBJ-Struktur sperren musste, um die aktuelle DRIVEROBJ-Struktur freizusetzen, und ein Fehler aufgetreten ist, weil die Struktur von einem anderen Thread verwendet wurde. Der pFreeObjProc sollte zum Bereinigungszeitpunkt nie fehlschlagen, da außer dem Bereinigungsthread keine Threads ausgeführt werden, sodass Sperren anderer Objekte nicht fehlschlagen.
Der bLocked-Parameter gibt GDI an, dass das Objekt bereits einmal vom Treiber gesperrt wurde. Bevor ein Objekt gelöscht wird, hat der Treiber es möglicherweise gesperrt, um es zuerst zu verwenden. Dadurch kann der Treiber GDI aufrufen, ohne das Objekt zuvor entsperren zu müssen, wodurch die Möglichkeit ausgeschlossen wird, dass ein anderer Thread in den Treiber eindringt und ihn sperren könnte, bevor der Handle freigegeben wird.
Anforderungen
Unterstützte Mindestversion (Client) | Verfügbar in Windows 2000 und höheren Versionen der Windows-Betriebssysteme. |
Zielplattform | Universell |
Header | winddi.h (einschließlich Winddi.h) |
Bibliothek | Win32k.lib |
DLL | Win32k.sys |