Fungsi WdfRequestForwardToParentDeviceIoQueue (wdfrequest.h)

[Berlaku untuk KMDF saja]

Metode WdfRequestForwardToParentDeviceIoQueue mengantrekan ulang permintaan I/O dari antrean I/O perangkat anak ke antrean I/O tertentu dari perangkat induk anak.

Sintaks

NTSTATUS WdfRequestForwardToParentDeviceIoQueue(
  [in] WDFREQUEST                   Request,
  [in] WDFQUEUE                     ParentDeviceQueue,
  [in] PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions
);

Parameter

[in] Request

Handel ke objek permintaan kerangka kerja.

[in] ParentDeviceQueue

Handel ke objek antrean kerangka kerja.

[in] ForwardOptions

Penunjuk ke struktur WDF_REQUEST_FORWARD_OPTIONS yang dialokasikan penelepon.

Nilai kembali

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

Menampilkan kode Deskripsi
STATUS_INFO_LENGTH_MISMATCH
Ukuran struktur WDF_REQUEST_FORWARD_OPTIONS yang disediakan tidak valid.
STATUS_INVALID_PARAMETER
Anggota struktur WDF_REQUEST_FORWARD_OPTIONS yang disediakan berisi nilai yang tidak valid.
STATUS_INVALID_DEVICE_REQUEST
Nilai ini dikembalikan jika salah satu hal berikut ini terjadi:
  • Driver tidak mendapatkan permintaan I/O dari antrean I/O.
  • Antrean I/O sumber dan tujuan sama.
  • Antrean I/O yang ditentukan bukan milik perangkat induk.
  • Driver telah mengaktifkan kemajuan penerusan terjamin dan permintaan I/O yang ditentukan dicadangkan untuk situasi memori rendah.
  • Driver tidak memanggil WdfPdoInitAllowForwardingRequestToParent.
STATUS_WDF_BUSY
Antrean I/O yang ditentukan tidak menerima permintaan baru.
 

Metode ini mungkin juga mengembalikan nilai NTSTATUS lainnya.

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

Keterangan

Sebelum driver dapat memanggil WdfRequestForwardToParentDeviceIoQueue, driver harus memanggil WdfPdoInitAllowForwardingRequestToParent.

Driver harus menggunakan metode yang sama untuk mengakses buffer data (buffered, direct, atau tidak keduanya) untuk perangkat induk dan perangkat anak.

Jika driver Anda akan memanggil WdfRequestForwardToParentDeviceIoQueue untuk mengantre ulang permintaan I/O, driver tidak boleh menggunakan objek permintaan sebagai induk objek kerangka kerja lainnya, seperti objek timer atau objek item kerja.

Jika driver Anda telah memanggil WdfDeviceInitSetRequestAttributes untuk menentukan ruang konteks untuk objek permintaan perangkat induk , kerangka kerja tidak menambahkan ruang konteks ini untuk meminta objek yang diterima driver dalam antrean perangkat anak. Driver dapat memanggil WdfObjectAllocateContext untuk menambahkan ruang konteks ke objek permintaan sebelum driver memanggil WdfRequestForwardToParentDeviceIoQueue. Di sisi lain, jika driver yang disebut WdfDeviceInitSetRequestAttributes untuk objek permintaan perangkat anak , dan jika objek permintaan perangkat induk menggunakan ruang konteks yang sama dengan atau lebih kecil dari ruang konteks perangkat anak, driver dapat menggunakan ruang konteks objek permintaan tanpa memanggil WdfObjectAllocateContext.

Saat ini, driver harus menggunakan opsi kirim dan lupakan untuk semua permintaan I/O yang diantrekan kembali. Oleh karena itu, ketahuilah bahwa pada saat kerangka kerja menghapus objek permintaan yang diantrekan kembali, mungkin telah menghapus perangkat anak yang awalnya menerima objek permintaan. Dengan demikian, driver tidak boleh menggunakan fungsi EvtCleanupCallback atau EvtDestroyCallback dari objek permintaan yang diantrekan kembali untuk mengakses sumber daya perangkat anak, karena sumber daya mungkin dihapus sebelum fungsi EvtCleanupCallback atau EvtDestroyCallback berjalan.

Untuk informasi selengkapnya tentang WdfRequestForwardToParentDeviceIoQueue, lihat Mengantre ulang Permintaan I/O.

Contoh

Contoh kode berikut pertama-tama menentukan perangkat induk perangkat yang menerima permintaan I/O, lalu mengantrekan ulang permintaan I/O ke antrean I/O default perangkat induk.

WDFDEVICE device, parentDevice;
WDF_REQUEST_FORWARD_OPTIONS forwardOptions;
NTSTATUS status;

device = WdfIoQueueGetDevice(WdfRequestGetIoQueue(Request));
parentDevice = WdfPdoGetParent(device);

WDF_REQUEST_FORWARD_OPTIONS_INIT(&forwardOptions);
status = WdfRequestForwardToParentDeviceIoQueue(
             Request,
             WdfDeviceGetDefaultQueue(parentDevice),
             &forwardOptions
             );
if (!NT_SUCCESS(status)) {
    WdfRequestComplete(
                       Request,
                       status
                       );
  }

Persyaratan

Persyaratan Nilai
Target Platform Universal
Versi KMDF minimum 1.9
Header wdfrequest.h (termasuk Wdf.h)
Pustaka Wdf01000.sys (lihat Penerapan Versi Pustaka Kerangka Kerja.)
IRQL <=DISPATCH_LEVEL
Aturan kepatuhan DDI DriverCreate(kmdf)

Lihat juga

WdfPdoInitAllowForwardingRequestToParent