Fungsi WdfRequestForwardToParentDeviceIoQueue (wdfrequest.h)

[Hanya berlaku untuk KMDF]

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

Sintaksis

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 pemanggil.

Mengembalikan nilai

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

Mengembalikan 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 menjamin kemajuan maju 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.

Komentar

Sebelum driver dapat memanggil WdfRequestForwardToParentDeviceIoQueue, driver harus memanggil WdfPdoInitAllowForwardingRequestToParent.

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

Jika driver Anda akan memanggil WdfRequestForwardToParentDeviceIoQueue untuk mengantrekan 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 memanggil WdfDeviceInitSetRequestAttributes untuk objek permintaan 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 lupa untuk semua permintaan I/O yang diantrekan. Oleh karena itu, ketahuilah bahwa pada saat kerangka kerja menghapus objek permintaan yang diantrekan kembali, kerangka kerja mungkin telah menghapus perangkat anak yang awalnya menerima objek permintaan. Dengan demikian, driver tidak boleh menggunakan fungsi EvtCleanupCallback atau EvtDestroyCallback objek permintaan antrean ulang untuk mengakses sumber daya perangkat anak, karena sumber daya mungkin dihapus sebelum EvtCleanupCallback atau EvtDestroyCallback fungsi 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

Syarat Nilai
Platform Target 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 DriverBuat(kmdf)

Lihat juga

WdfPdoInitAllowForwardingRequestToParent