Función KsStreamIo (ks.h)

La función KsStreamIo realiza una secuencia de lectura o escritura en el objeto de archivo especificado. La función intenta usar FastIoDispatch si es posible, o genera una solicitud de lectura o escritura en el objeto de dispositivo.

Sintaxis

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

Parámetros

[in] FileObject

Especifica el objeto de archivo en el que se va a realizar la E/S.

[in, optional] Event

Opcionalmente, contiene el evento que se va a usar en la E/S. Si no se pasa ninguno, se supone que la llamada está en un objeto de archivo sincrónico o el autor de la llamada está esperando el evento del objeto de archivo o, de lo contrario, se puede completar de forma asincrónica. Si se usa y no se establece la marca KSSTREAM_SYNCHRONOUS, este debe ser un evento asignado por el administrador de objetos. Si el autor de la llamada está realizando E/S asincrónica, debe esperar al evento del objeto de archivo o pasar un evento en este parámetro y esperarlo. Si esto no se hace, no hay forma de que el autor de la llamada sepa cuándo ioStatusBlock se ha actualizado mediante la llamada.

[in, optional] PortContext

Opcionalmente, contiene información de contexto para un puerto de finalización.

[in, optional] CompletionRoutine

Opcionalmente, apunta a una rutina de finalización para este IRP.

[in, optional] CompletionContext

Si se especifica CompletionRoutine , se proporciona un puntero de contexto en la devolución de llamada de rutina de finalización.

[in, optional] CompletionInvocationFlags

Especifica marcas de invocación que especifican cuándo se invoca la rutina de finalización. Consulte la tabla siguiente para conocer los valores usados.

[out] IoStatusBlock

Ubicación para devolver la información de estado. Siempre se supone que es una dirección válida, independientemente del modo del solicitante. El valor debe permanecer válido hasta que la llamada haya actualizado el estado. El autor de la llamada debe realizar E/S sincrónica o esperar al evento del objeto de archivo o un evento pasado en el parámetro Event antes de permitir que esta dirección no sea válida.

[in, out] StreamHeaders

Especifica la lista de encabezados de secuencia. Se supone que esta dirección, así como las direcciones de los búferes de datos, se han sondado para obtener el acceso adecuado. Los clientes en modo kernel que envían encabezados de streaming deben asignar los encabezados de la memoria NonPagedPool.

[in] Length

Especifica el tamaño de los StreamHeaders pasados .

[in] Flags

Especifica varias marcas para la E/S. Consulte la tabla siguiente para conocer los valores usados.

[in] RequestorMode

Indica el modo de procesador que se va a colocar en el IRP si es necesario generar uno. Esta variable también determina si se puede realizar una llamada de E/S rápida. Si el modo de solicitante no es el modo kernel, pero el modo anterior es, no se puede usar E/S rápida.

Valor devuelto

La función KsStreamIo devuelve STATUS_SUCCESS si se ejecuta correctamente, STATUS_PENDING si la acción está pendiente o si no se realiza correctamente, devuelve un error de E/S.

Comentarios

Los siguientes valores enumerados se usan para la variable CompletionInvocationFlags y son de tipo KSCOMPLETION_INVOCATION:

CompletionInvocationFlags Descripción
KsInvokeOnSuccess Invoca la rutina de finalización correctamente.
KsInvokeOnError Invoca la rutina de finalización en caso de error.
KsInvokeOnCancel Invoca la rutina de finalización en la cancelación.

Los siguientes valores definidos se usan para la variable Flags :

Marcas Descripción
KSSTREAM_READ Especifica que se va a compilar un IRP de IOCTL_KS_STREAMREAD. Este es el valor predeterminado.
KSSTREAM_WRITE Especifica que se va a crear un IRP de IOCTL_KS_STREAMWRITE.
KSSTREAM_PAGED_DATA Especifica que los datos son paginables. Este es el valor predeterminado y se puede usar en todo momento.
KSSTREAM_NONPAGED_DATA Especifica que los datos no están paginados y se pueden usar como una mejora del rendimiento.
KSSTREAM_SYNCHRONOUS Especifica que el IRP es sincrónico. Esto significa que si se pasa el parámetro Event , no se trata como un evento del administrador de objetos y no se hace referencia a él ni se desreferencia.

KSSTREAM_READ equivale a KSPROBE_STREAMREAD.

Del mismo modo, KSSTREAM_WRITE es equivalente a KSPROBE_STREAMWRITE.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ks.h (incluye Ks.h)
Library Ks.lib