Condividi tramite


Funzione KsProbeStreamIrp (ks.h)

La funzione KsProbeStreamIrp apporta le modifiche specificate ai buffer di input e output dell'IRP specificato in base ai flag passati e quindi convalida l'intestazione del flusso. Ciò è utile quando si localizza la gestione delle eccezioni o si eseguono operazioni asincrone su un IRP. L'IRP risultante si trova essenzialmente nel formato METHOD_OUT_DIRECT o METHOD_IN_DIRECT, ad eccezione del fatto che l'accesso al buffer dei dati può essere IoModifyAccess, a seconda dei flag passati a questa funzione o ai flag nell'intestazione del flusso.

Sintassi

KSDDKAPI NTSTATUS KsProbeStreamIrp(
  [in, out]      PIRP  Irp,
  [in]           ULONG ProbeFlags,
  [in, optional] ULONG HeaderSize
);

Parametri

[in, out] Irp

Specifica l'IRP di cui eseguire il mapping dei buffer di input e output. La modalità richiedente dell'IRP viene usata durante il probe dei buffer.

[in] ProbeFlags

Specifica i flag che specificano come eseguire il probe dell'IRP di streaming; I flag sono elencati nella tabella seguente.

[in, optional] HeaderSize

Specifica le dimensioni per convalidare ogni intestazione rispetto a quella passata al client oppure zero se non deve essere eseguita alcuna convalida. Se usato, si presuppone che l'intero buffer passato sia un multiplo di questa dimensione di intestazione, a meno che il buffer non contenga invece un'unica intestazione di modifica del formato.

Valore restituito

La funzione KsProbeStreamIrp restituisce STATUS_SUCCESS in caso di esito positivo oppure restituisce un errore di memoria o di accesso.

Commenti

Se la funzione viene usata solo per allocare e non per eseguire il probe e bloccare gli indirizzi, il chiamante deve avere una routine di completamento per pulire il file MDL. Ad esempio, un meccanismo di blocco JITE può allocare l'elenco MDL, ma solo bloccare la memoria in base alle esigenze. Il client deve fornire codice di pulizia per rimuovere l'elenco MDL parzialmente bloccato prima del completamento dell'IRP, presumibilmente in una routine di completamento.

Se le intestazioni sembrano essere già state copiate in un buffer di sistema, non viene convalidata di nuovo. In generale, la chiamata della funzione KsProbeStreamIrp più volte con un IRP non è dannosa. Dopo aver chiamato la funzione, le intestazioni del flusso sono disponibili in PIRP. AssociatedIrp.SystemBuffer. Se gli MDL del buffer di flusso sono stati allocati, sono disponibili tramite IL PIRP. MdlAddress.

Le definizioni seguenti vengono usate per la variabile ProbeFlags :

ProbeFlags Valore Descrizione
KSPROBE_READ Indica che l'operazione è un flusso letto nel dispositivo. Questo è il valore predefinito.
KSPROBE_WRITE Indica che l'operazione è una scrittura di flusso nel dispositivo.
KSPROBE_ALLOCATEMDL Indica che gli ELENCHI di dati dati devono essere allocati per i buffer del flusso, se non sono già stati allocati. Se non sono presenti buffer di flusso, il flag viene ignorato. Se KSPROBE_PROBEANDLOCK non viene specificato contemporaneamente a questo flag, il chiamante deve disporre di una routine di completamento per pulire tutti i file MDL se non tutti gli ELENCHI di dati gestiti sono stati rilevati correttamente e bloccati.
KSPROBE_PROBEANDLOCK Se la KSPROBE_ALLOCATEMDL è impostata, indica che la memoria a cui fa riferimento gli ELENCHI di dati del flusso per i buffer del flusso deve essere eseguita il probe e il blocco. Se il flag di allocazione MDL non è impostato, questo flag viene ignorato anche se l'allocazione MDL è stata eseguita in precedenza. Il metodo di probe è determinato dal tipo di IRP passato. Per un'operazione di scrittura, viene usato IoReadAccess . Per un'operazione di lettura, viene usato IoWriteAccess . Se il client che ha inviato i dati usa il pool non di paging, gli elenchi DI certificati appropriati vengono inizializzati anziché eseguire il probe e il blocco.
KSPROBE_SYSTEMADDRESS Recupera un indirizzo di sistema per ogni MDL nella catena in modo che il chiamante non debba eseguire questa operazione in un passaggio separato. Questa operazione viene ignorata se il probe e il flag di blocco non sono impostati, anche se in precedenza sono stati eseguiti probe.
KSPROBE_ALLOWFORMATCHANGE Per un Stream Write, consente di impostare il flag KSSTREAM_HEADER_OPTIONSF_TYPECHANGED nell'intestazione del flusso. Ciò implica che l'intestazione del flusso non è di lunghezza estesa, anche se è stata indicata una dimensione estesa dell'intestazione. In questo caso, inoltre, potrebbe essere presente una sola intestazione di flusso contenuta in IRP. Il buffer associato a questa intestazione contiene il nuovo formato dati. Per i flussi di dati di memoria di sistema, il buffer non deve essere stato acquisito dall'allocatore negoziato, perché non fa parte del flusso di dati.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione ks.h (include Ks.h)
Libreria Ks.lib