Fungsi WdfUsbTargetPipeAbortSynchronously (wdfusb.h)
[Berlaku untuk KMDF dan UMDF]
Metode WdfUsbTargetPipeAbortSynchronously membangun permintaan pembatalan dan mengirimkannya secara sinkron ke pipa USB tertentu.
Sintaks
NTSTATUS WdfUsbTargetPipeAbortSynchronously(
[in] WDFUSBPIPE Pipe,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);
Parameter
[in] Pipe
Handel ke objek pipa kerangka kerja yang diperoleh dengan memanggil WdfUsbInterfaceGetConfiguredPipe.
[in, optional] Request
Handel ke objek permintaan kerangka kerja. Parameter ini bersifat opsional dan dapat berupa NULL. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
[in, optional] RequestOptions
Penunjuk ke struktur WDF_REQUEST_SEND_OPTIONS yang dialokasikan pemanggil yang menentukan opsi untuk permintaan. Penunjuk ini bersifat opsional dan dapat berupa NULL. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.
Nilai kembali
WdfUsbTargetPipeAbortSynchronously mengembalikan nilai status penyelesaian target I/O jika operasi berhasil. Jika tidak, metode ini dapat mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
|
Ukuran struktur WDF_REQUEST_SEND_OPTIONS yang ditentukan parameter RequestOptions salah. |
|
Handel yang tidak valid terdeteksi. |
|
Memori tidak cukup tersedia. |
|
IRQL penelepon tidak PASSIVE_LEVEL, atau permintaan I/O yang ditentukan sudah diantrekan ke target I/O. |
|
Driver memberikan nilai waktu habis dan permintaan tidak selesai dalam waktu yang dialokasikan. |
Metode ini juga mungkin mengembalikan nilai NTSTATUS lainnya.
Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.
Keterangan
Gunakan metode WdfUsbTargetPipeAbortSynchronously untuk mengirim permintaan pembatalan USB secara sinkron. Untuk mengirim permintaan tersebut secara asinkron, gunakan WdfUsbTargetPipeFormatRequestForAbort, diikuti oleh WdfRequestSend.
Permintaan pembatalan USB menyebabkan target I/O driver membatalkan semua permintaan I/O yang telah dikirim ke pipa. Ketika driver memanggil WdfUsbTargetPipeAbortSynchronously, kerangka kerja mengirimkan permintaan URB_FUNCTION_ABORT_PIPE ke target I/O. Untuk informasi selengkapnya tentang membatalkan operasi pada pipa USB (juga disebut "membatalkan pipa"), lihat spesifikasi USB.
Metode WdfUsbTargetPipeAbortSynchronously tidak kembali sampai permintaan selesai, kecuali driver menyediakan nilai waktu habis dalam struktur WDF_REQUEST_SEND_OPTIONS parameter RequestOptions, atau kecuali kesalahan terdeteksi.
Anda dapat meneruskan permintaan I/O yang diterima driver Anda dalam antrean I/O, atau Anda dapat membuat dan mengirim permintaan baru.
Untuk meneruskan permintaan I/O yang diterima driver Anda dalam antrean I/O, tentukan handel permintaan yang diterima untuk parameter Permintaan metode WdfUsbTargetPipeAbortSynchronously.
Untuk membuat dan mengirim permintaan baru, berikan handel permintaan NULL untuk parameter Permintaan , atau buat objek permintaan baru dan berikan handelnya:
- Jika Anda menyediakan handel permintaan NULL , kerangka kerja menggunakan objek permintaan internal. Teknik ini mudah digunakan, tetapi driver tidak dapat membatalkan permintaan.
- Jika Anda memanggil WdfRequestCreate untuk membuat satu atau beberapa objek permintaan, Anda dapat menggunakan kembali objek permintaan ini dengan memanggil WdfRequestReuse. Teknik ini memungkinkan fungsi panggilan balik EvtDriverDeviceAdd driver Anda untuk melakukan pra-alokasi objek permintaan untuk perangkat. Selain itu, utas driver lain dapat memanggil WdfRequestCancelSentRequest untuk membatalkan permintaan, jika perlu.
Untuk informasi tentang mendapatkan informasi status setelah permintaan I/O selesai, lihat Mendapatkan Informasi Penyelesaian.
Untuk informasi selengkapnya tentang metode WdfUsbTargetPipeAbortSynchronously dan target I/O USB, lihat Target I/O USB.
Contoh
Contoh kode berikut mengirimkan permintaan pembatalan ke semua pipa yang dikonfigurasi untuk antarmuka perangkat USB.
UCHAR i;
ULONG count;
NTSTATUS status;
PDEVICE_CONTEXT pDevContext;
pDevContext = GetDeviceContext(Device);
count = WdfUsbInterfaceGetNumConfiguredPipes(
pDevContext->UsbInterface
);
for (i = 0; i < count; i++) {
WDFUSBPIPE pipe;
pipe = WdfUsbInterfaceGetConfiguredPipe(
pDevContext->UsbInterface,
i,
NULL
);
status = WdfUsbTargetPipeAbortSynchronously(
pipe,
WDF_NO_HANDLE,
NULL
);
if (!NT_SUCCESS(status)) {
break;
}
}
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Universal |
Versi KMDF minimum | 1,0 |
Versi UMDF minimum | 2.0 |
Header | wdfusb.h (termasuk Wdfusb.h) |
Pustaka | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
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