Bagikan melalui


FLT_PARAMETERS untuk serikat IRP_MJ_DEVICE_CONTROL dan IRP_MJ_INTERNAL_DEVICE_CONTROL

Komponen union yang digunakan ketika bidang MajorFunction dari struktur FLT_IO_PARAMETER_BLOCK untuk operasi IRP_MJ_DEVICE_CONTROL atau IRP_MJ_INTERNAL_DEVICE_CONTROL.

Sintaks

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;

Anggota

  • Umum: Komponen union yang digunakan untuk semua metode buffering (Tidak,Buffered, dan FastIo).

  • OutputBufferLength: Panjang, dalam byte, dari buffer yang dirujuk anggota Neither.OutputBuffer, Direct.OutputBuffer, atau FastIo.OutputBuffer .

  • InputBufferLength: Panjang, dalam byte, dari buffer yang dituju oleh anggota Neither.InputBuffer, Buffered.SystemBuffer, Direct.InputSystemBuffer, atau FastIo.InputBuffer .

  • IoControlCode: Kode fungsi IOCTL yang akan diteruskan ke driver perangkat untuk perangkat target. Untuk informasi terperinci tentang permintaan IOCTL, lihat Menggunakan Kode Kontrol I/O dan "Kode Kontrol Input dan Output Perangkat" dalam dokumentasi Microsoft Windows SDK. (Sumber daya ini mungkin tidak tersedia di beberapa bahasa dan negara.)

  • Baik: Komponen union yang digunakan saat metode buffering METHOD_NEITHER. Untuk informasi selengkapnya tentang metode buffering, lihat Menentukan Kode Kontrol I/O di Panduan Arsitektur Mode Kernel.

  • Neither.InputBuffer: Alamat virtual mode pengguna dari buffer input yang disediakan pemohon asli operasi. Manajer I/O dan Manajer Filter tidak memvalidasi alamat ini. Untuk memastikan bahwa alamat ruang pengguna valid, minifilter harus menggunakan rutinitas seperti ProbeForRead, ProbeForWrite, dan FltLockUserBuffer, yang menyertakan semua referensi buffer dalam blok try/except . Untuk informasi selengkapnya, lihat Menggunakan I/O Buffered maupun Direct I/O dan Kesalahan dalam Mereferensikan Alamat User-Space.

  • Tidak Ada.OutputBuffer: Alamat virtual mode pengguna dari buffer output yang disediakan pemohon asli operasi. Manajer I/O dan Manajer Filter tidak memvalidasi alamat ini. Untuk memastikan bahwa alamat ruang pengguna valid, minifilter harus menggunakan rutinitas seperti ProbeForRead, ProbeForWrite, dan FltLockUserBuffer, yang menyertakan semua referensi buffer dalam blok try/except . Untuk informasi selengkapnya, lihat Menggunakan I/O Buffered maupun Direct I/O dan Kesalahan dalam Mereferensikan Alamat User-Space di Panduan Arsitektur Mode Kernel.

  • Neither.OutputMdlAddress: Alamat daftar deskriptor memori (MDL) yang menjelaskan buffer yang ditunjuk oleh anggota Neither.OutputBuffer . Anggota ini bersifat opsional dan dapat berupa NULL.

  • Buffered: Komponen union yang digunakan saat metode buffering METHOD_BUFFERED. Untuk informasi selengkapnya tentang metode buffering, lihat Menentukan Kode Kontrol I/O.

  • Buffered.SystemBuffer: Alamat buffer yang dialokasikan sistem untuk operasi. Dalam I/O METHOD_BUFFERED, buffer ini digunakan untuk input dan output. Untuk informasi selengkapnya, lihat Metode untuk Mengakses Buffer Data.

  • Langsung: Komponen union yang digunakan saat metode buffering METHOD_IN_DIRECT atau METHOD_OUT_DIRECT. Untuk informasi selengkapnya tentang metode buffering, lihat Menentukan Kode Kontrol I/O.

  • Direct.InputSystemBuffer: Alamat buffer input untuk operasi. Buffer ini dikunci oleh sistem operasi sehingga aman untuk diakses dari mode kernel. Untuk informasi selengkapnya, lihat Metode untuk Mengakses Buffer Data.

  • Direct.OutputBuffer: Alamat virtual mode pengguna dari buffer output yang disediakan pemohon asli operasi. Dalam I/O langsung, tidak seperti I/O METHOD_NEITHER, sistem operasi mengunci buffer ini sehingga aman untuk mengakses dari mode kernel, selama minifilter berada dalam konteks proses yang sama dengan pemohon asli operasi I/O. (Jika tidak, harus memanggil MmGetSystemAddressForMdlSafe untuk mendapatkan alamat sistem dari daftar deskriptor memori (MDL) yang ditunjuk anggota OutputMdlAddress .) Untuk informasi selengkapnya, lihat Menggunakan I/O Langsung dan Kesalahan di I/O Langsung.

  • Direct.OutputMdlAddress: Alamat MDL yang menjelaskan buffer yang dirujuk anggota Direct.OutputBuffer . Anggota ini diperlukan dan tidak boleh NULL.

  • Komponen FastIo: Union yang digunakan ketika struktur FLT_CALLBACK_DATA mewakili operasi IRP_MJ_DEVICE_CONTROL I/O yang cepat.

  • FastIo.InputBuffer: Alamat virtual mode pengguna dari buffer input yang disediakan pemohon asli operasi. Manajer I/O dan Manajer Filter tidak memvalidasi alamat ini. Untuk memastikan bahwa alamat ruang pengguna valid, minifilter harus menggunakan rutinitas seperti ProbeForRead, ProbeForWrite, dan FltLockUserBuffer, yang menyertakan semua referensi buffer dalam blok try/except . Untuk informasi selengkapnya, lihat Kesalahan dalam Mereferensikan Alamat User-Space.

  • FastIo.OutputBuffer: Alamat virtual mode pengguna dari buffer output yang disediakan pemohon asli operasi. Manajer I/O dan Manajer Filter tidak memvalidasi alamat ini. Untuk memastikan bahwa alamat ruang pengguna valid, minifilter harus menggunakan rutinitas seperti ProbeForRead, ProbeForWrite, dan FltLockUserBuffer, yang menyertakan semua referensi buffer dalam blok try/except . Untuk informasi selengkapnya, lihat Kesalahan dalam Mereferensikan Alamat User-Space.

Keterangan

Struktur FLT_PARAMETERS untuk operasi IRP_MJ_DEVICE_CONTROL dan IRP_MJ_INTERNAL_DEVICE_CONTROL berisi parameter untuk operasi informasi kontrol I/O perangkat berbasis IRP yang diwakili oleh struktur data panggilan balik (FLT_CALLBACK_DATA). Ini terkandung dalam struktur FLT_IO_PARAMETER_BLOCK .

IRP_MJ_DEVICE_CONTROL dapat menjadi operasi berbasis IRP atau operasi I/O yang cepat.

IRP_MJ_INTERNAL_DEVICE_CONTROL adalah operasi I/O berbasis IRP.

Persyaratan

Jenis persyaratan Persyaratan
Header Fltkernel.h (termasuk Fltkernel.h)

Lihat juga

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