Função KsStreamIo (ks.h)
A função KsStreamIo executa uma leitura ou gravação de fluxo no objeto de arquivo especificado. A função tenta usar FastIoDispatch , se possível, ou gera uma solicitação de leitura ou gravação no objeto do dispositivo.
Sintaxe
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 o objeto de arquivo no qual executar a E/S.
[in, optional] Event
Opcionalmente, contém o evento a ser usado na E/S. Se nenhum for passado, a chamada será considerada em um objeto de arquivo síncrono ou o chamador está aguardando o evento do objeto de arquivo ou então ele pode ser concluído de forma assíncrona. Se usado e o sinalizador KSSTREAM_SYNCHRONOUS não estiver definido, esse deverá ser um evento alocado pelo gerenciador de objetos. Se o chamador estiver executando E/S assíncrona, ele deverá aguardar o evento do objeto de arquivo ou passar um evento nesse parâmetro e aguardar por ele. Se isso não for feito, não haverá como o chamador saber quando o IoStatusBlock foi atualizado pela chamada.
[in, optional] PortContext
Opcionalmente, contém informações de contexto para uma porta de conclusão.
[in, optional] CompletionRoutine
Opcionalmente, aponta para uma rotina de conclusão para esse IRP.
[in, optional] CompletionContext
Se CompletionRoutine for especificado, isso fornecerá um ponteiro de contexto no retorno de chamada de rotina de conclusão.
[in, optional] CompletionInvocationFlags
Especifica sinalizadores de invocação que especificam quando a rotina de conclusão é invocada. Consulte a tabela a seguir para obter os valores usados.
[out] IoStatusBlock
Local para retornar as informações de status. Isso sempre é considerado um endereço válido, independentemente do modo solicitante. O valor deve permanecer válido até que a chamada tenha atualizado o status. O chamador deve executar E/S síncrona ou aguardar o evento do objeto de arquivo ou um evento passado no parâmetro Event antes de permitir que esse endereço se torne inválido.
[in, out] StreamHeaders
Especifica a lista de cabeçalhos de fluxo. Supõe-se que esse endereço, bem como os endereços dos buffers de dados, tenham sido investigados quanto ao acesso apropriado. Os clientes no modo kernel que enviarem cabeçalhos de streaming devem alocar os cabeçalhos da memória NonPagedPool.
[in] Length
Especifica o tamanho dos StreamHeaders passados .
[in] Flags
Especifica vários sinalizadores para a E/S. Consulte a tabela a seguir para obter os valores usados.
[in] RequestorMode
Indica o modo de processador a ser colocado no IRP se for necessário gerar um. Essa variável também determina se uma chamada de E/S rápida pode ser executada. Se o modo solicitante não for o modo kernel, mas o modo anterior for, a E/S rápida não poderá ser usada.
Retornar valor
A função KsStreamIo retornará STATUS_SUCCESS se tiver êxito, STATUS_PENDING se a ação estiver pendente ou, se não tiver êxito, retornará um erro de E/S.
Comentários
Os seguintes valores enumerados são usados para a variável CompletionInvocationFlags e são do tipo KSCOMPLETION_INVOCATION:
CompletionInvocationFlags | Descrição |
---|---|
KsInvokeOnSuccess | Invoca a rotina de conclusão com êxito. |
KsInvokeOnError | Invoca a rotina de conclusão em caso de erro. |
KsInvokeOnCancel | Invoca a rotina de conclusão no cancelamento. |
Os seguintes valores definidos são usados para a variável Flags :
Sinalizadores | Descrição |
---|---|
KSSTREAM_READ | Especifica que um IOCTL_KS_STREAMREAD IRP deve ser criado. Esse é o padrão. |
KSSTREAM_WRITE | Especifica que um IOCTL_KS_STREAMWRITE IRP deve ser criado. |
KSSTREAM_PAGED_DATA | Especifica que os dados podem ser pagináveis. Esse é o padrão e pode ser usado o tempo todo. |
KSSTREAM_NONPAGED_DATA | Especifica que os dados não sãopagados e podem ser usados como um aprimoramento de desempenho. |
KSSTREAM_SYNCHRONOUS | Especifica que o IRP é síncrono. Isso significa que, se o parâmetro Event for passado, ele não será tratado como um evento do gerenciador de objetos e não será referenciado ou desreferenciado. |
KSSTREAM_READ é equivalente a KSPROBE_STREAMREAD.
Da mesma forma, KSSTREAM_WRITE é equivalente a KSPROBE_STREAMWRITE.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | ks.h (inclua Ks.h) |
Biblioteca | Ks.lib |