Fungsi FltRequestOperationStatusCallback (fltkernel.h)
FltRequestOperationStatusCallback mengembalikan informasi status untuk operasi I/O yang diberikan.
Sintaks
NTSTATUS FLTAPI FltRequestOperationStatusCallback(
[in] PFLT_CALLBACK_DATA Data,
[in] PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine,
[in, optional] PVOID RequesterContext
);
Parameter
[in] Data
Penunjuk ke struktur data panggilan balik (FLT_CALLBACK_DATA) untuk operasi I/O. Parameter ini diperlukan dan tidak boleh NULL.
[in] CallbackRoutine
Penunjuk ke rutinitas panggilan balik yang dipanggil Manajer Filter setelah IoCallDriver kembali. Parameter ini diperlukan dan tidak boleh NULL.
[in, optional] RequesterContext
Penunjuk konteks yang akan diteruskan ke CallbackRoutine. Parameter ini bersifat opsional dan dapat berupa NULL.
Nilai kembali
FltRequestOperationStatusCallback mengembalikan STATUS_SUCCESS atau nilai NTSTATUS yang sesuai seperti salah satu hal berikut ini:
Menampilkan kode | Deskripsi |
---|---|
|
Instans driver minifilter sedang dirobohkan. Ini adalah kode kesalahan. |
|
FltRequestOperationStatusCallback mengalami kegagalan alokasi kumpulan. Ini adalah kode kesalahan. |
|
FltRequestOperationStatusCallback dipanggil dari rutinitas yang bukan rutinitas panggilan balik preoperasi (PFLT_PRE_OPERATION_CALLBACK), atau operasi I/O adalah permintaan IRP_MJ_CLOSE. Ini adalah kode kesalahan. |
Keterangan
Driver minifilter dapat memanggil FltRequestOperationStatusCallback untuk operasi I/O berbasis IRP untuk mendapatkan nilai status yang dikembalikan IoCallDriver untuk operasi tersebut.
Sebagian besar driver minifilter tidak perlu memanggil FltRequestOperationStatusCallback. Biasanya, driver minifilter hanya memanggil rutinitas ini untuk menentukan apakah oplock yang diminta diberikan.
FltRequestOperationStatusCallback hanya dapat dipanggil dari rutinitas callback praoperasi driver minifilter (PFLT_PRE_OPERATION_CALLBACK).
FltRequestOperationStatusCallback hanya dapat dipanggil untuk operasi berbasis IRP yang tidak IRP_MJ_CLOSE. Untuk menentukan apakah operasi tersebut adalah operasi berbasis IRP, gunakan makro FLT_IS_IRP_OPERATION .
Jika operasi berbasis IRP adalah permintaan IRP_MJ_CLOSE, STATUS_INVALID_PARAMETER dikembalikan.
FltRequestOperationStatusCallback menyalin konten blok parameter I/O (FLT_IO_PARAMETER_BLOCK) ke anggota Iopb dari data panggilan balik (FLT_CALLBACK_DATA), dan ini adalah data panggilan balik yang akan diteruskan Oleh Filter Manager ke rutin yang ditentukan dalam parameter CallbackRoutine . Data yang disalin mewakili rekam jepret blok parameter I/O pada saat panggilan balik praoperasi (PFLT_PRE_OPERATION_CALLBACK) rutin memanggil FltRequestOperationStatusCallback. Jika rutinitas panggilan balik preoperasi mengubah blok parameter I/O setelah memanggil FltRequestOperationStatusCallback, blok parameter I/O yang diteruskan Manajer Filter ke CallbackRoutine akan berbeda dari blok parameter I/O yang diteruskan driver filter ke tumpukan driver saat memanggil IoCallDriver.
Contoh kode berikut dari rutinitas panggilan balik praoperasi menggambarkan bagaimana hal ini mungkin terjadi:
PFLT_CALLBACK_DATA Data;
PFLT_GET_OPERATION_STATUS_CALLBACK CallbackRoutine;
PVOID RequesterContext;
...
if (iopb->MajorFunction == IRP_MJ_READ) {
FltRequestOperationStatusCallback (Data, CallbackRoutine, RequesterContext);
Data->Iopb->Parameters.Read.ReadBuffer = newBuffer;
...
}
Dalam contoh, buffer baca diubah setelah panggilan ke FltRequestOperationStatusCallback, jadi ketika Manajer Filter memanggil CallbackRoutine, itu akan meneruskan penunjuk ke buffer lama alih-alih yang baru.
Manajer Filter memanggil CallbackRoutine yang diberikan dalam konteks utas asal di IRQL <= APC_LEVEL.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Header | fltkernel.h (termasuk Fltkernel.h) |
Pustaka | Fltmgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |