IoCsqInsertIrpEx-Funktion (wdm.h)
Die IoCsqInsertIrpEx Routine fügt ein IRP in die abbruchsichere IRP-Warteschlange des Treibers ein.
Syntax
NTSTATUS IoCsqInsertIrpEx(
[in, out] PIO_CSQ Csq,
[in, out] PIRP Irp,
[out, optional] PIO_CSQ_IRP_CONTEXT Context,
[in, optional] PVOID InsertContext
);
Parameter
[in, out] Csq
Zeiger auf die IO_CSQ Struktur für die abbruchsichere IRP-Warteschlange des Treibers. Diese Struktur muss durch IoCsqInitialize oder IoCsqInitializeEx-initialisiert worden sein.
[in, out] Irp
Zeiger auf das IRP, das in die Warteschlange eingereiht werden soll.
[out, optional] Context
Zeiger auf eine IO_CSQ_IRP_CONTEXT Struktur. IoCsqInsertIrpEx initialisiert diese Struktur mit Kontextinformationen für das eingefügte IRP. Der Treiber übergibt diesen Wert an IoCsqRemoveIrp, um das IRP aus der Warteschlange zu löschen. Kontext- kann NULL- sein, wenn der Treiber nicht IoCsqRemoveIrp- verwendet, um dieses IRP aus der Warteschlange zu entfernen.
[in, optional] InsertContext
Zeiger auf einen vom Treiber definierten Kontextwert. Dieser Parameter wird an die CsqInsertIrpEx Routine des Treibers übergeben, sofern er über eine verfügt. Andernfalls wird dieser Parameter ignoriert.
Rückgabewert
Wenn der parameter Csq mit IoCsqInitializeinitialisiert wurde, gibt IoCsqInsertIrpEx immer STATUS_SUCCESS zurück. Wenn Csq mit IoCsqInitializeExinitialisiert wurde, gibt IoCsqInsertIrpEx den Wert zurück, der von der CsqInsertIrpEx- Routine des Treibers zurückgegeben wurde.
Bemerkungen
IoCsqInsertIrpEx verwendet die Verteilerroutinen der Warteschlange zum Einfügen des IRP. Die IoCsqInsertIrpEx Routine:
- Ruft die CsqAcquireLock Routine der Warteschlange auf, um die Warteschlange zu sperren.
- Wenn die IO_CSQ Struktur der Warteschlange durch IoCsqInitializeinitialisiert wurde, ruft IoCsqInsertIrpEx die CsqInsertIrp Routine der Warteschlange auf, um das IRP einzufügen. Wenn die IO_CSQ Struktur der Warteschlange von IoCsqInitializeExinitialisiert wurde, ruft IoCsqInsertIrpEx die CsqInsertIrpEx-Routine der Warteschlange auf, um die IRP einzufügen, und übergibt den parameter InsertContext als InsertContext Parameter von CsqInsertIrpEx.
- Ruft die CsqReleaseLock Routine der Warteschlange auf, um die Warteschlange zu entsperren.
Weitere Informationen finden Sie unter Cancel-Safe IRP Queues.
Beachten Sie, dass IoCsq-Xxx- Routinen die DriverContext-[3] des IRP-Elements verwenden, um IRP-Kontextinformationen zu enthalten. Treiber, die diese Routinen verwenden, um IRPs in die Warteschlange zu stellen, müssen dieses Mitglied nicht verwenden.
Aufrufer von IoCsqInsertIrpEx- müssen bei einem IRQL-<= DISPATCH_LEVEL ausgeführt werden. Die Rückrufroutinen des Treibers müssen bei diesem IRQL ordnungsgemäß funktionieren.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar in Windows Server 2003 und höheren Versionen des Windows-Betriebssystems. Die Routine ist auch in der Csq.lib-Bibliothek verfügbar, die im Lieferumfang des Windows Driver Kit (WDK) und des Driver Development Kit (DDK) für Windows Server 2003 enthalten ist. Treiber, die auch unter Windows XP, Windows 2000 und Windows 98/Me funktionieren müssen, können stattdessen mit "Csq.lib" verknüpft werden, um die Routine zu verwenden. |
Zielplattform- | Universal |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise") |
DDI-Complianceregeln | IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), Entfernen, RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl() wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm) |