ntFsControlFile 函式 (ntifs.h)
NtFsControlFile 例程會將控件程式代碼直接傳送至指定的文件系統或文件系統篩選驅動程式,導致對應的驅動程式執行指定的動作。
語法
__kernel_entry NTSYSCALLAPI NTSTATUS NtFsControlFile(
[in] HANDLE FileHandle,
[in, optional] HANDLE Event,
[in, optional] PIO_APC_ROUTINE ApcRoutine,
[in, optional] PVOID ApcContext,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG FsControlCode,
[in, optional] PVOID InputBuffer,
[in] ULONG InputBufferLength,
[out, optional] PVOID OutputBuffer,
[in] ULONG OutputBufferLength
);
參數
[in] FileHandle
NtCreateFile 或 NtOpenFile 針對代表要執行指定動作之檔案或目錄之檔案物件的 NtCreateFile 或 NtOpenFile 所傳回的句柄。 如果呼叫端指定 ApcContext) 中的 Event、ApcRoutine 和 APC 內容 (,或 ApcContext) 中的完成內容 (,則檔案對象必須已針對異步 I/O 開啟。
[in, optional] Event
呼叫端所建立事件的句柄。 如果提供此參數,則呼叫端會進入等候狀態,直到要求的作業完成,並將指定的事件設定為 Signaled 狀態。 這個參數是選擇性的,而且可以是 NULL。 如果呼叫端將等候 FileHandle 設定為 Signaled 狀態,它必須是 NULL。
[in, optional] ApcRoutine
要求作業完成時要呼叫的呼叫端提供的 APC 例程位址。 這個參數是選擇性的,而且可以是 NULL。 如果有與檔案對象相關聯的 I/O 完成物件,它必須是 NULL。
[in, optional] ApcContext
呼叫端決定之內容區域的指標。 如果呼叫端提供 APC,這個參數值會當做 APC 內容使用,如果 I/O 完成對象已經與檔案對象相關聯,則會當做完成內容使用。 當作業完成時,如果已指定 APC 內容,則 APC 內容會傳遞至 APC,或者完成內容會包含在 I/O 管理員張貼到相關聯 I/O 完成物件的完成訊息中。
這個參數是選擇性的,而且可以是 NULL。 如果 ApcRoutine 是 NULL,而且沒有與檔案對象相關聯的 I/O 完成物件,它就必須是 NULL。
[out] IoStatusBlock
接收最終完成狀態和作業相關信息之IO_STATUS_BLOCK結構的指標。 對於傳回數據的成功呼叫,寫入 OutputBuffer 的位元元組數目會在此結構的 Information 成員中傳回。
[in] FsControlCode
FSCTL_XXX 程式代碼,指出要執行的檔系統控制作業。此參數的值會決定 InputBuffer 和 OutputBuffer 的格式和必要長度,以及下列哪一個參數位是必要的。 如需系統定義FSCTL_XXX 代碼的詳細資訊,請參閱 DeviceIoControl參考專案的一節。
[in, optional] InputBuffer
呼叫端配置的輸入緩衝區指標,其中包含要提供給目標驅動程式的裝置特定資訊。 如果 FsControlCode 指定不需要輸入資料的作業,此指標是選擇性的,而且可以是 NULL。
[in] InputBufferLength
InputBuffer 緩衝區的大小,以位元組為單位。 如果 InputBuffer 為 NULL,則會忽略此值。
[out, optional] OutputBuffer
呼叫端配置的輸出緩衝區指標,其中會從目標驅動程式傳回資訊。 如果 FsControlCode 指定不會產生輸出資料的作業,此指標是選擇性的,而且可以是 NULL。
[in] OutputBufferLength
OutputBuffer 緩衝區的大小,以位元組為單位。 如果 OutputBuffer 為 NULL,則會忽略此值。
傳回值
NtFsControlFile 會傳回STATUS_SUCCESS或適當的 NTSTATUS 值,例如下列其中一項:
備註
NtFsControlFile 提供一致的輸入和輸出數據檢視給系統和內核模式驅動程式,同時提供應用程式和基礎驅動程式與指定通訊介面的驅動程式相依方法。
如果呼叫端未FILE_SYNCHRONOUS_XXX create/open 選項集) 開啟異步 I/O (檔案,則指定的事件如果有任何,則會在裝置控制作業完成時設定為訊號狀態。 否則, FileHandle 指定的檔案 物件將會設定為已發出訊號的狀態。 如果指定 了 ApcRoutine ,則會使用 ApcContext 和 IoStatusBlock 指標呼叫它。
以下是針對內核模式驅動程式記載的一些 FSCTL 程式代碼:
- FSCTL_DELETE_REPARSE_POINT
- FSCTL_GET_REPARSE_POINT
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_SET_REPARSE_POINT
如需系統定義FSCTL_XXX 代碼的詳細資訊,請參閱 DeviceIoControl參考專案的一節。
如需系統定義IOCTL_XXX 代碼以及定義驅動程式特定IOCTL_XXX 或FSCTL_XXX 值的詳細資訊,請參閱 使用 I/O 控件代碼 和 裝置輸入和輸出控制碼。
迷你篩選應該使用 FltFsControlFile ,而不是 NtFsControlFile。
NtFsControlFile 的呼叫端必須在 IRQL = PASSIVE_LEVEL且啟用特殊核心 ACS** 執行。
如果使用者模式中發生 對 NtFsControlFile 函式的呼叫,您應該使用名稱 “NtFsControlFile” 而不是 “ZwFsControlFile”。
針對來自內核模式驅動程式的呼叫,Windows Native System Services 例程的 NtXXX 和 ZwXXX 版本會以處理和解譯輸入參數的方式,以不同的方式運作。 如需 例程 NtXXX 和 ZwXXX 版本之間關聯性的詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 |
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (请参阅一节) |
DDI 合規性規則 | HwStorPortProhibitedDDIs、PowerIrpDDis |