Помогите разобраться в IoCopyCurrentIrpStackLocationToNext

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 28 июл 2005.

  1. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Pomogite rzobrat'sya s IoCopyCurrentIrpStackLocationToNext.

    Eto macros:
    Код (Text):
    1.  
    2. #define IoCopyCurrentIrpStackLocationToNext( Irp ) { \
    3.     PIO_STACK_LOCATION irpSp; \
    4.     PIO_STACK_LOCATION nextIrpSp; \
    5.     irpSp = IoGetCurrentIrpStackLocation( (Irp) ); \
    6.     nextIrpSp = IoGetNextIrpStackLocation( (Irp) ); \
    7.     RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
    8.     nextIrpSp->Control = 0; }
    9.  


    A vot uchastok koda asm
    Код (Text):
    1.  
    2. PAGE:00001D98                 mov     esi, [ebx+60h]
    3. PAGE:00001D9B                 lea     edx, [esi-24h]
    4. PAGE:00001D9E                 push    7
    5. PAGE:00001DA0                 pop     ecx
    6. PAGE:00001DA1                 mov     edi, edx
    7. PAGE:00001DA3                 rep movsd
    8. PAGE:00001DA5                 mov     byte ptr [edx+3], 0
    9. PAGE:00001DA9                 mov     ecx, [ebx+60h]
    10. PAGE:00001DAC                 sub     ecx, 24h ; '$'
    11.  


    eto na skolko ya ponimayu IoGetNextIrpStackLocation( (Irp) ); , a gde je memcpy?



    PAGE:00001DA9 mov ecx, [ebx+60h]

    PAGE:00001DAC sub ecx, 24h ; '$'



    pomogite, a to u memya uje golova ne varit.

    Esli mojno, postrojnii razbor asm-koda.

    Zaranie spasibo.
     
  2. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Код (Text):
    1.  
    2. PAGE:00001D7A loc_1D7A:                               ; CODE XREF: SpyFsControlMountVolume(x,x)+C5j
    3. PAGE:00001D7A                 mov     ecx, [ebp+arg_0]
    4. PAGE:00001D7D                 mov     [eax], ecx
    5. PAGE:00001D7F                 mov     [eax+4], edi
    6. PAGE:00001D82                 mov     dword ptr [eax+0Ch], offset _SpyFsControlMountVolumeCompleteWorker@4 ; SpyFsControlMountVolumeCompleteWorker(x)
    7. PAGE:00001D89                 mov     [eax+10h], eax
    8. PAGE:00001D8C                 mov     [eax+14h], esi
    9. PAGE:00001D8F                 mov     [eax+18h], ebx
    10. PAGE:00001D92                 mov     ecx, [ebp+arg_4]
    11. PAGE:00001D95                 mov     [eax+1Ch], ecx
    12. PAGE:00001D98                 mov     esi, [ebx+60h]
    13. PAGE:00001D9B                 lea     edx, [esi-24h]
    14. PAGE:00001D9E                 push    7
    15. PAGE:00001DA0                 pop     ecx
    16. PAGE:00001DA1                 mov     edi, edx
    17. PAGE:00001DA3                 rep movsd
    18. PAGE:00001DA5                 mov     byte ptr [edx+3], 0
    19. [b]PAGE:00001DA9                 mov     ecx, [ebx+60h]
    20. PAGE:00001DAC                 sub     ecx, 24h ; '$'
    21. [/b]PAGE:00001DAF                 mov     dword ptr [ecx+1Ch], offset _SpyFsControlCompletion@12 ; SpyFsControlCompletion(x,x,x)
    22. PAGE:00001DB6                 mov     [ecx+20h], eax
    23. PAGE:00001DB9                 mov     byte ptr [ecx+3], 0E0h ; 'ð'
    24. PAGE:00001DBD
    25. PAGE:00001DBD loc_1DBD:                               ; CODE XREF: SpyFsControlMountVolume(x,x)+CEj
    26. PAGE:00001DBD                 mov     eax, [ebp+var_4]
    27. PAGE:00001DC0                 mov     ecx, [eax+4]
    28. PAGE:00001DC3                 mov     edx, ebx
    29. PAGE:00001DC5                 call    dword ptr ds:__imp_@IofCallDriver@8 ; __declspec(dllimport) IofCallDriver(x,x)
    30.  
    31.  
     
  3. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    a eto na C/C++ uchastok koda:
    Код (Text):
    1.  
    2.             completionContext->RecordList = recordList;
    3.  
    4.             ExInitializeWorkItem( &completionContext->WorkItem,
    5.                                   SpyFsControlMountVolumeCompleteWorker,
    6.                                   completionContext );
    7.             completionContext->DeviceObject = DeviceObject,
    8.             completionContext->Irp = Irp;
    9.             completionContext->NewDeviceObject = newDeviceObject;
    10.  
    11.             IoCopyCurrentIrpStackLocationToNext ( Irp );
    12.  
    13.             IoSetCompletionRoutine( Irp,
    14.                                     SpyFsControlCompletion,
    15.                                     completionContext,     //context parameter
    16.                                     TRUE,
    17.                                     TRUE,
    18.                                     TRUE );
    19.  
    20.             status = IoCallDriver( devExt->AttachedToDeviceObject, Irp );
    21.  
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Код (Text):
    1. PAGE:00001DA9 mov ecx, [ebx+60h]
    2. PAGE:00001DAC sub ecx, 24h ; '$'




    Да, это IoGetNextIrpStackLocation





    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: a gde je memcpy ]</font><!--color-->



    rep movsd





    <font color="gray][ LuckyDevil</font><!--color--><font color="gray]: Esli mojno, postrojnii razbor asm-koda. ]</font><!--color-->



    В KmdKit почаще заглядывай.


    Код (Text):
    1. IoCopyCurrentIrpStackLocationToNext MACRO pIrp:REQ
    2.  
    3.     push esi
    4.     push edi
    5.  
    6.     mov eax, pIrp
    7.  
    8.     mov esi, (_IRP PTR [eax]).Tail.Overlay.CurrentStackLocation
    9.  
    10.     mov edx, (_IRP PTR [eax]).Tail.Overlay.CurrentStackLocation
    11.     sub edx, sizeof IO_STACK_LOCATION
    12.     mov edi, edx
    13.  
    14.     mov ecx, sizeof IO_STACK_LOCATION
    15.  
    16.     rep movsb
    17.  
    18.     and (IO_STACK_LOCATION PTR [edx]).Control, 0
    19.     and (IO_STACK_LOCATION PTR [edx]).CompletionRoutine, 0
    20.     and (IO_STACK_LOCATION PTR [edx]).Context, 0
    21.  
    22.     pop edi
    23.     pop esi
    24.  
    25. ENDM