KsStreamIo 函式 (ks.h)
KsStreamIo 函式會針對指定的檔案物件執行數據流讀取或寫入。 如果可能,函式會嘗試使用 FastIoDispatch ,或針對裝置對象產生讀取或寫入要求。
語法
KSDDKAPI NTSTATUS KsStreamIo(
[in] PFILE_OBJECT FileObject,
[in, optional] PKEVENT Event,
[in, optional] PVOID PortContext,
[in, optional] PIO_COMPLETION_ROUTINE CompletionRoutine,
[in, optional] PVOID CompletionContext,
[in, optional] KSCOMPLETION_INVOCATION CompletionInvocationFlags,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in, out] PVOID StreamHeaders,
[in] ULONG Length,
[in] ULONG Flags,
[in] KPROCESSOR_MODE RequestorMode
);
參數
[in] FileObject
指定要對其執行 I/O 的檔案物件。
[in, optional] Event
選擇性地包含要在 I/O 中使用的事件。 如果沒有傳遞,則會假設呼叫位於同步檔案物件上,或呼叫端正在等候檔案物件的事件,否則可以異步完成。 如果使用,而且未設定KSSTREAM_SYNCHRONOUS旗標,這必須是物件管理員所配置的事件。 如果呼叫端正在執行異步 I/O,它必須等候檔案物件的事件,或在此參數中傳遞事件並等候它。 如果未這麼做,則呼叫端無法知道呼叫端何時已更新IoStatusBlock。
[in, optional] PortContext
選擇性地包含完成埠的內容資訊。
[in, optional] CompletionRoutine
選擇性地指向此 IRP 的完成例程。
[in, optional] CompletionContext
如果指定 CompletionRoutine ,這會在完成例程回呼中提供內容指標。
[in, optional] CompletionInvocationFlags
指定叫用完成例程時所指定的調用旗標。 如需所使用的值,請參閱下表。
[out] IoStatusBlock
傳回狀態資訊的位置。 不論要求者模式為何,這一律假設為有效的位址。 值必須維持有效狀態,直到呼叫更新狀態為止。 呼叫端必須執行同步 I/O,或必須等候檔案物件的事件或事件傳入 Event 參數,才能讓這個位址變成無效。
[in, out] StreamHeaders
指定數據流標頭的清單。 此位址以及數據緩衝區的位址會假設已探查以取得適當的存取權。 提交串流標頭的核心模式客戶端必須從 NonPagedPool 記憶體配置標頭。
[in] Length
指定傳遞的 StreamHeaders 大小。
[in] Flags
指定 I/O 的各種旗標。 如需所使用的值,請參閱下表。
[in] RequestorMode
指出需要產生處理器模式時,要放在 IRP 中。 此變數也會判斷是否可以執行快速 I/O 呼叫。 如果要求者模式不是核心模式,但上一個模式是 ,則無法使用快速 I/O。
傳回值
如果成功, KsStreamIo 函式會傳回STATUS_SUCCESS,如果動作擱置,則傳回STATUS_PENDING,否則會傳回 I/O 錯誤。
備註
下列列舉值會用於 CompletionInvocationFlags 變數,且類型為 KSCOMPLETION_INVOCATION:
CompletionInvocationFlags | Description |
---|---|
KsInvokeOnSuccess | 在成功時叫用完成例程。 |
KsInvokeOnError | 在錯誤時叫用完成例程。 |
KsInvokeOnCancel | 在取消時叫用完成例程。 |
下列已定義的值會用於 Flags 變數:
旗標 | Description |
---|---|
KSSTREAM_READ | 指定要建置IOCTL_KS_STREAMREAD IRP。 此為預設值。 |
KSSTREAM_WRITE | 指定要建置IOCTL_KS_STREAMWRITE IRP。 |
KSSTREAM_PAGED_DATA | 指定數據可分頁。 這是預設值,隨時都可以使用。 |
KSSTREAM_NONPAGED_DATA | 指定數據為非分頁,而且可作為效能增強功能。 |
KSSTREAM_SYNCHRONOUS | 指定 IRP 是同步的。 這表示,如果傳遞 Event 參數,就不會將它視為物件管理員事件,也不會被參考或取值。 |
KSSTREAM_READ相當於 KSPROBE_STREAMREAD。
同樣地,KSSTREAM_WRITE相當於KSPROBE_STREAMWRITE。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ks.h (包含 Ks.h) |
程式庫 | Ks.lib |