NtOpenFile 함수(winternl.h)
기존 파일, 디바이스, 디렉터리 또는 볼륨을 열고 파일 개체에 대한 핸들을 반환합니다.
이 함수는 WDK(Windows 드라이버 키트)에 설명된 ZwOpenFile 함수와 동일합니다.
구문
__kernel_entry NTSTATUS NtOpenFile(
[out] PHANDLE FileHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG ShareAccess,
[in] ULONG OpenOptions
);
매개 변수
[out] FileHandle
열린 파일의 핸들에 대한 포인터입니다. 핸들이 더 이상 사용되지 않는 경우 드라이버는 ZwClose 를 사용하여 핸들을 닫아야 합니다.
[in] DesiredAccess
호출자가 원하는 파일 액세스 형식을 나타내는 ACCESS_MASK 값입니다. 지정할 수 있는 액세스 유형에 대한 자세한 내용은 WDK의 ZwCreateFile 을 참조하세요.
[in] ObjectAttributes
호출자가 InitializeObjectAttributes를 사용하여 초기화하는 구조체에 대한 포인터입니다. 호출자가 시스템 프로세스 컨텍스트에서 실행되고 있지 않으면 ObjectAttributes에 대한 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다. 개체 특성을 지정하는 방법에 대한 자세한 내용은 WDK에서 ZwCreateFile의 CreateOptions 매개 변수를 참조하세요.
[out] IoStatusBlock
요청된 작업 및 최종 완료 상태 대한 정보가 포함된 구조체에 대한 포인터입니다.
[in] ShareAccess
파일에 대한 공유 액세스 유형입니다. 자세한 내용은 WDK의 ZwCreateFile 을 참조하세요.
[in] OpenOptions
파일을 열 때 적용할 옵션입니다. 자세한 내용은 WDK의 ZwCreateFile 을 참조하세요.
반환 값
NtOpenFile은STATUS_SUCCESS 반환하거나 적절한 오류 상태 반환합니다. 오류 상태 반환하는 경우 호출자는 IoStatusBlock을 확인하여 오류의 원인에 대한 추가 정보를 찾을 수 있습니다.
설명
시스템 프로세스 이외의 프로세스 컨텍스트에서 실행되는 드라이버 루틴은 ZwOpenFile의 ObjectAttributes 매개 변수에 대한 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다. 이렇게 하면 ZwOpenFile 에서 반환된 핸들의 사용이 커널 모드에서만 실행되는 프로세스로 제한됩니다. 그렇지 않으면 드라이버가 실행 중인 컨텍스트의 프로세스에서 핸들에 액세스할 수 있습니다. 드라이버는 InitializeObjectAttributes 를 호출하여 다음과 같이 OBJ_KERNEL_HANDLE 특성을 설정할 수 있습니다.
InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
ZwCreateFile의 호출자는 IRQL = PASSIVE_LEVEL 실행 중이어야 합니다.
WDK 헤더 파일 Ntdef.h는 InitializeObjectAttributes 매크로뿐만 아니라 많은 상수 정의에도 필요합니다. LoadLibrary 및 GetProcAddress 함수를 사용하여 Ntdll.dll 동적으로 연결할 수도 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | winternl.h |
라이브러리 | ntdll.lib |
DLL | ntdll.dll |