다음을 통해 공유


ZwOpenDirectoryObject 함수(ntifs.h)

ZwOpenDirectoryObject 루틴은 기존 디렉터리 개체를 엽니다.

통사론

NTSYSAPI NTSTATUS ZwOpenDirectoryObject(
  [out] PHANDLE            DirectoryHandle,
  [in]  ACCESS_MASK        DesiredAccess,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes
);

매개 변수

[out] DirectoryHandle

새로 연 디렉터리 개체에 대한 핸들입니다.

[in] DesiredAccess

이 디렉터리 개체에 대해 요청되는 액세스 유형을 지정하는 ACCESS_MASK 구조체입니다. 호출자는 다음 중 하나 또는 조합을 지정할 수 있습니다.

desiredAccess 플래그 의미
DIRECTORY_QUERY 디렉터리 개체에 대한 쿼리 액세스
DIRECTORY_TRAVERSE 디렉터리 개체에 대한 이름 조회 액세스
DIRECTORY_CREATE_OBJECT 디렉터리 개체에 대한 이름 만들기 액세스
DIRECTORY_CREATE_SUBDIRECTORY 디렉터리 개체에 대한 하위 디렉터리 만들기 액세스
DIRECTORY_ALL_ACCESS 위의 모든 권한과 STANDARD_RIGHTS_REQUIRED.
 

이러한 요청된 액세스 유형은 개체의 임의 액세스 제어 목록(DACL)과 비교하여 부여되거나 거부된 액세스 권한을 결정합니다.

[in] ObjectAttributes

호출자가 제공한 디렉터리 개체에 대해 지정된 특성입니다. 이 매개 변수는 InitializeObjectAttributes 매크로를 호출하여 초기화됩니다.

반환 값

ZwOpenDirectoryObject STATUS_SUCCESS 또는 적절한 오류 상태를 반환합니다. 가장 일반적인 오류 상태 코드는 다음과 같습니다.

반환 코드 묘사
STATUS_INSUFFICIENT_RESOURCES
이 루틴에 필요한 임시 버퍼를 할당할 수 없습니다.
STATUS_INVALID_PARAMETER
지정한 ObjectAttributes 매개 변수는 OBJECT_ATTRIBUTES 구조체에 대한 유효한 포인터가 아닌 NULL 포인터이거나 OBJECT_ATTRIBUTES 구조에 지정된 필드 중 일부가 잘못되었습니다.
STATUS_OBJECT_NAME_INVALID
ObjectAttributes 매개 변수에는 OBJECT_NAME_PATH_SEPARATOR 문자 뒤의 빈 문자열이 발견되었기 때문에 유효하지 않은 OBJECT_ATTRIBUTES 구조체의 ObjectName 필드가 포함되어 있습니다.
STATUS_OBJECT_NAME_NOT_FOUND
ObjectAttributes 매개 변수에는 찾을 수 없는 OBJECT_ATTRIBUTES 구조체의 ObjectName 필드가 포함되어 있습니다.
STATUS_OBJECT_PATH_NOT_FOUND
ObjectAttributes 매개 변수에는 개체 경로를 찾을 수 없는 OBJECT_ATTRIBUTES 구조체의 ObjectName 필드가 포함되어 있습니다.
STATUS_OBJECT_PATH_SYNTAX_BAD
ObjectAttributes 매개 변수에 RootDirectory 필드가 없지만 OBJECT_ATTRIBUTES 구조의 ObjectName 필드는 빈 문자열이거나 OBJECT_NAME_PATH_SEPARATOR 문자를 포함하지 않았습니다. 개체 경로에 대한 잘못된 구문을 나타냅니다.
 

ZwOpenDirectoryObject 루틴은 DirectoryHandle 매개 변수가 잘못된 포인터인 경우 예외를 throw합니다.

발언

ZwOpenDirectoryObject 기존 디렉터리 개체를 열고 개체에 대한 핸들을 반환합니다.

ZwOpenDirectoryObject 루틴은 InitializeObjectAttributes 매크로를 사용하여 열려는 개체에 대한 OBJECT_ATTRIBUTES 구조체의 특정 특성을 초기화한 후에 호출됩니다.

디렉터리 개체는 ZwCreateDirectoryObject 루틴사용하여 만들어집니다. ZwOpenDirectoryObject 호출하여 얻은 모든 핸들은 결국 ZwClose호출하여 해제되어야 합니다.

보안 및 액세스 제어에 대한 자세한 내용은 드라이버 개발자를 위한 Windows 보안 모델 및 Windows SDK의 이러한 항목에 대한 설명서를 참조하세요.

참고ZwCreateDirectoryObject 함수에 대한 호출이 사용자 모드에서 발생하는 경우 "ZwCreateDirectoryObject" 대신 "NtCreateDirectoryObject ""를 사용해야 합니다.
 
커널 모드 드라이버의 호출의 경우 NtXxxZwXxx 버전의 Windows Native System Services 루틴은 입력 매개 변수를 처리하고 해석하는 방식으로 다르게 동작할 수 있습니다. NtXxx ZwXxx 루틴 버전 간의 관계에 대한 자세한 내용은 네이티브 시스템 서비스 루틴Nt 및 Zw 버전 사용 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows XP
대상 플랫폼 보편적
헤더 ntifs.h(Ntdef.h, Ntifs.h, Fltkernel.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

참고 항목

ACCESS_MASK

ACL

InitializeObjectAttributes

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

ZwClose

ZwCreateDirectoryObject