Fungsi WdfUsbTargetPipeConfigContinuousReader (wdfusb.h)

[Berlaku untuk KMDF dan UMDF]

Metode WdfUsbTargetPipeConfigContinuousReader mengonfigurasi kerangka kerja untuk terus membaca dari pipa USB tertentu.

Sintaks

NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
  [in] WDFUSBPIPE                        Pipe,
  [in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);

Parameter

[in] Pipe

Handel ke objek pipa kerangka kerja yang diperoleh dengan memanggil WdfUsbInterfaceGetConfiguredPipe.

[in] Config

Penunjuk ke struktur WDF_USB_CONTINUOUS_READER_CONFIG yang dialokasikan penelepon.

Nilai kembali

WdfUsbTargetPipeConfigContinuousReader mengembalikan STATUS_SUCCESS jika operasi berhasil. Jika tidak, metode ini dapat mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_INFO_LENGTH_MISMATCH
Ukuran struktur WDF_USB_CONTINUOUS_READER_CONFIG yang ditentukan parameter Konfigurasi salah.
STATUS_INVALID_PARAMETER
Parameter yang tidak valid terdeteksi.
STATUS_INSUFFICIENT_RESOURCES
Memori tidak cukup tersedia.
STATUS_INVALID_DEVICE_REQUEST
Tipe pipa tidak valid.
STATUS_INTEGER_OVERFLOW
Anggota HeaderLength, TransferLength, atau TrailerLength dari struktur WDF_USB_CONTINUOUS_READER_CONFIG bahwa parameter Config menentukan ukuran yang terlalu besar atau tidak valid.
STATUS_INVALID_BUFFER_SIZE
Ukuran buffer baca bukan kelipatan ukuran paket maksimum pipa.
 

Untuk daftar nilai pengembalian lain yang mungkin dikembalikan oleh metode WdfUsbTargetPipeConfigContinuousReader , lihat Kesalahan Pembuatan Objek Kerangka Kerja.

Metode ini juga mungkin mengembalikan nilai NTSTATUS lainnya.

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

Keterangan

Anda dapat mengonfigurasi pembaca berkelanjutan untuk pipa massal atau pipa interupsi. Pipa harus memiliki titik akhir input.

Setelah memanggil WdfUsbTargetPipeConfigContinuousReader untuk mengonfigurasi pembaca berkelanjutan, driver Anda harus memanggil WdfIoTargetStart untuk memulai pembaca. Untuk menghentikan pembaca, driver harus memanggil WdfIoTargetStop.

Biasanya, driver memanggil WdfUsbTargetPipeConfigContinuousReader dari dalam fungsi panggilan balik EvtDevicePrepareHardware . Driver harus memanggil WdfIoTargetStart dari dalam fungsi panggilan balik EvtDeviceD0Entry dan harus memanggil WdfIoTargetStop dari dalam fungsi panggilan balik EvtDeviceD0Exit-nya .

Setiap kali target I/O pipa berhasil menyelesaikan permintaan baca, kerangka kerja memanggil fungsi panggilan balik EvtUsbTargetPipeReadComplete driver. Jika target I/O melaporkan kegagalan saat memproses permintaan, kerangka kerja memanggil fungsi panggilan balik EvtUsbTargetPipeReadersFailed driver setelah semua permintaan baca selesai. (Oleh karena itu, fungsi panggilan balik EvtUsbTargetPipeReadComplete tidak akan dipanggil saat fungsi panggilan balik EvtUsbTargetPipeReadersFailed dijalankan).

Jika Anda tidak menyediakan panggilan balik EvtUsbTargetPipeReadersFailed opsional, kerangka kerja merespons upaya baca yang gagal dengan mengirim permintaan baca lain. Oleh karena itu, jika bus dalam keadaan tidak menerima bacaan, kerangka kerja terus mengirim permintaan baru untuk pulih dari pembacaan yang gagal.

Setelah driver memanggil WdfUsbTargetPipeConfigContinuousReader, driver tidak dapat menggunakan WdfUsbTargetPipeReadSynchronously atau WdfRequestSend untuk mengirim permintaan I/O ke pipa kecuali pembaca berkelanjutan telah dihentikan. Untuk menghentikan pembaca, driver dapat memanggil WdfIoTargetStop atau mengembalikan FALSE dari fungsi panggilan balik EvtUsbTargetPipeReadersFailed . Jika driver memanggil WdfUsbTargetPipeReadSynchronously saat pembaca dihentikan, driver harus mengatur bendera WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE di anggota Bendera parameter RequestOptions . Jika tidak, permintaan akan ditunda hingga target dimulai ulang.

Kerangka kerja menetapkan bendera USBD_SHORT_TRANSFER_OK di URB internalnya. Mengatur bendera ini memungkinkan paket terakhir transfer data menjadi kurang dari ukuran paket maksimum.

Untuk informasi selengkapnya tentang metode WdfUsbTargetPipeConfigContinuousReader dan target I/O USB, lihat Membaca dari Pipa.

Contoh

Contoh kode berikut menginisialisasi struktur WDF_USB_CONTINUOUS_READER_CONFIG dan memanggil WdfUsbTargetPipeConfigContinuousReader.

WDF_USB_CONTINUOUS_READER_CONFIG  contReaderConfig;
NTSTATUS  status;

WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
                                      &contReaderConfig,
                                      OsrFxEvtUsbInterruptPipeReadComplete,
                                      DeviceContext,
                                      sizeof(UCHAR)
                                      );
status = WdfUsbTargetPipeConfigContinuousReader(
                                      Pipe,
                                      &contReaderConfig
                                      );

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 <=DISPATCH_LEVEL
Aturan kepatuhan DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbContReader(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf)

Lihat juga

EvtDeviceD0Entry

EvtDeviceD0Exit

EvtDevicePrepareHardware

EvtUsbTargetPipeReadComplete

EvtUsbTargetPipeReadersFailed

URB

WDF_USB_CONTINUOUS_READER_CONFIG

WDF_USB_CONTINUOUS_READER_CONFIG_INIT

WdfIoTargetStart

WdfIoTargetStop

WdfUsbInterfaceGetConfiguredPipe