ZwClose 함수(wdm.h)
ZwClose 루틴은 개체 핸들을 닫습니다.
구문
NTSYSAPI NTSTATUS ZwClose(
[in] HANDLE Handle
);
매개 변수
[in] Handle
모든 형식의 개체에 대한 핸들입니다.
반환 값
ZwClose는 성공 시 STATUS_SUCCESS 반환하거나 실패 시 적절한 NTSTATUS 오류 코드를 반환합니다. 특히 Handle 이 유효한 핸들이 아닌 경우 STATUS_INVALID_HANDLE 반환하거나 호출 스레드에 핸들을 닫을 권한이 없는 경우 STATUS_HANDLE_NOT_CLOSABLE.
설명
ZwClose 는 모든 형식의 개체에서 작동하는 제네릭 루틴입니다.
열린 개체 핸들을 닫으면 해당 핸들이 무효화됩니다. 또한 시스템은 개체의 핸들 수를 감소시키고 개체를 삭제할 수 있는지 여부를 확인합니다. 시스템은 개체의 모든 핸들이 닫혀 있고 참조된 포인터가 남아 있지 않을 때까지 개체를 실제로 삭제하지 않습니다.
드라이버는 핸들이 더 이상 필요하지 않은 즉시 열리는 모든 핸들을 닫아야 합니다. 시스템 스레드에서 열거나 OBJ_KERNEL_HANDLE 플래그를 지정하여 연 커널 핸들은 이전 프로세서 모드가 KernelMode인 경우에만 닫을 수 있습니다. 이 요구 사항은 시스템 스레드와 커널 모드에서 발급된 IRP에 대한 디스패치 루틴에 모두 적용됩니다. (이전 프로세서 모드에 대한 자세한 내용은 ExGetPreviousMode를 참조하세요.) 예를 들어 ZwCreateKey 가 DriverEntry 루틴으로 반환하는 핸들은 이후에 동일한 드라이버의 디스패치 루틴에 의해 닫을 수 없습니다. DriverEntry 루틴은 시스템 프로세스에서 실행되는 반면, 디스패치 루틴은 일반적으로 현재 I/O 요청을 실행하는 스레드의 컨텍스트에서 또는 하위 수준 드라이버의 경우 임의의 스레드 컨텍스트에서 실행됩니다.
커널이 아닌 핸들은 두 조건 중 하나가 충족되는 경우에만 닫을 수 있습니다. 이전 프로세서 모드는 KernelMode이거나 호출 스레드는 핸들을 닫을 수 있는 충분한 권한이 있습니다. 후자의 예는 호출 스레드가 핸들을 만든 스레드일 때 발생합니다.
ZwClose의 호출자는 이 루틴이 반환되기 전에 모든 I/O가 완료되기를 자동으로 대기한다고 가정해서는 안 됩니다.
이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwClose" 대신 "NtClose"라는 이름을 사용해야 합니다.
커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxx 및 ZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 NtXxx 버전과 ZwXxx 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(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) |