Bagikan melalui


Fungsi IoMarkIrpPending (wdm.h)

Rutinitas IoMarkIrpPending menandai IRP yang ditentukan, menunjukkan bahwa rutinitas pengiriman driver kemudian dikembalikan STATUS_PENDING karena pemrosesan lebih lanjut diperlukan oleh rutinitas driver lain.

Sintaks

void IoMarkIrpPending(
  [in, out] PIRP Irp
);

Parameter

[in, out] Irp

Arahkan ke IRP yang akan ditandai sebagai tertunda.

Nilai kembali

Tidak ada

Keterangan

Kecuali jika rutin pengiriman driver menyelesaikan IRP (dengan memanggil IoCompleteRequest) atau meneruskan IRP ke driver yang lebih rendah, itu harus memanggil IoMarkIrpPending dengan IRP. Jika tidak, manajer I/O mencoba menyelesaikan IRP segera setelah pengiriman rutin mengembalikan kontrol.

Setelah memanggil IoMarkIrpPending, rutinitas pengiriman harus mengembalikan STATUS_PENDING, bahkan jika beberapa rutin menyelesaikan IRP (dengan memanggil IoCompleteRequest) sebelum rutinitas pengiriman yang disebut IoMarkIrpPending kembali.

Jika driver mengantre IRP masuk, driver harus memanggil IoMarkIrpPending sebelum mengantre setiap IRP. Jika tidak, IRP dapat dihapus dari antrean, diselesaikan oleh rutinitas driver lain, dan dibebaskan oleh sistem sebelum panggilan ke IoMarkIrpPending terjadi, sehingga menyebabkan crash.

Jika driver menetapkan rutinitas IoCompletion untuk IRP dan kemudian meneruskan IRP ke driver yang lebih rendah, rutinitas IoCompletion harus memeriksa bendera IRP-PendingReturned>. Jika bendera diatur, rutinitas IoCompletion harus memanggil IoMarkIrpPending dengan IRP. Rutinitas IoCompletion tidak mengembalikan STATUS_PENDING. Untuk informasi selengkapnya, lihat Menerapkan Rutinitas IoCompletion.

Driver yang membuat IRP dan mengirimkannya ke tumpukan lain tidak boleh memanggil IoMarkIrpPending dalam rutinitas penyelesaiannya. Panggilan ini akan merusak header kumpulan alokasi berikutnya karena tidak ada lokasi tumpukan untuk driver tersebut.

Driver yang melewati IRP dan kemudian menunggu pada peristiwa tidak boleh menandai IRP tertunda. Sebaliknya, rutinitas IoCompletion-nya harus memberi sinyal peristiwa dan mengembalikan STATUS_MORE_PROCESSING_REQUIRED.

Jika driver Anda memanggil IoSkipCurrentIrpStackLocation, berhati-hatilah untuk tidak memodifikasi struktur IO_STACK_LOCATION dengan cara yang tidak sengaja dapat memengaruhi driver yang lebih rendah atau perilaku sistem sehubungan dengan driver tersebut. Secara khusus, driver Anda tidak boleh memodifikasi gabungan Parameter struktur IO_STACK_LOCATION, dan tidak boleh memanggil IoMarkIrpPending.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
IRQL Tingkat apa pun
Aturan kepatuhan DDI CompleteRequestStatusCheck(wdm), CompletionEventChecking(wdm), IrpCancelField(wdm), LowerDriverReturn(wdm), MarkDevicePower(wdm), MarkingInterlockedQueuedIrps(wdm), MarkingQueuedIrps(wdm), MarkIrpPending(wdm), MarkIrpPending2(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), PendedCompletedRequest3(wdm)

Lihat juga

IO_STACK_LOCATION

IRP

IoCompleteRequest

IoSkipCurrentIrpStackLocation

IoStartPacket