Condividi tramite


Funzione KsStreamIo (ks.h)

La funzione KsStreamIo esegue una lettura o una scrittura del flusso sull'oggetto file specificato. La funzione tenta di usare FastIoDispatch, se possibile, oppure genera una richiesta di lettura o scrittura sull'oggetto dispositivo.

Sintassi

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

Parametri

[in] FileObject

Specifica l'oggetto file su cui eseguire l'I/O.

[in, optional] Event

Facoltativamente contiene l'evento da usare nell'I/O. Se non viene passato nessuno, si presuppone che la chiamata si tratti di un oggetto file sincrono o che il chiamante sia in attesa dell'evento dell'oggetto file oppure che possa essere completato in modo asincrono. Se utilizzato e il flag KSSTREAM_SYNCHRONOUS non è impostato, deve essere un evento allocato dal gestore oggetti. Se il chiamante esegue operazioni di I/O asincrone, deve attendere l'evento dell'oggetto file o passare un evento in questo parametro e attenderlo. Se questa operazione non viene eseguita, non c'è modo per il chiamante di sapere quando L'IoStatusBlock è stato aggiornato dalla chiamata.

[in, optional] PortContext

Facoltativamente, contiene informazioni di contesto per una porta di completamento.

[in, optional] CompletionRoutine

Facoltativamente, punta a una routine di completamento per questo IRP.

[in, optional] CompletionContext

Se si specifica completionRoutine, viene fornito un puntatore di contesto nel callback della routine di completamento.

[in, optional] CompletionInvocationFlags

Specifica i flag di chiamata che specificano quando viene richiamata la routine di completamento. Vedere la tabella seguente per i valori usati.

[out] IoStatusBlock

Posizione in cui restituire le informazioni sullo stato. Si presuppone sempre che sia un indirizzo valido, indipendentemente dalla modalità richiedente. Il valore deve rimanere valido fino a quando la chiamata non ha aggiornato lo stato. Il chiamante deve eseguire operazioni di I/O sincrone oppure deve attendere l'evento dell'oggetto file o un evento passato nel parametro Event prima di consentire a questo indirizzo di diventare non valido.

[in, out] StreamHeaders

Specifica l'elenco di intestazioni di flusso. Questo indirizzo, nonché gli indirizzi dei buffer di dati, si presuppone che siano stati sottoposti a probe per l'accesso appropriato. I client in modalità kernel che inviano intestazioni di streaming devono allocare le intestazioni dalla memoria NonPagedPool.

[in] Length

Specifica le dimensioni del StreamHeaders passato.

[in] Flags

Specifica vari flag per l'I/O. Vedere la tabella seguente per i valori usati.

[in] RequestorMode

Indica la modalità processore da inserire nell'IRP se è necessario generarne una. Questa variabile determina anche se è possibile eseguire una chiamata di I/O veloce. Se la modalità richiedente non è in modalità kernel, ma la modalità precedente è , non è possibile usare l'I/O veloce.

Valore restituito

La funzione KsStreamIo restituisce STATUS_SUCCESS se ha esito positivo, STATUS_PENDING se l'azione è in sospeso o se ha esito negativo restituisce un errore di I/O.

Osservazioni

I valori enumerati seguenti vengono usati per la variabile CompletionInvocationFlags e sono di tipo KSCOMPLETION_INVOCATION:

CompletionInvocationFlags Descrizione
KsInvokeOnSuccess Richiama la routine di completamento in caso di esito positivo.
KsInvokeOnError Richiama la routine di completamento in caso di errore.
KsInvokeOnCancel Richiama la routine di completamento all'annullamento.

Per la variabile flag vengono usati i valori definiti seguenti:

flag Descrizione
KSSTREAM_READ Specifica che deve essere compilato un IOCTL_KS_STREAMREAD IRP. Si tratta dell'impostazione predefinita.
KSSTREAM_WRITE Specifica che deve essere compilato un IOCTL_KS_STREAMWRITE IRP.
KSSTREAM_PAGED_DATA Specifica che i dati sono visualizzabili in pagine. Si tratta dell'impostazione predefinita e può essere usata in qualsiasi momento.
KSSTREAM_NONPAGED_DATA Specifica che i dati non vengono visualizzati e possono essere usati come miglioramento delle prestazioni.
KSSTREAM_SYNCHRONOUS Specifica che l'IRP è sincrono. Ciò significa che se il parametro Event viene passato, non viene considerato come un evento di gestione oggetti e non viene fatto riferimento o dereferenziato.

KSSTREAM_READ equivale a KSPROBE_STREAMREAD.

Analogamente, KSSTREAM_WRITE equivale a KSPROBE_STREAMWRITE.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione ks.h (include Ks.h)
libreria Ks.lib