Да, пожалуйста: Вот инлайн функция Код (Text): __drv_maxIRQL(DISPATCH_LEVEL) FORCEINLINE VOID IoSetCompletionRoutine( __in PIRP Irp, __in_opt PIO_COMPLETION_ROUTINE CompletionRoutine, __in_opt __drv_aliasesMem PVOID Context, __in BOOLEAN InvokeOnSuccess, __in BOOLEAN InvokeOnError, __in BOOLEAN InvokeOnCancel ) { PIO_STACK_LOCATION irpSp; ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE ); irpSp = IoGetNextIrpStackLocation(Irp); irpSp->CompletionRoutine = CompletionRoutine; irpSp->Context = Context; irpSp->Control = 0; if (InvokeOnSuccess) { irpSp->Control = SL_INVOKE_ON_SUCCESS; } if (InvokeOnError) { irpSp->Control |= SL_INVOKE_ON_ERROR; } if (InvokeOnCancel) { irpSp->Control |= SL_INVOKE_ON_CANCEL; } } а вот кусок на асме Код (Text): .text:000117F8 mov eax, dword ptr [ebx+IRP.Tail.Overlay.anonymous_1.anonymous_0] .text:000117FB sub eax, 24h .text:000117FE lea ecx, [ebp+Event] .text:00011801 mov [eax+IO_STACK_LOCATION.Context], ecx .text:00011809 mov [eax+IO_STACK_LOCATION.CompletionRoutine], offset sub_10F4A .text:00011810 mov [eax+IO_STACK_LOCATION.Control], 0E0h
Vam Я в теме, просто спросил примеры для данного конкретного случая, потому что ТС вроде обмолвился об оптимизации... Короче было взаимное недопонимание, теперь все ясно.