Перехватываю данную ф-цию, ставлю свой обработчик и получаю BSOD'ы... plz помогите отладить. Код своего обработчика привожу: Код (Text): newNtEnumerateKey proc KeyHandle:DWORD,\ ; дескриптор Index:DWORD,\ ; индекс подключа KeyInformationClass:DWORD,\ ; тип полученной инфы KeyInformation:DWORD,\ ; буффер для данных KeyInformationLength:DWORD, ; длина буффера ResultLength:DWORD ; кол-во записанных байт LOCAL Count: DWORD LOCAL Result: DWORD LOCAL dwH: DWORD LOCAL hKey: DWORD LOCAL buf[256]: BYTE LOCAL buf2[256]: BYTE LOCAL us:UNICODE_STRING invoke MultiByteToWideChar,CP_ACP,0,addr hide_val,-1,addr buf,255 invoke VirtualAlloc,0,100,MEM_COMMIT,PAGE_EXECUTE_READWRITE mov dwH,eax mov ecx,eax assume ecx:ptr OBJECT_ATTRIBUTES mov [ecx]._Length,sizeof OBJECT_ATTRIBUTES push KeyHandle pop [ecx].RootDirectory lea eax,buf mov [ecx].ObjectName,eax mov [ecx].Attributes,OBJ_CASE_INSENSITIVE and [ecx].SecurityDescriptor,0 and [ecx].SecurityQualityOfService, 0 assume ecx: nothing invoke NtOpenKey,addr hKey,KEY_ENUMERATE_SUB_KEYS,ecx push eax invoke VirtualFree,dwH,0,MEM_RELEASE pop eax cmp eax,0 je @F invoke NtClose,hKey jmp @real_call @@: mov Count,0 @loop: push ResultLength push KeyInformationLength push KeyInformation push 0 ; KeyBasicInformation push Count push KeyHandle call oldNtEnumerateKey mov Result,eax cmp eax,0 jne @return invoke memset,addr buf2,0,256 mov edx,KeyInformation mov eax, (KEY_BASIC_INFORMATION PTR [edx]).NameLength shr eax, 1 lea edx, (KEY_BASIC_INFORMATION PTR [edx])._Name invoke wcsncpy,addr buf2, edx, eax invoke RtlInitUnicodeString, addr us,addr buf2 invoke lstrcmpiW,addr us,addr buf push eax invoke RtlFreeUnicodeString,addr us pop eax cmp eax,0 je @cmp inc Count jmp @loop @cmp: mov eax,Count cmp eax,Index jl @real_call inc Index @real_call: push ResultLength push KeyInformationLength push KeyInformation push KeyInformationClass push Index push KeyHandle call oldNtEnumerateKey mov Result,eax cmp eax,0 je @return mov Result,80000014h @return: mov eax,Result ret newNtEnumerateKey endp
От BSOD'ов избавился, но дальше другая трабла - не работает все равно. Мб я что-то не то передаю в параметрах для NtOpenKey? Вывод такой сделал потому, что именно она у меня постоянно возвращает не STATUS_SUCCESS и дальше обработка просто не идет .