FLT_PARAMETERS per IRP_MJ_DEVICE_CONTROL e unione IRP_MJ_INTERNAL_DEVICE_CONTROL
Componente union utilizzato quando il campo MajorFunction della struttura FLT_IO_PARAMETER_BLOCK per l'operazione viene IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL.
Sintassi
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
} FastIo;
} DeviceIoControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Members
Comune: componente union usato per tutti i metodi di buffering (Né, Buffered e FastIo).
OutputBufferLength: lunghezza, in byte, del buffer a cui punta il membro Neither.OutputBuffer, Direct.OutputBuffer o FastIo.OutputBuffer .
InputBufferLength: lunghezza, in byte, del buffer a cui punta il membro Neither.InputBuffer, Buffered.SystemBuffer, Direct.InputSystemBuffer o FastIo.InputBuffer .
IoControlCode: codice della funzione IOCTL da passare al driver di dispositivo per il dispositivo di destinazione. Per informazioni dettagliate sulle richieste IOCTL, vedere Uso dei codici di controllo I/O e "Codici di controllo di input del dispositivo e output" nella documentazione di Microsoft Windows SDK. Questa risorsa potrebbe non essere disponibile in alcune lingue e paesi.
Né: componente union usato quando il metodo di buffering viene METHOD_NEITHER. Per altre informazioni sui metodi di memorizzazione nel buffer, vedere Definizione dei codici di controllo di I/O nella Guida all'architettura della modalità kernel.
Neither.InputBuffer: indirizzo virtuale in modalità utente del buffer di input fornito dal richiedente originale dell'operazione. Gestione I/O e Gestione filtri non convalidano questi indirizzi. Per garantire che gli indirizzi dello spazio utente siano validi, il minifilter deve usare routine come ProbeForRead, ProbeForWrite e FltLockUserBuffer, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Using Neither Buffered nor Direct I/O and Errors in Referencing User-Space Addresses .For more information, see Using Nor Buffered nor Direct I/O and Errors in referencing User-Space Addresses.
Neither.OutputBuffer: indirizzo virtuale in modalità utente del buffer di output fornito dal richiedente originale dell'operazione. Gestione I/O e Gestione filtri non convalidano questi indirizzi. Per garantire che gli indirizzi dello spazio utente siano validi, il minifilter deve usare routine come ProbeForRead, ProbeForWrite e FltLockUserBuffer, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Using Neither Buffered nor Direct I/O and Errors in Referencing User-Space Addresses ( Uso né di I/O diretto né di I/O diretto e degli errori) nella Guida all'architettura della modalità kernel.
Neither.OutputMdlAddress: indirizzo di un elenco di descrittori di memoria (MDL) che descrive il buffer a cui punta il membro Neither.OutputBuffer . Questo membro è facoltativo e può essere NULL.
Buffered: componente union usato quando il metodo di buffering viene METHOD_BUFFERED. Per altre informazioni sui metodi di memorizzazione nel buffer, vedere Definizione dei codici di controllo di I/O.
Buffered.SystemBuffer: indirizzo del buffer allocato dal sistema per l'operazione. In METHOD_BUFFERED I/O questo buffer viene usato sia per l'input che per l'output. Per altre informazioni, vedere Metodi per l'accesso ai buffer di dati.
Diretto: componente union usato quando il metodo di buffering viene METHOD_IN_DIRECT o METHOD_OUT_DIRECT. Per altre informazioni sui metodi di memorizzazione nel buffer, vedere Definizione dei codici di controllo di I/O.
Direct.InputSystemBuffer: indirizzo del buffer di input per l'operazione. Questo buffer è bloccato dal sistema operativo in modo che sia sicuro accedere dalla modalità kernel. Per altre informazioni, vedere Metodi per l'accesso ai buffer di dati.
Direct.OutputBuffer: indirizzo virtuale in modalità utente del buffer di output fornito dal richiedente originale dell'operazione. In I/O diretto, a differenza di METHOD_NEITHER I/O, il sistema operativo blocca questo buffer in modo che sia sicuro accedere dalla modalità kernel, purché il minifilter si trova nello stesso contesto del processo del richiedente originale dell'operazione di I/O. In caso contrario, deve chiamare MmGetSystemAddressForMdlSafe per ottenere l'indirizzo di sistema dall'elenco dei descrittori di memoria (MDL) a cui punta il membro OutputMdlAddress . Per altre informazioni, vedere Using Direct I/O and Errors in Direct I/O.For more information, see Using Direct I/O and Errors in Direct I/O.
Direct.OutputMdlAddress: indirizzo di un MDL che descrive il buffer a cui punta il membro Direct.OutputBuffer . Questo membro è obbligatorio e non può essere NULL.
FastIo: componente union usato quando la struttura FLT_CALLBACK_DATA rappresenta un'operazione di I/O veloce IRP_MJ_DEVICE_CONTROL.
FastIo.InputBuffer: indirizzo virtuale in modalità utente del buffer di input fornito dal richiedente originale dell'operazione. Gestione I/O e Gestione filtri non convalidano questi indirizzi. Per garantire che gli indirizzi dello spazio utente siano validi, il minifilter deve usare routine come ProbeForRead, ProbeForWrite e FltLockUserBuffer, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Errori in Riferimento User-Space indirizzi.
FastIo.OutputBuffer: indirizzo virtuale in modalità utente del buffer di output fornito dal richiedente originale dell'operazione. Gestione I/O e Gestione filtri non convalidano questi indirizzi. Per garantire che gli indirizzi dello spazio utente siano validi, il minifilter deve usare routine come ProbeForRead, ProbeForWrite e FltLockUserBuffer, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Errori in Riferimento User-Space indirizzi.
Commenti
La struttura FLT_PARAMETERS per le operazioni di IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL contiene i parametri per un'operazione di informazioni sul controllo I/O/I/O basata su IRP rappresentata da una struttura di dati di callback (FLT_CALLBACK_DATA). È contenuto in una struttura FLT_IO_PARAMETER_BLOCK .
IRP_MJ_DEVICE_CONTROL può essere un'operazione basata su IRP o un'operazione di I/O veloce.
IRP_MJ_INTERNAL_DEVICE_CONTROL è un'operazione di I/O basata su IRP.
Requisiti
Tipo di requisito | Requisito |
---|---|
Intestazione | Fltkernel.h (include Fltkernel.h) |