Share via


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 (, 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.

  • : 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)

Vedi anche

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltDeviceIoControlFile

FltLockUserBuffer

IoBuildDeviceIoControlRequest

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwDeviceIoControlFile