IoGetDeviceDirectory 함수(wdm.h)
드라이버가 파일을 저장할 수 있는 디스크의 디렉터리에 대한 핸들을 반환합니다. 해당 디렉터리의 파일은 특정 디바이스 인스턴스에 적용됩니다.
통사론
NTSTATUS IoGetDeviceDirectory(
[_In_] PDEVICE_OBJECT PhysicalDeviceObject,
[_In_] DEVICE_DIRECTORY_TYPE DirectoryType,
[_In_] ULONG Flags,
[_In_] PVOID Reserved,
[_Out_] PHANDLE DeviceDirectoryHandle
);
매개 변수
[_In_] PhysicalDeviceObject
특정 디바이스 인스턴스의 디바이스 스택에서 쿼리되는 물리적 디바이스 개체에 대한 포인터입니다. NULL이 아니어야 합니다.
[_In_] DirectoryType
요청된 디렉터리의 형식을 나타내는 _DEVICE_DIRECTORY_TYPE-type 값입니다.
[_In_] Flags
0이어야 합니다.
[_In_] Reserved
예약. NULL이어야 합니다.
[_Out_] DeviceDirectoryHandle
요청된 디바이스 디렉터리에 대한 HANDLE을 수신하는 변수에 대한 포인터입니다. 호출자가 NULL을 전달해서는 안됩니다.
반환 값
적절한 NTSTATUS 값반환합니다. 가능한 값은 다음과 같습니다.
오류 코드 | 묘사 |
---|---|
STATUS_SUCCESS | 호출이 요청된 디바이스 디렉터리에 대한 핸들을 성공적으로 열었습니다. |
STATUS_INVALID_PARAMETER | 이 함수에 대한 입력 값이 잘못되었습니다. 예를 들어 PhysicalDeviceObject 또는 deviceDirectoryHandle NULL입니다. 플래그 0이 아닙니다. 예약된 NULL이 아닙니다. |
발언
필요한 디스크 및 볼륨이 시작되기 전에 IoGetDeviceDirectory 호출되면 함수는 핸들을 열지 않고 오류를 반환합니다.
드라이버는 일반적으로 ZwOpenFile 및 ZwCreateFile 사용하여 파일에 액세스/만듭니다. 이러한 함수에 대한 매개 변수 중 하나는 개체 이름과 루트 디렉터리를 포함하는 OBJECT_ATTRIBUTES 구조체입니다. 루트 디렉터리가 NULL이면 개체 이름은 정규화된 경로여야 합니다. 그러나 루트 디렉터리에 대한 핸들을 제공하는 경우 개체 이름은 핸들이 나타내는 개체(파일의 경우 디렉터리)를 기준으로 해야 합니다.
IoGetDeviceDirectory 호출이 성공하면 수신된 HANDLE을 ZwOpenFile 전달하고 ZwCreateFileOBJECT_ATTRIBUTES 루트 디렉터리로 사용합니다.
드라이버는 ZwClose 호출하여 액세스가 더 이상 필요하지 않은 경우 수신된 핸들을 닫아야 합니다.
IoGetDeviceDirectory 호출자는 시스템 스레드의 컨텍스트에서 IRQL = PASSIVE_LEVEL 실행되어야 합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 버전 1803 |
헤더 | wdm.h |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |