Fungsi panggilan balik PFNKSHANDLER (ks.h)

Rutinitas yang disediakan minidriver dipanggil ketika Kernel Streaming menerima IOCTL_KS_METHOD, mendapatkan/mengatur permintaan properti. Berikan penunjuk ke handler ini dalam struktur KSMETHOD_ITEM, KSPROPERTY_ITEM yang relevan.

Sintaks

PFNKSHANDLER Pfnkshandler;

NTSTATUS Pfnkshandler(
  [in]      PIRP Irp,
  [in]      PKSIDENTIFIER Request,
  [in, out] PVOID Data
)
{...}

Parameter

[in] Irp

Menentukan IRP yang berisi metode atau permintaan properti.

[in] Request

Menentukan salinan parameter metode yang diratakan. Ini biasanya merupakan penunjuk ke struktur KSMETHOD atau KSPROPERTY .

[in, out] Data

Menentukan salinan parameter data metode yang selaras atau alamat sistem parameter data asli, tergantung pada bendera yang ditentukan dalam struktur KSMETHOD_ITEM untuk metode tersebut.

Nilai kembali

Mengembalikan STATUS_SUCCESS jika metode ditangani dan buffer data telah diisi per bendera yang ditentukan dalam KSMETHOD_ITEM. Jika mengembalikan data, driver Anda harus mengatur bidang Irp-IoStatus.Information>, tetapi tidak boleh mengatur bidang Irp-IoStatus.Status> juga tidak boleh menyelesaikan IRP. Tandai IRP tertunda jika harus diselesaikan secara asinkron.

Atau, kembalikan STATUS_SOME_NOT_MAPPED jika metode telah ditangani tetapi permintaan tertentu belum selesai dan harus diselesaikan oleh fungsi pembantu panggilan. Kembalikan pesan kesalahan lainnya untuk menunjukkan bahwa metode tidak didukung atau terjadi kesalahan parameter.

Keterangan

Minidriver menentukan alamat rutin ini di anggota MethodHandler dari struktur KSMETHOD_ITEM .

Deklarasi handler yang digunakan untuk KStrMethodHandler dan KStrSupportHandler juga digunakan untuk penangan set properti dan peristiwa, dengan parameter dan nilai pengembalian yang sama.

Ketika fungsi pembantu seperti KsMethodHandler memanggil handler metode yang buffer datanya didefinisikan sebagai buffer tulis atau modifikasi, handler metode harus mengatur anggota Informasi dari struktur IO_STATUS_BLOCK untuk anggota IoStatus dalam IRP (parameter Irp ) ke ukuran buffer data tersebut. Minidriver mengatur anggota Bendera dari struktur KSMETHOD_ITEM agar metode KSMETHOD_TYPE_WRITE atau KSMETHOD_TYPE_MODIFY untuk menentukan buffer data penangan metode sebagai tulis atau ubah masing-masing.

Cuplikan kode berikut menunjukkan contoh implementasi handler metode yang mengatur ukuran buffer data yang dikembalikan di IRP:

NTSTATUS
  MethodHandler(PIRP pIrp, PKSIDENTIFIER Request, PVOID Data) {
    NTSTATUS Status = STATUS_UNSUCCESSFUL;
    // Pointer to hold the position on the Irp stack
    PIO_STACK_LOCATION  pIrpStack  = NULL;
    ASSERT(pIrp);
    if(Data) {
        // Modify data here
    }
    // Find the current Irp stack.
    pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
    if(pIrpStack) {
        // Set the size of the returning Irp data.
        pIrp->IoStatus.Information =
          pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
        Status = STATUS_SUCCESS;
    }
    return(Status);
}

Minidriver menentukan alamat rutin ini di anggota GetPropertyHandler dari struktur KSPROPERTY_ITEM .

Minidriver menentukan alamat rutin ini di anggota SetPropertyHandler dari struktur KSPROPERTY_ITEM .

Minidriver menentukan alamat rutin ini di anggota SupportHandler dari struktur KSMETHOD_ITEM .

Deklarasi handler yang digunakan untuk KStrMethodHandler dan KStrSupportHandler juga digunakan untuk penangan set properti dan peristiwa, dengan parameter dan nilai pengembalian yang sama.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header ks.h (termasuk Ks.h)

Lihat juga

KSMETHOD

KSMETHOD_ITEM

KSMETHOD_SET

KsMethodHandler