Bagikan melalui


Fungsi WdfUsbTargetPipeSendUrbSynchronously (wdfusb.h)

[Hanya berlaku untuk KMDF]

Metode WdfUsbTargetPipeSendUrbSynchronously membangun permintaan USB untuk pipa USB tertentu, menggunakan parameter permintaan yang dijelaskan URB yang ditentukan.

Sintaksis

NTSTATUS WdfUsbTargetPipeSendUrbSynchronously(
  [in]           WDFUSBPIPE                Pipe,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
  [in]           PURB                      Urb
);

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 NULL. Untuk informasi selengkapnya, lihat bagian Komentar 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 NULL. Untuk informasi selengkapnya, lihat bagian Komentar berikut ini.

[in] Urb

Penunjuk ke struktur URB yang diinisialisasi driver.

Jika driver sebelumnya disebut WdfUsbTargetDeviceCreateWithParameters untuk membuat UsbDevice, driver harus menggunakan WdfUsbTargetDeviceCreateUrb atau WdfUsbTargetDeviceCreateIsochUrb untuk membuat URB ini.

Mengembalikan nilai

WdfUsbTargetPipeSendUrbSynchronously mengembalikan nilai status penyelesaian target I/O jika operasi berhasil. Jika tidak, metode ini mungkin mengembalikan salah satu nilai berikut:

Mengembalikan kode Deskripsi
STATUS_INFO_LENGTH_MISMATCH
Ukuran struktur WDF_REQUEST_SEND_OPTIONS bahwa parameter RequestOptions yang ditentukan salah.
STATUS_INVALID_PARAMETER
Parameter yang tidak valid terdeteksi.
STATUS_INSUFFICIENT_RESOURCES
Memori tidak cukup tersedia.
STATUS_INVALID_DEVICE_REQUEST
IRQL penelepon tidak PASSIVE_LEVEL, atau permintaan I/O yang ditentukan sudah diantrekan ke target I/O.
STATUS_IO_TIMEOUT
Driver menyediakan nilai waktu habis dan permintaan tidak selesai dalam waktu yang dialokasikan.
STATUS_REQUEST_NOT_ACCEPTED
Paket permintaan I/O (IRP ) yang diwakili parameter Permintaan tidak menyediakan struktur IO_STACK_LOCATION yang cukup untuk memungkinkan driver meneruskan permintaan.
 

Metode ini juga dapat mengembalikan nilai NTSTATUS lainnya.

Pemeriksaan bug terjadi jika driver menyediakan handel objek yang tidak valid.

Komentar

Gunakan metode WdfUsbTargetPipeSendUrbSynchronously untuk mengirim permintaan USB secara sinkron. Untuk mengirim permintaan tersebut secara asinkron, gunakan WdfUsbTargetPipeFormatRequestForUrb, diikuti oleh WdfRequestSend.

Metode WdfUsbTargetPipeSendUrbSynchronously tidak kembali sampai permintaan selesai, kecuali driver menyediakan nilai batas waktu dalam struktur WDF_REQUEST_SEND_OPTIONS yang RequestOptions parameter menunjuk, atau kecuali kesalahan terdeteksi.

Kerangka kerja tidak memeriksa permintaan USB. Jika permintaan mengubah status pipa USB, kerangka kerja tidak akan mengetahui perubahan tersebut.

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 WdfUsbTargetPipeSendUrbSynchronously request metode.

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 driver Anda EvtDriverDeviceAdd untuk melakukan pra-alokasi objek permintaan untuk perangkat. Selain itu, utas driver lain dapat memanggil WdfRequestCancelSentRequest untuk membatalkan permintaan, jika perlu.
Driver Anda dapat menentukan parameter RequestOptionsNULL non-, apakah driver menyediakan parameter NULL non-atau parameter PermintaanNULL . Misalnya, Anda dapat menggunakan parameter RequestOptions untuk menentukan nilai waktu habis.

Untuk informasi tentang mendapatkan informasi status setelah permintaan I/O selesai, lihat Mendapatkan Informasi Penyelesaian.

Untuk informasi selengkapnya tentang metode WdfUsbTargetPipeSendUrbSynchronously metode dan target USB I/O, lihat Target I/O USB.

Contoh

Contoh kode berikut menginisialisasi URB dan mengirim URB ke pipa USB.

URB  urb;
PURB  pUrb = NULL;
NTSTATUS status;

pUrb = &urb;
pUrb->UrbHeader.Length = (USHORT) sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER);
pUrb->UrbHeader.Function = URB_FUNCTION_GET_CURRENT_FRAME_NUMBER;
pUrb->UrbGetCurrentFrameNumber.FrameNumber = 0; 

status = WdfUsbTargetPipeSendUrbSynchronously(
                                              Pipe,
                                              Request,
                                              NULL,
                                              pUrb
                                              );

Persyaratan

Syarat Nilai
Platform Target Universal
versi KMDF Minimum 1.0
Header wdfusb.h (termasuk Wdfusb.h)
Pustaka Wdf01000.sys (lihat Penerapan Versi Pustaka Kerangka Kerja.)
IRQL PASSIVE_LEVEL
aturan kepatuhan DDI DriverCreate(kmdf), IoctlReqs(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), SyncReqSend(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Lihat juga

WDF_REQUEST_SEND_OPTIONS

WdfRequestCancelSentRequest

WdfUsbInterfaceGetConfiguredPipe