Bagikan melalui


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
STATUS_FLT_DELETING_OBJECT
Instans driver minifilter sedang dirobohkan. Ini adalah kode kesalahan.
STATUS_INSUFFICIENT_RESOURCES
FltRequestOperationStatusCallback mengalami kegagalan alokasi kumpulan. Ini adalah kode kesalahan.
STATUS_INVALID_PARAMETER
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

Lihat juga

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

IoCallDriver

PFLT_GET_OPERATION_STATUS_CALLBACK

PFLT_PRE_OPERATION_CALLBACK