Помогите с NtEnumerateKey

Тема в разделе "WASM.WIN32", создана пользователем Stub, 20 янв 2005.

  1. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Перехватываю данную ф-цию, ставлю свой обработчик и получаю BSOD'ы... plz помогите отладить.

    Код своего обработчика привожу:
    Код (Text):
    1. newNtEnumerateKey proc          KeyHandle:DWORD,\       ; дескриптор
    2.                             Index:DWORD,\           ; индекс подключа
    3.                             KeyInformationClass:DWORD,\ ; тип полученной инфы
    4.                             KeyInformation:DWORD,\      ; буффер для данных
    5.                             KeyInformationLength:DWORD, ; длина буффера
    6.                             ResultLength:DWORD      ; кол-во записанных байт
    7.  
    8. LOCAL Count: DWORD
    9. LOCAL Result: DWORD
    10. LOCAL dwH: DWORD
    11. LOCAL hKey: DWORD
    12. LOCAL buf[256]: BYTE
    13. LOCAL buf2[256]: BYTE
    14. LOCAL us:UNICODE_STRING
    15.  
    16. invoke MultiByteToWideChar,CP_ACP,0,addr hide_val,-1,addr buf,255
    17.  
    18. invoke VirtualAlloc,0,100,MEM_COMMIT,PAGE_EXECUTE_READWRITE
    19. mov dwH,eax
    20. mov ecx,eax
    21. assume ecx:ptr OBJECT_ATTRIBUTES
    22. mov [ecx]._Length,sizeof OBJECT_ATTRIBUTES
    23. push KeyHandle
    24. pop [ecx].RootDirectory
    25. lea eax,buf
    26. mov [ecx].ObjectName,eax
    27. mov [ecx].Attributes,OBJ_CASE_INSENSITIVE
    28. and [ecx].SecurityDescriptor,0
    29. and [ecx].SecurityQualityOfService, 0
    30. assume ecx: nothing
    31.  
    32. invoke NtOpenKey,addr hKey,KEY_ENUMERATE_SUB_KEYS,ecx
    33. push eax
    34. invoke VirtualFree,dwH,0,MEM_RELEASE
    35. pop eax
    36. cmp eax,0
    37. je @F
    38.     invoke NtClose,hKey
    39.     jmp @real_call
    40.  
    41. @@:
    42. mov Count,0
    43. @loop:
    44.     push ResultLength
    45.     push KeyInformationLength
    46.     push KeyInformation
    47.     push 0    ; KeyBasicInformation
    48.     push Count
    49.     push KeyHandle
    50.     call oldNtEnumerateKey
    51. mov  Result,eax
    52. cmp  eax,0
    53. jne  @return
    54.  
    55. invoke memset,addr buf2,0,256
    56. mov edx,KeyInformation
    57. mov eax, (KEY_BASIC_INFORMATION PTR [edx]).NameLength
    58. shr eax, 1
    59. lea edx, (KEY_BASIC_INFORMATION PTR [edx])._Name
    60. invoke wcsncpy,addr buf2, edx, eax
    61. invoke RtlInitUnicodeString, addr us,addr buf2
    62.  
    63. invoke lstrcmpiW,addr us,addr buf
    64. push eax
    65. invoke RtlFreeUnicodeString,addr us
    66. pop eax
    67. cmp eax,0
    68. je  @cmp
    69. inc Count
    70. jmp @loop
    71.  
    72. @cmp:
    73.     mov eax,Count
    74.     cmp eax,Index
    75.     jl  @real_call
    76.     inc Index
    77.  
    78. @real_call:
    79. push ResultLength
    80. push KeyInformationLength
    81. push KeyInformation
    82. push KeyInformationClass
    83. push Index
    84. push KeyHandle
    85. call oldNtEnumerateKey
    86. mov Result,eax
    87. cmp eax,0
    88. je  @return
    89.  
    90. mov Result,80000014h
    91. @return:
    92.     mov eax,Result
    93.     ret
    94. newNtEnumerateKey endp
     
  2. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    От BSOD'ов избавился, но дальше другая трабла - не работает все равно. Мб я что-то не то передаю в параметрах для NtOpenKey? Вывод такой сделал потому, что именно она у меня постоянно возвращает не STATUS_SUCCESS и дальше обработка просто не идет :dntknw:.
     
  3. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Админы, plz удалите этот топик. 10x