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 |
---|---|
|
Parameter SPBREQUEST tidak valid atau struktur SPB_TRANSFER_LIST dalam permintaan diformat dengan tidak benar. |
|
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
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