Funzione FltDecodeParameters (fltkernel.h)
FltDecodeParameters restituisce puntatori all'indirizzo MDL (Memory Descriptor List), al puntatore del buffer, alla lunghezza del buffer e ai parametri di accesso desiderati per un'operazione di I/O. In questo modo, i driver minifiltro possono avere un'istruzione switch per trovare la posizione di questi parametri nelle routine helper che accedono all'indirizzo MDL, al puntatore del buffer, alla lunghezza del buffer e all'accesso desiderato per più tipi di operazione.
Sintassi
NTSTATUS FLTAPI FltDecodeParameters(
[in] PFLT_CALLBACK_DATA CallbackData,
[out] PMDL **MdlAddressPointer,
[out] PVOID **Buffer,
[out] PULONG *Length,
[out, optional] LOCK_OPERATION *DesiredAccess
);
Parametri
[in] CallbackData
Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) per l'operazione di I/O.
[out] MdlAddressPointer
Puntatore a una variabile fornita dal chiamante che riceve un puntatore alla MdlAddress (o OutputMdlAddress) della struttura dei dati di callback (FLT_PARAMETERS) (si noti che questo membro è un puntatore). Questo parametro è facoltativo e può essere NULL. Se l'operazione di I/O non dispone di un campo MDL, questo parametro riceve NULL.
[out] Buffer
Puntatore a una variabile fornita dal chiamante che riceve un puntatore al membro del buffer appropriato (a seconda del codice della funzione principale) nella struttura dei parametri dei dati del callback (si noti che questo membro è un puntatore).
[out] Length
Puntatore a una variabile fornita dal chiamante che riceve un puntatore al membro della lunghezza del buffer nella struttura dei parametri di dati del callback. Se l'operazione non dispone di un campo di lunghezza, questo parametro riceve NULL.
[out, optional] DesiredAccess
Puntatore a una variabile fornita dal chiamante che riceve il tipo di accesso appropriato per questo tipo di operazione di I/O, uno dei IoReadAccess, IoWriteAccesso IoModifyAccess. IoReadAccess significa che il driver minifiltro può esaminare il contenuto del buffer, ma non può modificare il contenuto sul posto. IoWriteAccess e IoModifyAccess, che sono equivalenti, significano che il driver minifiltro ha accesso in lettura e scrittura al buffer.
Valore restituito
FltDecodeParameters restituisce STATUS_SUCCESS o un valore NTSTATUS appropriato, ad esempio:
Codice restituito | Descrizione |
---|---|
STATUS_INVALID_PARAMETER | La struttura dei dati di callback (FLT_CALLBACK_DATA) rappresenta un'operazione di I/O che non dispone di parametri del buffer. Si tratta di un codice di errore. |
Osservazioni
FltDecodeParameters restituisce puntatori ai parametri per un'operazione di I/O, anziché i valori dei parametri, in modo che il chiamante possa modificare i valori dei parametri, se necessario.
FltDecodeParameters può essere usato per operazioni di I/O veloci e operazioni basate su IRP. Non è significativo per le operazioni di callback del filtro del file system (FSFilter), perché tali operazioni non dispongono di parametri di buffer.
Le operazioni IOCTL e FSCTL possono avere uno o due buffer, a seconda del metodo di buffering usato. Nei casi in cui l'operazione include due buffer (e due campi di lunghezza), FltDecodeParameters restituisce i campi OutputBuffer, OutputBufferLengthe/o campi outputMdlAddress in base alle esigenze.
Non tutti i quattro parametri vengono restituiti per ogni operazione di I/O. Ad esempio, per una richiesta di IRP_MJ_READ, FltDecodeParameters imposta i parametri di output come indicato di seguito.
Parametro | Valore |
---|---|
MdlAddressPointer | &(CallbackData->Iopb->Parameters.Read.MdlAddress) |
buffer | &(CallbackData->Iopb->Parameters.Read.ReadBuffer) |
lunghezza | &(CallbackData->Iopb->Parameters.Read.Length) |
DesiredAccess | IoWriteAccess |
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | fltkernel.h (include Fltkernel.h) |
libreria | FltMgr.lib |
IRQL | Qualsiasi livello |