Функция NtClose (ntifs.h)
Подпрограмма NtClose закрывает дескриптор объекта.
Синтаксис
__kernel_entry NTSYSCALLAPI NTSTATUS NtClose(
[in] HANDLE Handle
);
Параметры
[in] Handle
Обработка объекта любого типа.
Возвращаемое значение
NtClose возвращает STATUS_SUCCESS при успешном выполнении или соответствующий код ошибки NTSTATUS, например следующий.
Возвращаемый код | Значение |
---|---|
STATUS_INVALID_HANDLE | Дескриптор не является допустимым дескриптором. |
STATUS_HANDLE_NOT_CLOSABLE | Вызывающий поток не имеет разрешения на закрытие дескриптора; То есть указанный дескриптор объекта защищается от закрытия любого экземпляра попыток NtClose. |
Пример, когда происходит последний код NTSTATUS, вызывается вызов ZwDuplicateObject с OBJ_PROTECT_CLOSE, переданной аргументу параметра атрибутов дескриптора. Ядро гарантирует, что дескриптор не может быть закрыт в этом случае.
Замечания
NtClose — это универсальная подпрограмма, которая работает с любым типом объекта.
Закрытие открытого дескриптора объекта приводит к тому, что дескриптор становится недопустимым. Система также уменьшает количество дескрипторов для объекта и проверяет, можно ли удалить объект. Система фактически не удаляет объект до тех пор, пока все дескрипторы объекта не закрываются, а ссылки на них не остаются.
Драйвер должен закрыть каждый дескриптор, который он открывает, как только дескриптор больше не требуется. Обработчики ядра, которые открываются системным потоком или задав флаг OBJ_KERNEL_HANDLE, можно закрыть только в том случае, если предыдущий режим процессора KernelMode. Это требование применяется как к системным потокам, так и к подпрограммам отправки для irPs, выданных из режима ядра. (Дополнительные сведения о предыдущем режиме процессора см. в разделе
Некеровый дескриптор может быть закрыт только в том случае, если выполняется одно из двух условий: предыдущий режим процессора kernelModeили вызывающий поток имеет достаточно разрешений для закрытия дескриптора. Пример последнего возникает, когда вызывающий поток является тем, который создал дескриптор.
Вызывающие NtClose не должны предполагать, что эта подпрограмма автоматически ожидает завершения всех операций ввода-вывода до возвращения.
Если вызов этой функции происходит в пользовательском режиме, следует использовать имя "NtClose" вместо "ZwClose".
Для вызовов драйверов в режиме ядра NtXxx и ZwXxx версии подпрограммы Windows Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 2000 |
целевая платформа | Всеобщий |
заголовка | ntifs.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
правил соответствия DDI |
HwStorPortProhibitedDIs, IrqlZwPassive, PowerIrpDDis, ZwRegistryCreate, ZwRegistryCreate(storport), ZwRegistryOpen, ZwRegistryOpen(storport) |