Функция ZwClose (wdm.h)

Подпрограмма ZwClose закрывает дескриптор объекта.

Синтаксис

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

Параметры

[in] Handle

Обработка объекта любого типа.

Возвращаемое значение

ZwClose возвращает STATUS_SUCCESS при успешном выполнении или соответствующий код ошибки NTSTATUS при сбое. В частности, он возвращает STATUS_INVALID_HANDLE, если дескриптор не является допустимым дескриптором или STATUS_HANDLE_NOT_CLOSABLE, если вызывающий поток не имеет разрешения на закрытие дескриптора.

Remarks

ZwClose — это универсальная подпрограмма, которая работает с любым типом объекта.

Закрытие открытого дескриптора объекта приводит к тому, что дескриптор станет недействительным. Система также уменьшает количество дескрипторов для объекта и проверяет, можно ли удалить объект. Система фактически не удаляет объект до тех пор, пока все дескрипторы объекта не будут закрыты, а ссылочные указатели не остаются.

Драйвер должен закрыть каждый дескриптор, который он открывает, как только дескриптор больше не требуется. Обработчики ядра, которые открываются системным потоком или путем указания флага OBJ_KERNEL_HANDLE, могут быть закрыты только в том случае, если предыдущий режим процессора — KernelMode. Это требование применяется как к системным потокам, так и к подпрограммам отправки для IRP, выданных из режима ядра. (Дополнительные сведения о предыдущем режиме процессора см. в разделе ExGetPreviousMode.) Например, дескриптор, возвращаемый ZwCreateKey в подпрограмму DriverEntry , впоследствии не может быть закрыт теми же подпрограммами диспетчеризации драйвера. Подпрограмма DriverEntry выполняется в системном процессе, тогда как подпрограммы диспетчеризации обычно выполняются в контексте потока, выдавающего текущий запрос ввода-вывода, или для драйверов нижнего уровня в произвольном контексте потока.

Некеровый дескриптор можно закрыть только в том случае, если выполняется одно из двух условий: предыдущий режим процессора — KernelMode или вызывающий поток имеет достаточно разрешений для закрытия дескриптора. Пример последнего происходит, когда вызывающий поток является тем, который создал дескриптор.

Вызывающие объект ZwClose не должны предполагать, что эта подпрограмма автоматически ожидает завершения всех операций ввода-вывода перед возвратом.

Примечание Если вызов этой функции происходит в пользовательском режиме, следует использовать имя NtClose вместо ZwClose.
Для вызовов драйверов в режиме ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному так, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограммы NtXxx и ZwXxx см. в разделе "Использование версий Nt и Zw" подпрограмм собственных системных служб.

Требования

   
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

См. также раздел

Использование версий nt и Zw подпрограмм собственных системных служб

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection