Funzione FltDecodeParameters (fltkernel.h)

FltDecodeParameters restituisce puntatori all'indirizzo MDL (Memory Descriptor List), il puntatore del buffer, la lunghezza del buffer e i parametri di accesso desiderati per un'operazione di I/O. Ciò consente ai driver minifilter di 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 al membro 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 ha 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 dei parametri dei dati di callback. Se l'operazione non ha 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 di IoReadAccess, IoWriteAccess o IoModifyAccess. IoReadAccess significa che il driver minifilter può esaminare il contenuto del buffer, ma non può modificare il contenuto sul posto. IoWriteAccess e IoModifyAccess, equivalenti, significa che il driver minifilter ha accesso in lettura e scrittura al buffer.

Valore restituito

FltDecodeParameters restituisce STATUS_SUCCESS o un valore NTSTATUS appropriato, ad esempio quanto segue:

Codice restituito Descrizione
STATUS_INVALID_PARAMETER La struttura dei dati di callback (FLT_CALLBACK_DATA) rappresenta un'operazione di I/O che non ha parametri di buffer. Si tratta di un codice di errore.

Commenti

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 desiderato.

FltDecodeParameters può essere usato per operazioni di I/O veloci e operazioni basate su IRP. Non è significativo per le operazioni di callback del file system (FSFilter), perché queste operazioni non dispongono di parametri 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 ha due buffer (e due campi di lunghezza), FltDecodeParameters restituisce i campi OutputBuffer, OutputBufferLength e/o OutputMdlAddress in base alle esigenze.

Non tutti i quattro parametri vengono restituiti per ogni operazione di I/O. Ad esempio, per una richiesta 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

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (includere Fltkernel.h)
Libreria FltMgr.lib
IRQL Qualsiasi livello

Vedi anche

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer