Вот это кто-то сказал, а делать этого не стоит точно
Теперь немного другаю проблема...
Не понимаю, почему в моей completion routine регистрирую cancel routine, а сама cancel routine не вызывается?
Вот так это выглядит:
VOID TdiConnectCancelRoutine(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) {
DbgPrint("In TdiConnectCancelRoutine");
pIrp->IoStatus.Status = STATUS_CANCELLED;
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
}
NTSTATUS TdiConnectCompletionRoutine(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp, IN PVOID pContext) {
PTDI_CONNECT_COMPLETION_ROUTINE_CONTEXT pTdiConnCompletionRoutineContext = (PTDI_CONNECT_COMPLETION_ROUTINE_CONTEXT)pContext;
ExFreePool(pTdiConnCompletionRoutineContext->pClientConnToSrvInfo);
ExFreePool(pTdiConnCompletionRoutineContext);
if( pIrp->IoStatus.Status != STATUS_SUCCESS ) {
//DbgPrint("In TdiConnectCompletionRoutine STATUS = 0x%08X", (ULONG)pIrp->IoStatus.Status);
IoSetCancelRoutine(pIrp, TdiConnectCancelRoutine);
}
return STATUS_SUCCESS;
}