Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
[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 |
|---|---|
|
Ukuran struktur WDF_REQUEST_FORWARD_OPTIONS yang disediakan tidak valid. |
|
Anggota struktur WDF_REQUEST_FORWARD_OPTIONS yang disediakan berisi nilai yang tidak valid. |
|
Nilai ini dikembalikan jika salah satu hal berikut ini terjadi:
|
|
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) |