共用方式為


NtOpenFile 函式 (winternl.h)

開啟現有的檔案、裝置、目錄或磁碟區,並傳回檔案物件的句柄。

此函式相當於 Windows 驅動程式套件 (WDK) 中所述的 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執行。

請注意,許多常數定義以及 InitializeObjectAttributes 宏都需要 WDK 頭檔 Ntdef.h。 您也可以使用 LoadLibraryGetProcAddress 函式,動態連結至 Ntdll.dll。

規格需求

需求
目標平台 Windows
標頭 winternl.h
程式庫 ntdll.lib
Dll ntdll.dll