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.