Go to the source code of this file.
Defines | |
| #define | QueueIsStalled(_Queue_) (_Queue_->IsStalled ? 1 : 0) |
| #define | QueueIsDropping(_Queue_) (_Queue_->IsDropping ? 1 : 0) |
Typedefs | |
| typedef NTSTATUS(* | PCBMDRIVER_STARTIO )(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) |
| typedef QUEUE | QUEUE |
| A QUEUE object A QUEUE object is an object which can be used to queue IRPs for processing. This QUEUE object is optimized for being polled from an own worker thread. Anyway, a concept called FastStart is also implemented, which allows some IRPs to be completed immediately, without being queued, if no IRP is executed yet and the caller has stated that he wants this IRP to be started fast if possible. | |
| typedef QUEUE * | PQUEUE |
| A QUEUE object A QUEUE object is an object which can be used to queue IRPs for processing. This QUEUE object is optimized for being polled from an own worker thread. Anyway, a concept called FastStart is also implemented, which allows some IRPs to be completed immediately, without being queued, if no IRP is executed yet and the caller has stated that he wants this IRP to be started fast if possible. | |
Functions | |
| VOID | QueueInit (PQUEUE Queue, PCBMDRIVER_STARTIO DriverStartIo) |
| Initialize a QUEUE object. | |
| NTSTATUS | QueueCompleteIrp (PQUEUE Queue, PIRP Irp, NTSTATUS StatusCode, ULONG_PTR Information) |
| Complete an IRP which is on a QUEUE. | |
| NTSTATUS | QueueStartPacket (PQUEUE Queue, PIRP Irp, BOOLEAN FastStart, PDEVICE_OBJECT Fdo) |
| Insert an IRP into a QUEUE object. | |
| NTSTATUS | QueuePoll (PQUEUE Queue, PDEVICE_OBJECT Fdo) |
| Poll the QUEUE. | |
| NTSTATUS | QueueSignal (PQUEUE Queue) |
| Signal to the QUEUE need for processing. | |
| NTSTATUS | QueueCleanup (PQUEUE Queue, PFILE_OBJECT FileObject) |
| Process an IRP_MJ_CLEANUP on the QUEUE. | |
| BOOLEAN | QueueShouldCancelCurrentIrp (PQUEUE Queue) |
| Should the current IRP be cancelled? | |
**************************************************************
Definition in file queue.h.
|
|
Return: Is the queue currently dropping |
|
|
Return: Is queue currently stalled |
|
|
This type specifies a StartIo function for the Queue |
|
||||||||||||
|
Process an IRP_MJ_CLEANUP on the QUEUE. Whenever an IRP_MJ_CLEANUP is received by the driver, it has to complete all IRPs that belong to the given file object. This function takes all appropriate IRPs out of the QUEUE and completes them.
Definition at line 999 of file queue.c. References FUNC_ENTER, QUEUE::IrpQueue, and QueueCompleteIrp(). Referenced by cbm_cleanup(). |
|
||||||||||||||||||||
|
Complete an IRP which is on a QUEUE. This function completes an IRP which is on a QUEUE object
Definition at line 757 of file queue.c. References QUEUE::CurrentIrp, DBG_ASSERT, FUNC_ENTER, and PERF_EVENT_COMPLETEIRP. Referenced by cbm_cleanup(), cbm_createopenclose(), cbm_devicecontrol(), cbm_execute_close(), cbm_execute_createopen(), cbm_execute_devicecontrol(), cbm_execute_readwrite(), cbm_readwrite(), QueueCleanup(), and QueueStartPacket(). |
|
||||||||||||
|
Initialize a QUEUE object. This function initializes a QUEUE object before it can be used by the other Queue...() functions.
Definition at line 389 of file queue.c. References QUEUE::DriverStartIo, FUNC_ENTER, FUNC_LEAVE, QUEUE::IrpListHead, QUEUE::IrpListSpinlock, QUEUE::IrpQueue, QUEUE::IsDropping, QUEUE::IsStalled, and QUEUE::NotEmptyEvent. Referenced by AddDeviceCommonInit(). |
|
||||||||||||
|
Poll the QUEUE. This function polls the QUEUE object. If there is an IRP in there, the IRP is executed by calling the specified DriverStartIo() function. If there is no IRP, this function just sleeps until there is one.
Definition at line 817 of file queue.c. References QUEUE::CurrentIrp, DBG_ASSERT, QUEUE::DriverStartIo, FUNC_ENTER, and QUEUE::NotEmptyEvent. Referenced by cbm_thread(). |
|
|
Should the current IRP be cancelled? Find out if the caller of the current IRP is not interested anymore in the result.
Definition at line 1042 of file queue.c. References QUEUE::CurrentIrp, FUNC_ENTER, and FUNC_LEAVE_BOOLEAN. Referenced by cbmiec_i_raw_read(), cbmiec_i_raw_write(), cbmiec_iec_wait(), and cbmiec_wait_for_listener(). |
|
|
Signal to the QUEUE need for processing. This function signals the QUEUE object that there is something to be processed. In general, this means that some IRP has been queued.
Definition at line 901 of file queue.c. References FUNC_ENTER, and QUEUE::NotEmptyEvent. Referenced by cbm_stop_thread(), and QueueStartPacket(). |
|
||||||||||||||||||||
|
Insert an IRP into a QUEUE object. This function inserts an IRP into the given QUEUE object.
The return value can be directly used in the dispatch function which calls QueueStartPacket() as the return status. Definition at line 468 of file queue.c. References QUEUE::CurrentIrp, DBG_ASSERT, QUEUE::DriverStartIo, QUEUE::DroppingReturnStatus, FUNC_ENTER, QUEUE::IrpQueue, QUEUE::IsDropping, QueueCompleteIrp(), and QueueSignal(). Referenced by cbm_createopenclose(), cbm_devicecontrol(), and cbm_readwrite(). |
1.4.2