ExCreateCallback - что это за зверь и с чем его едят?

Тема в разделе "WASM.RESEARCH", создана пользователем Llirik, 24 янв 2011.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    471
    Я дизассемблировал Идой один драйверок и в нужном мне месте натолкнулся на ExCreateCallback. Я об этой функции не слышал и естевственно полез в инет, но ничего толкового на руском языке так и не нашёл( Но мне очень хотелось бы понять, как этот кусок работает
    Код (Text):
    1. PAGE:0001058A ; int __stdcall MouFilter_AddDevice(PDRIVER_OBJECT DeviceObject, PDEVICE_OBJECT TargetDevice)
    2. PAGE:0001058A                 public _MouFilter_AddDevice@8
    3. PAGE:0001058A _MouFilter_AddDevice@8 proc near        ; DATA XREF: DriverEntry(x,x)+44o
    4. PAGE:0001058A
    5. PAGE:0001058A ObjectAttributes= OBJECT_ATTRIBUTES ptr -24h
    6. PAGE:0001058A DestinationString= UNICODE_STRING ptr -0Ch
    7. PAGE:0001058A CallbackObject  = dword ptr -4
    8. PAGE:0001058A DeviceObject    = dword ptr  8
    9. PAGE:0001058A TargetDevice    = dword ptr  0Ch
    10. PAGE:0001058A
    11. PAGE:0001058A                 push    ebp
    12. PAGE:0001058B                 mov     ebp, esp
    13. PAGE:0001058D                 sub     esp, 24h
    14. PAGE:00010590                 push    ebx
    15. PAGE:00010591                 lea     eax, [ebp+DeviceObject]
    16. PAGE:00010594                 push    esi
    17. PAGE:00010595                 xor     ebx, ebx
    18. PAGE:00010597                 push    eax             ; DeviceObject
    19. PAGE:00010598                 push    ebx             ; Exclusive
    20. PAGE:00010599                 push    ebx             ; DeviceCharacteristics
    21. PAGE:0001059A                 push    0Fh             ; DeviceType
    22. PAGE:0001059C                 push    ebx             ; DeviceName
    23. PAGE:0001059D                 push    3Ch             ; DeviceExtensionSize
    24. PAGE:0001059F                 push    [ebp+DeviceObject] ; DriverObject
    25. PAGE:000105A2                 call    ds:__imp__IoCreateDevice@28 ; IoCreateDevice(x,x,x,x,x,x,x)
    26. PAGE:000105A8                 cmp     eax, ebx
    27. PAGE:000105AA                 jl      loc_10640
    28. PAGE:000105B0                 mov     edx, [ebp+DeviceObject]
    29. PAGE:000105B3                 push    edi
    30. PAGE:000105B4                 push    0Fh
    31. PAGE:000105B6                 xor     eax, eax
    32. PAGE:000105B8                 mov     edi, [edx+28h]
    33. PAGE:000105BB                 pop     ecx
    34. PAGE:000105BC                 rep stosd
    35. PAGE:000105BE                 mov     edi, [ebp+TargetDevice]
    36. PAGE:000105C1                 mov     eax, [ebp+DeviceObject]
    37. PAGE:000105C4                 push    edi             ; TargetDevice
    38. PAGE:000105C5                 push    eax             ; SourceDevice
    39. PAGE:000105C6                 mov     esi, [eax+28h]
    40. PAGE:000105C9                 call    ds:__imp__IoAttachDeviceToDeviceStack@8 ; IoAttachDeviceToDeviceStack(x,x)
    41. PAGE:000105CF                 mov     [esi+24h], eax
    42. PAGE:000105D2                 mov     eax, [ebp+DeviceObject]
    43. PAGE:000105D5                 push    1
    44. PAGE:000105D7                 mov     [esi+20h], edi
    45. PAGE:000105DA                 mov     [esi+1Ch], eax
    46. PAGE:000105DD                 pop     edi
    47. PAGE:000105DE                 lea     eax, [ebp+DestinationString]
    48. PAGE:000105E1                 push    offset $SG6275  ; "\\Callback\\MouseInput"
    49. PAGE:000105E6                 push    eax             ; DestinationString
    50. PAGE:000105E7                 mov     [esi+34h], edi
    51. PAGE:000105EA                 mov     [esi+39h], bl
    52. PAGE:000105ED                 mov     [esi+3Ah], bl
    53. PAGE:000105F0                 mov     [esi+38h], bl
    54. PAGE:000105F3                 call    ds:__imp__RtlInitUnicodeString@8 ; RtlInitUnicodeString(x,x)
    55. PAGE:000105F9                 lea     eax, [ebp+DestinationString]
    56. PAGE:000105FC                 push    ebx             ; AllowMultipleCallbacks
    57. PAGE:000105FD                 mov     [ebp+ObjectAttributes.ObjectName], eax
    58. PAGE:00010600                 lea     eax, [ebp+ObjectAttributes]
    59. PAGE:00010603                 push    edi             ; Create
    60. PAGE:00010604                 push    eax             ; ObjectAttributes
    61. PAGE:00010605                 lea     eax, [ebp+CallbackObject]
    62. PAGE:00010608                 mov     [ebp+ObjectAttributes.Length], 18h
    63. PAGE:0001060F                 push    eax             ; CallbackObject
    64. PAGE:00010610                 mov     [ebp+ObjectAttributes.RootDirectory], ebx
    65. PAGE:00010613                 mov     [ebp+ObjectAttributes.Attributes], 50h
    66. PAGE:0001061A                 mov     [ebp+ObjectAttributes.SecurityDescriptor], ebx
    67. PAGE:0001061D                 mov     [ebp+ObjectAttributes.SecurityQualityOfService], ebx
    68. PAGE:00010620                 call    ds:__imp__ExCreateCallback@16 ; ExCreateCallback(x,x,x,x)
    69. PAGE:00010626                 cmp     eax, ebx
    70. PAGE:00010628                 pop     edi
    71. PAGE:00010629                 jl      short loc_10640
    72. PAGE:0001062B                 mov     ecx, [ebp+CallbackObject]
    73. PAGE:0001062E                 mov     [esi], ecx
    74. PAGE:00010630                 mov     ecx, [ebp+DeviceObject]
    75. PAGE:00010633                 or      word ptr [ecx+1Ch], 2004h
    76. PAGE:00010639                 mov     ecx, [ebp+DeviceObject]
    77. PAGE:0001063C                 and     byte ptr [ecx+1Ch], 7Fh
    78. PAGE:00010640
    79. PAGE:00010640 loc_10640:                              ; CODE XREF: MouFilter_AddDevice(x,x)+20j
    80. PAGE:00010640                                         ; MouFilter_AddDevice(x,x)+9Fj
    81. PAGE:00010640                 pop     esi
    82. PAGE:00010641                 pop     ebx
    83. PAGE:00010642                 leave
    84. PAGE:00010643                 retn    8
    85. PAGE:00010643 _MouFilter_AddDevice@8 endp
     
  2. felize

    felize New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    39
  3. ntkernelspawn

    ntkernelspawn New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2010
    Сообщения:
    61
    Создает Callback по линку "\\Callback\\MouseInput"
    Callback мехназим для комуникации драйверов("\\Callback\\MouseInput" либо не документированный виндовый, либо каких дров) по идеи спайс.

    http://msdn.microsoft.com/en-us/library/ff540718%28v=VS.85%29.aspx