Fungsi SpbRequestCaptureIoOtherTransferList (spbcx.h)

Metode SpbRequestCaptureIoOtherTransferList mengambil struktur SPB_TRANSFER_LIST dalam buffer input permintaan IOCTL kustom.

Sintaks

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

Parameter

Request

HANDEL SPBREQUEST ke permintaan IOCTL kustom. Driver pengontrol SPB sebelumnya menerima handel ini melalui salah satu fungsi panggilan balik peristiwa terdaftarnya.

Menampilkan nilai

SpbRequestCaptureIoOtherTransferList mengembalikan STATUS_SUCCESS jika panggilan berhasil. Nilai yang mungkin dikembalikan termasuk kode kesalahan berikut.

Mengembalikan nilai Deskripsi
STATUS_INVALID_PARAMETER
Parameter SPBREQUEST tidak valid atau struktur SPB_TRANSFER_LIST dalam permintaan diformat dengan tidak benar.
STATUS_INSUFFICIENT_RESOURCES
Tidak dapat mengalokasikan sumber daya sistem yang diperlukan untuk operasi ini.

Keterangan

Metode ini harus dipanggil dalam konteks proses di mana alamat buffer valid. Biasanya, driver pengontrol SPB memanggil metode ini dari fungsi panggilan balik peristiwa EvtIoInCallerContext yang disediakan driver sebagai parameter input ke metode SpbControllerSetIoOtherCallback .

IRQL maksimum di mana driver pengontrol SPB dapat memanggil metode ini tergantung pada apakah pencetus permintaan I/O berjalan dalam mode pengguna atau dalam mode kernel. Jika permintaan berasal dari mode pengguna, driver harus memanggil metode ini di PASSIVE_LEVEL. Jika permintaan berasal dari mode kernel, driver harus memanggil metode ini di IRQL <= DISPATCH_LEVEL. Driver dapat memanggil metode WdfRequestGetRequestorMode untuk menentukan mode asal. Namun, panggilan ini biasanya tidak perlu karena driver dapat mengandalkan ekstensi kerangka kerja SPB (SpbCx) untuk memanggil fungsi EvtIoInCallerContext driver pada IRQL yang sesuai.

Contoh

Contoh kode berikut menunjukkan bagaimana fungsi panggilan balik peristiwa EvtIoInCallerContext driver pengontrol SPB dapat menggunakan metode SpbRequestCaptureIoOtherTransferList untuk mendapatkan buffer atau buffer I/O dari permintaan IOCTL kustom.

VOID
EvtIoInCallerContext(
    _In_  WDFDEVICE   SpbController,
    _In_  WDFREQUEST  FxRequest
    ) 
{
    NTSTATUS status;

    //
    // NOTE: The driver should check for custom IOCTLs that this
    // driver handles. If an IOCTL is not recognized, mark the
    // request as STATUS_NOT_SUPPORTED, and complete the request.
    //

    status = SpbRequestCaptureIoOtherTransferList((SPBREQUEST)FxRequest);

    //
    // If the preceding call fails, the driver must complete the
    // request instead of queueing the request.
    //

    if (!NT_SUCCESS(status))
    {
        goto exit;
    }

    status = WdfDeviceEnqueueRequest(SpbController, FxRequest);

    if (!NT_SUCCESS(status))
    {
        goto exit;
    }

exit:

    if (!NT_SUCCESS(status))
    {
        WdfRequestComplete(FxRequest, status);
    }
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 8.
Target Platform Universal
Header spbcx.h
Pustaka Spbcxstubs.lib
IRQL Lihat Keterangan.

Lihat juga

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode