Функция 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 не должны предполагать, что эта подпрограмма автоматически ожидает завершения всех операций ввода-вывода перед возвратом.
Требования
Минимальная версия клиента | Доступно начиная с 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 подпрограмм собственных системных служб
Обратная связь
Отправить и просмотреть отзыв по