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.