共用方式為


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