다음을 통해 공유


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를 참조하세요.) 예를 들어 ZwCreateKeyDriverEntry 루틴으로 반환하는 핸들은 이후에 동일한 드라이버의 디스패치 루틴에 의해 닫을 수 없습니다. DriverEntry 루틴은 시스템 프로세스에서 실행되는 반면, 디스패치 루틴은 일반적으로 현재 I/O 요청을 실행하는 스레드의 컨텍스트에서 또는 하위 수준 드라이버의 경우 임의의 스레드 컨텍스트에서 실행됩니다.

커널이 아닌 핸들은 두 조건 중 하나가 충족되는 경우에만 닫을 수 있습니다. 이전 프로세서 모드는 KernelMode이거나 호출 스레드는 핸들을 닫을 수 있는 충분한 권한이 있습니다. 후자의 예는 호출 스레드가 핸들을 만든 스레드일 때 발생합니다.

ZwClose의 호출자는 이 루틴이 반환되기 전에 모든 I/O가 완료되기를 자동으로 대기한다고 가정해서는 안 됩니다.

이 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwClose" 대신 "NtClose"라는 이름을 사용해야 합니다.

커널 모드 드라이버에서 호출하는 경우 Windows 네이티브 시스템 서비스 루틴의 NtXxxZwXxx 버전은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. 루틴의 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)

추가 정보

네이티브 시스템 서비스 루틴의 Nt 및 Zw 버전 사용

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection