NtOpenFile 函式 (ntifs.h)
NtOpenFile 例程會開啟現有的檔案、目錄、裝置或磁碟區。
語法
__kernel_entry NTSYSCALLAPI 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
接收檔案句柄的 HANDLE 變數指標。
[in] DesiredAccess
指定 ACCESS_MASK 值,這個值會決定對物件的要求存取權。 如需詳細資訊,請參閱 NtCreateFileDesiredAccess 參數。
[in] ObjectAttributes
指定物件名稱和其他屬性之 OBJECT_ATTRIBUTES 結構的指標。 使用 InitializeObjectAttributes 初始化這個結構。 如果呼叫端未在系統線程內容中執行,則呼叫 InitializeObjectAttributes時,它必須設定OBJ_KERNEL_HANDLE屬性。
[out] IoStatusBlock
IO_STATUS_BLOCK 結構的指標,該結構會接收最終完成狀態和所要求作業的相關信息。
[in] ShareAccess
指定檔案的共享存取類型。 如需詳細資訊,請參閱 NtCreateFileShareAccess 參數。
[in] OpenOptions
指定開啟檔案時要套用的選項。 如需詳細資訊,請參閱 NtCreateFileCreateOptions 參數。
傳回值
NtOpenFile 會傳回STATUS_SUCCESS或適當的 NTSTATUS 錯誤碼。 在後者的情況下,呼叫端可以檢查 IoStatusBlock 參數,以尋找失敗原因的詳細資訊。
言論
NtOpenFile 提供呼叫端可用來作檔案數據的句柄,或檔案物件的狀態和屬性。 NtOpenFile 提供 NtCreateFile所提供的功能子集。 如需詳細資訊,請參閱在驅動程式中使用檔案 。
當 FileHandle 指向的句柄不再使用之後,驅動程式必須呼叫 NtClose 關閉它。
如果呼叫端未在系統線程內容中執行,則必須確保所建立的任何句柄都是私人句柄。 否則,進程可以存取其內容中的驅動程序執行句柄。 如需詳細資訊,請參閱 物件句柄。
NtOpenFile 的呼叫端必須在 IRQL = PASSIVE_LEVEL 且 啟用特殊核心 APC。
如果呼叫此函式是在使用者模式中發生,您應該使用名稱 「NtOpenFile」 而不是 「ZwOpenFile」。。
對於內核模式驅動程式的呼叫,NtXxx 和 ZwXxx 版本的 Windows 原生系統服務例程,在處理和解譯輸入參數的方式上可能會有不同的行為。 如需 nt NtXxx 與 ZwXxx 例程之間關聯性的詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 |
目標平臺 | 普遍 |
標頭 | ntifs.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (請參閱一節) |
DDI 合規性規則 | HwStorPortProhibitedDDIs, PowerIrpDDis |