Fungsi WdfRequestCompleteWithInformation (wdfrequest.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfRequestCompleteWithInformation menyimpan informasi penyelesaian lalu menyelesaikan permintaan I/O tertentu dengan status penyelesaian yang disediakan.
Sintaks
void WdfRequestCompleteWithInformation(
[in] WDFREQUEST Request,
[in] NTSTATUS Status,
[in] ULONG_PTR Information
);
Parameter
[in] Request
Handel ke objek permintaan.
[in] Status
Nilai NTSTATUS yang mewakili status penyelesaian permintaan. Nilai status yang valid termasuk, tetapi tidak terbatas pada, berikut ini:
STATUS_SUCCESS
Driver berhasil menyelesaikan permintaan.
STATUS_CANCELLED
Driver membatalkan permintaan.
STATUS_UNSUCCESSFUL
Driver mengalami kesalahan saat memproses permintaan.
[in] Information
ULONG_PTR yang diatur ke nilai yang bergantung pada permintaan. Misalnya, setelah berhasil menyelesaikan permintaan transfer, ini diatur ke jumlah byte yang ditransfer. Bidang ini tidak dapat diperluas oleh pengemudi.
Nilai kembali
Tidak ada
Keterangan
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Untuk permintaan baca, tulis, dan IOCTL, driver perlu memanggil WdfRequestCompleteWithInformation
Untuk permintaan transfer non-data, memanggil WdfRequestComplete sebagai gantinya adalah opsi.
Memanggil WdfRequestCompleteWithInformation setara dengan memanggil WdfRequestSetInformation lalu memanggil WdfRequestComplete.
Setelah panggilan ke WdfRequestCompleteWithInformation kembali, handel permintaan tidak lagi valid kecuali driver telah memanggil WdfObjectReference untuk menambahkan satu atau beberapa jumlah referensi tambahan ke objek permintaan. Perhatikan bahwa setelah WdfRequestCompleteWithInformation kembali, driver tidak boleh mencoba mengakses struktur IRP WDM terkait, bahkan jika telah disebut WdfObjectReference.
Ketika driver Anda memanggil WdfRequestCompleteWithInformation, kerangka kerja menyediakan nilai default yang digunakan sistem untuk meningkatkan prioritas run-time utas yang meminta operasi I/O. Untuk informasi tentang nilai peningkatan prioritas default, lihat Menentukan Peningkatan Prioritas Saat Menyelesaikan Permintaan I/O. Driver Anda dapat memanggil WdfRequestCompleteWithPriorityBoost untuk mengambil alih nilai peningkatan prioritas default.
Untuk informasi selengkapnya tentang memanggil WdfRequestCompleteWithInformation, lihat Menyelesaikan Permintaan I/O.
Untuk contoh kode yang menunjukkan cara menggunakan WdfRequestCompleteWithInformation untuk mengambil jumlah byte yang disalin, lihat sampel driver VirtualSerial2.
Contoh
Contoh kode berikut menunjukkan bagaimana driver untuk perangkat USB mungkin memanggil WdfRequestCompleteWithInformation dalam fungsi panggilan balik CompletionRoutine .
VOID
EvtRequestReadCompletionRoutine(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
IN WDFCONTEXT Context
)
{
NTSTATUS status;
size_t bytesRead = 0;
PWDF_USB_REQUEST_COMPLETION_PARAMS usbCompletionParams;
UNREFERENCED_PARAMETER(Target);
UNREFERENCED_PARAMETER(Context);
status = CompletionParams->IoStatus.Status;
usbCompletionParams = CompletionParams->Parameters.Usb.Completion;
bytesRead = usbCompletionParams->Parameters.PipeRead.Length;
if (NT_SUCCESS(status)){
TraceEvents(
TRACE_LEVEL_INFORMATION,
DBG_READ,
"Number of bytes read: %I64d\n",
(INT64)bytesRead
);
} else {
TraceEvents(
TRACE_LEVEL_ERROR,
DBG_READ,
"Read failed - request status 0x%x UsbdStatus 0x%x\n",
status,
usbCompletionParams->UsbdStatus
);
}
WdfRequestCompleteWithInformation(
Request,
status,
bytesRead
);
return;
}
Persyaratan
Lihat juga
WDF_USB_REQUEST_COMPLETION_PARAMS
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