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 |