Freigeben über


ZwClose-Funktion (wdm.h)

Die ZwClose-Routine schließt ein Objekthandle.

Syntax

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

Parameter

[in] Handle

Behandeln Sie ein Objekt eines beliebigen Typs.

Rückgabewert

ZwClose gibt bei Erfolg STATUS_SUCCESS oder den entsprechenden NTSTATUS-Fehlercode bei Einem Fehler zurück. Insbesondere wird STATUS_INVALID_HANDLE zurückgegeben, wenn Handle kein gültiges Handle ist, oder STATUS_HANDLE_NOT_CLOSABLE, wenn der aufrufende Thread nicht über die Berechtigung zum Schließen des Handle verfügt.

Hinweise

ZwClose ist eine generische Routine, die für jeden Objekttyp verwendet wird.

Das Schließen eines geöffneten Objekthandles führt dazu, dass dieses Handle ungültig wird. Das System erhöht auch die Handleanzahl für das Objekt und prüft, ob das Objekt gelöscht werden kann. Das System löscht das Objekt erst dann, wenn alle Handles des Objekts geschlossen sind und keine Verweise mehr vorhanden sind.

Ein Treiber muss jeden Griff schließen, den er öffnet, sobald der Handle nicht mehr benötigt wird. Kernelhandles, die von einem Systemthread oder durch Angabe des flags OBJ_KERNEL_HANDLE geöffnet werden, können nur geschlossen werden, wenn der vorherige Prozessormodus KernelMode ist. Diese Anforderung gilt sowohl für Systemthreads als auch für das Senden von Routinen für IRPs, die im Kernelmodus ausgegeben wurden. (Weitere Informationen zum vorherigen Prozessormodus finden Sie unter ExGetPreviousMode.) Beispielsweise kann ein Handle, das ZwCreateKey zu einer DriverEntry-Routine zurückgibt, später nicht durch die Dispatchroutinen desselben Treibers geschlossen werden. Eine DriverEntry-Routine wird in einem Systemprozess ausgeführt, während Dispatchroutinen in der Regel entweder im Kontext des Threads ausgeführt werden, der die aktuelle E/A-Anforderung ausgibt, oder bei Treibern niedrigerer Ebene in einem beliebigen Threadkontext.

Ein Nicht-Kernelhandle kann nur geschlossen werden, wenn eine von zwei Bedingungen erfüllt ist: Der vorherige Prozessormodus ist KernelMode, oder der aufrufende Thread verfügt über ausreichende Berechtigungen zum Schließen des Handles. Ein Beispiel für letzteres tritt auf, wenn der aufrufende Thread der ist, der das Handle erstellt hat.

Anrufer von ZwClose sollten nicht davon ausgehen, dass diese Routine automatisch wartet, bis alle E/A-Vorgänge abgeschlossen sind, bevor sie zurückgegeben werden.

Wenn der Aufruf dieser Funktion im Benutzermodus erfolgt, sollten Sie den Namen "NtClose" anstelle von "ZwClose" verwenden.

Bei Aufrufen von Kernelmodustreibern können sich die NtXxx - und ZwXxx-Versionen einer Windows Native System Services-Routine anders verhalten, da sie Eingabeparameter verarbeiten und interpretieren. Weitere Informationen zur Beziehung zwischen den Nt Xxx- und ZwXxx-Versionen einer Routine finden Sie unter Verwenden von Nt- und Zw-Versionen der Systemdienstroutinen.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Weitere Informationen

Verwenden von Nt- und Zw-Versionen der Systemdienstroutinen

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection