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 |