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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk