Хотелось бы получить консультацию по следующему вопросу:
в каких случаях IoCompleteRequest самостоятельно освобождает IRP?
В DDK написано что если я создаю IRP путем вызова IoAllocateIrp or
IoBuildAsynchronousFsdRequest то я обязан задать для этого IRP-a
CompletionRoutine и в ней вызвать IoFreeIrp.
А для IRP-a созданного путем вызова IoBuildSynchronousFsdRequest
этого делать не нужно, хотя эта функция не более чем обертка над
IoBuildAsynchronousFsdRequest.
В DDK есть примеры создания IRP-a и тем и другим способом — в целом
они подтверждают то что написано в DDK... Мне не понятно чем отличаются
IRP-ы созданные этими функциями.