The VirtIO BLK device does not have special reset events/routines like the VirtIO SCSI device (controlq command VIRTIO_SCSI_T_TMF_LOGICAL_UNIT_RESET), but Windows requires to have some mechanism to fix a device when it hangs. The most appropriate way is perform a full VirtIO reset and initialization flow based on spec. The following flow is implemented: Reset VirtIO device (virtio_device_reset) Delete VirtIO queues (virtio_delete_queues) Clean up all device memory (virtio_device_shutdown) Complete all pending SRBs (in guest, CompletePendingRequestsOnReset) Perform VirtIO device initialization (virtio_device_initialize, virtio_find_queues, etc) Note: We don't pause StorPort because the port driver pauses all device IO queues for the adapter and then calls the HwStorResetBus routine https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/storport/nc-storport-hw_reset_bus Note: We cannot just complete all pending SRBs and continue, because this memory will be still in use by the device and free in Windows. As a result, we got use-after-free when the device completes the request and sends it back to Windows. This may cause a memory corruption, as Windows may already have reused the memory.