Condividi tramite


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

Vedere anche

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer