KsStreamIo function (ks.h)

The KsStreamIo function performs a stream read or write against the specified file object. The function attempts to use FastIoDispatch if possible, or it generates a read or write request against the device object.

Syntax

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
);

Parameters

[in] FileObject

Specifies the file object to perform the I/O against.

[in, optional] Event

Optionally contains the event to use in the I/O. If none is passed, the call is assumed to be on a synchronous file object or the caller is waiting for the file object's event, or else it can be asynchronously completed. If used, and the KSSTREAM_SYNCHRONOUS flag is not set, this must be an event allocated by the object manager. If the caller is performing asynchronous I/O, it must either wait for the file object's event or pass an event in this parameter and wait for it. If this is not done, then there is no way for the caller to know when the IoStatusBlock has been updated by the call.

[in, optional] PortContext

Optionally contains context information for a completion port.

[in, optional] CompletionRoutine

Optionally points to a completion routine for this IRP.

[in, optional] CompletionContext

If CompletionRoutine is specified, this provides a context pointer in the completion routine callback.

[in, optional] CompletionInvocationFlags

Specifies invocation flags specifying when the completion routine is invoked. See following table for the values used.

[out] IoStatusBlock

Location to return the status information. This is always assumed to be a valid address, regardless of the requester mode. The value must remain valid until the call has updated the status. The caller must either perform synchronous I/O or must wait for the file object's event or an event passed in the Event parameter before allowing this address to become invalid.

[in, out] StreamHeaders

Specifies the list of stream headers. This address, as well as the addresses of the data buffers, are assumed to have been probed for appropriate access. Kernel-mode clients submitting streaming headers must allocate the headers from NonPagedPool memory.

[in] Length

Specifies the size of the StreamHeaders passed.

[in] Flags

Specifies various flags for the I/O. See the following table for the values used.

[in] RequestorMode

Indicates the processor mode to place in the IRP if one is needs to be generated. This variable also determines if a fast I/O call can be performed. If the requester mode is not kernel mode, but the previous mode is, then fast I/O cannot be used.

Return value

The KsStreamIo function returns STATUS_SUCCESS if successful, STATUS_PENDING if action is pending, or if unsuccessful it returns an I/O error.

Remarks

The following enumerated values are used for the CompletionInvocationFlags variable and are of type KSCOMPLETION_INVOCATION:

CompletionInvocationFlags Description
KsInvokeOnSuccess Invokes the completion routine on success.
KsInvokeOnError Invokes the completion routine on error.
KsInvokeOnCancel Invokes the completion routine on cancellation.

The following defined values are used for the Flags variable:

Flags Description
KSSTREAM_READ Specifies that an IOCTL_KS_STREAMREAD IRP is to be built. This is the default.
KSSTREAM_WRITE Specifies that an IOCTL_KS_STREAMWRITE IRP is to be built.
KSSTREAM_PAGED_DATA Specifies that the data is pageable. This is the default and can be used at all times.
KSSTREAM_NONPAGED_DATA Specifies that the data is nonpaged and can be used as a performance enhancement.
KSSTREAM_SYNCHRONOUS Specifies that the IRP is synchronous. This means that if the Event parameter is passed, it is not treated as an object manager event and is not referenced or dereferenced.

KSSTREAM_READ is equivalent to KSPROBE_STREAMREAD.

Similarly, KSSTREAM_WRITE is equivalent to KSPROBE_STREAMWRITE.

Requirements

Requirement Value
Target Platform Universal
Header ks.h (include Ks.h)
Library Ks.lib