Синий экран при вызове _wcslwr

Тема в разделе "WASM.NT.KERNEL", создана пользователем V1lko, 17 фев 2009.

  1. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Есть функция на перехват открытия ключа реестра с флагом удаления:
    Код (Text):
    1. _NtOpenKey proc
    2.    mov eax,[esp+8]                  
    3.    test eax,DELETE
    4.    jnz _NtOpenKeyForDelete          
    5.    jmp g_lpNtOpenKey
    6. _NtOpenKeyForDelete:
    7.    mov ebx,[esp+12]
    8.    mov ebx,[ebx+8]
    9.    mov ebx,[ebx+4]         ;В EBX указатель на строку открываемого ключа
    10.    or ebx,ebx
    11.    jz _NtOpenKeyJmp
    12.    invoke _wcslwr,ebx
    13.    mov ecx,offset sDriverKeyName  
    14.    mov ecx,[ecx+4]  
    15.    invoke wcsstr,ebx,ecx
    16.    or eax,eax
    17.    jnz _NtOpenKeyRet                
    18. _NtOpenKeyJmp:                      
    19.    jmp g_lpNtOpenKey                
    20. _NtOpenKeyRet:                      
    21.    mov eax,STATUS_ACCESS_DENIED      
    22.    ret
    23. _NtOpenKey endp
    Вроде всё просто, но работает только если закомментировать строчку invoke _wcslwr,ebx, иначе при попытке удаления запрещённого раздела реестра получаем сообщение об отсутствии доступа, а потом синий экран.

    К слову, для запрета удаления файлов написана точно такая же функция, работает нормально с invoke _wcslwr,ebx
    В чём может быть дело..?
     
  2. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    На NULL проверял значение хранящееся в ebx?
     
  3. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    Forever, сделал небольшую проверку [Исправил выше].
    Эран всё равно выскакивает, по идее, если бы там был нулевой указатель, то в любом случае прога должна бы была вываливаться на строчке invoke wcsstr,ebx,ecx, тем не менее этого не происходит. Закомментировал invoke _wcslwr,ebx, и всё работает прекрасно, но хотелось бы для надёжности 'выравнивать строку'.
    И опять же при работе с файлами такой проблемы не возникает (крутил по разному).
    Выложил исходник.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    read-only память может быть.
    скопируй в стек.
     
  5. V1lko

    V1lko New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    53
    n0name, видимо так и есть. Спасибо. Теперь работает без збоев.