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 中 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執行。
請注意,許多常數定義以及 InitializeObjectAttributes 宏都需要 WDK 頭檔 Ntdef.h。 您也可以使用 LoadLibrary 和 GetProcAddress 函式,動態連結至 Ntdll.dll。
規格需求
需求 | 值 |
---|---|
目標平台 | Windows |
標頭 | winternl.h |
程式庫 | ntdll.lib |
Dll | ntdll.dll |