11.1.2 Returns from DriverControl Routines
An AdapterControl or ControllerControl routine must return a value of type IO_ALLOCATION_ACTION, defined as follows:
typedef enum _IO_ALLOCATION_ACTION {
KeepObject,
DeallocateObject,
DeallocateObjectKeepRegisters
} IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
The value DeallocateObjectKeepRegisters is meaningful only for a driver that uses packet-based busmaster DMA.
If a ControllerControl routine completes an IRP or if it can set up an operation, such as a disk seek, for a target device object (disk) that could be overlapped with an operation for another device object, it should return DeallocateObject. Otherwise, it should return KeepObject.