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.