IoGetDeviceDirectory 함수(wdm.h)

드라이버가 파일을 저장할 수 있는 디스크의 디렉터리에 대한 핸들을 반환합니다. 해당 디렉터리의 파일은 특정 디바이스 instance 적용됩니다.

구문

NTSTATUS IoGetDeviceDirectory(
  [_In_]  PDEVICE_OBJECT        PhysicalDeviceObject,
  [_In_]  DEVICE_DIRECTORY_TYPE DirectoryType,
  [_In_]  ULONG                 Flags,
  [_In_]  PVOID                 Reserved,
  [_Out_] PHANDLE               DeviceDirectoryHandle
);

매개 변수

[_In_] PhysicalDeviceObject

특정 디바이스 instance 디바이스 스택에서 쿼리되는 물리적 디바이스 개체에 대한 포인터입니다. NULL이 아니어야 합니다.

[_In_] DirectoryType

요청된 디렉터리의 형식을 나타내는 _DEVICE_DIRECTORY_TYPE 형식 값입니다.

[_In_] Flags

0이어야 합니다.

[_In_] Reserved

예약되어 있습니다. Null이어야 합니다.

[_Out_] DeviceDirectoryHandle

요청된 디바이스 디렉터리에 대한 HANDLE을 수신하는 변수에 대한 포인터입니다. 호출자가 NULL을 전달해서는 안됩니다.

반환 값

적절한 NTSTATUS 값을 반환합니다. 가능한 값은 다음과 같습니다.

오류 코드 Description
STATUS_SUCCESS 호출이 요청된 디바이스 디렉터리에 대한 핸들을 성공적으로 열었습니다.
STATUS_INVALID_PARAMETER 이 함수에 대한 입력 값이 잘못되었습니다. 예를 들어 PhysicalDeviceObject 또는 DeviceDirectoryHandle 은 NULL입니다. 플래그 는 0이 아닙니다. 예약 이 NULL이 아닙니다.

설명

필요한 디스크 및 볼륨이 시작되기 전에 IoGetDeviceDirectory 가 호출되면 함수는 핸들을 열지 않고 오류를 반환합니다.

드라이버는 일반적으로 ZwOpenFileZwCreateFile 을 사용하여 파일에 액세스/만듭니다. 이러한 함수에 대한 매개 변수 중 하나는 개체 이름과 루트 디렉터리를 포함하는 OBJECT_ATTRIBUTES 구조체입니다. 루트 디렉터리가 NULL이면 개체 이름은 정규화된 경로여야 합니다. 그러나 루트 디렉터리에 대한 핸들을 제공하는 경우 개체 이름은 핸들이 나타내는 개체(파일의 경우 디렉터리)를 기준으로 해야 합니다.

IoGetDeviceDirectory 호출이 성공하면 받은 HANDLE을 ZwOpenFileZwCreateFile에 전달하는 OBJECT_ATTRIBUTES 루트 디렉터리로 사용합니다.

드라이버는 액세스가 더 이상 필요하지 않을 때 받은 핸들을 닫기 위해 ZwClose 를 호출해야 합니다.

IoGetDeviceDirectory의 호출자는 IRQL = PASSIVE_LEVEL 시스템 스레드의 컨텍스트에서 실행되어야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 1803
머리글 wdm.h
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

추가 정보

ZwOpenFile

ZwCreateFile

ZwClose

_DEVICE_DIRECTORY_TYPE

OBJECT_ATTRIBUTES

InitializeObjectAttributes