다음을 통해 공유


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에서 ZwCreateFileCreateOptions 매개 변수를 참조하세요.

[out] IoStatusBlock

요청된 작업 및 최종 완료 상태 대한 정보가 포함된 구조체에 대한 포인터입니다.

[in] ShareAccess

파일에 대한 공유 액세스 유형입니다. 자세한 내용은 WDK의 ZwCreateFile 을 참조하세요.

[in] OpenOptions

파일을 열 때 적용할 옵션입니다. 자세한 내용은 WDK의 ZwCreateFile 을 참조하세요.

반환 값

NtOpenFile은STATUS_SUCCESS 반환하거나 적절한 오류 상태 반환합니다. 오류 상태 반환하는 경우 호출자는 IoStatusBlock을 확인하여 오류의 원인에 대한 추가 정보를 찾을 수 있습니다.

설명

시스템 프로세스 이외의 프로세스 컨텍스트에서 실행되는 드라이버 루틴은 ZwOpenFileObjectAttributes 매개 변수에 대한 OBJ_KERNEL_HANDLE 특성을 설정해야 합니다. 이렇게 하면 ZwOpenFile 에서 반환된 핸들의 사용이 커널 모드에서만 실행되는 프로세스로 제한됩니다. 그렇지 않으면 드라이버가 실행 중인 컨텍스트의 프로세스에서 핸들에 액세스할 수 있습니다. 드라이버는 InitializeObjectAttributes 를 호출하여 다음과 같이 OBJ_KERNEL_HANDLE 특성을 설정할 수 있습니다.

InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);

ZwCreateFile의 호출자는 IRQL = PASSIVE_LEVEL 실행 중이어야 합니다.

WDK 헤더 파일 Ntdef.h는 InitializeObjectAttributes 매크로뿐만 아니라 많은 상수 정의에도 필요합니다. LoadLibraryGetProcAddress 함수를 사용하여 Ntdll.dll 동적으로 연결할 수도 있습니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 winternl.h
라이브러리 ntdll.lib
DLL ntdll.dll