Есть функция на перехват открытия ключа реестра с флагом удаления: Код (Text): _NtOpenKey proc mov eax,[esp+8] test eax,DELETE jnz _NtOpenKeyForDelete jmp g_lpNtOpenKey _NtOpenKeyForDelete: mov ebx,[esp+12] mov ebx,[ebx+8] mov ebx,[ebx+4] ;В EBX указатель на строку открываемого ключа or ebx,ebx jz _NtOpenKeyJmp invoke _wcslwr,ebx mov ecx,offset sDriverKeyName mov ecx,[ecx+4] invoke wcsstr,ebx,ecx or eax,eax jnz _NtOpenKeyRet _NtOpenKeyJmp: jmp g_lpNtOpenKey _NtOpenKeyRet: mov eax,STATUS_ACCESS_DENIED ret _NtOpenKey endp Вроде всё просто, но работает только если закомментировать строчку invoke _wcslwr,ebx, иначе при попытке удаления запрещённого раздела реестра получаем сообщение об отсутствии доступа, а потом синий экран. К слову, для запрета удаления файлов написана точно такая же функция, работает нормально с invoke _wcslwr,ebx В чём может быть дело..?
Forever, сделал небольшую проверку [Исправил выше]. Эран всё равно выскакивает, по идее, если бы там был нулевой указатель, то в любом случае прога должна бы была вываливаться на строчке invoke wcsstr,ebx,ecx, тем не менее этого не происходит. Закомментировал invoke _wcslwr,ebx, и всё работает прекрасно, но хотелось бы для надёжности 'выравнивать строку'. И опять же при работе с файлами такой проблемы не возникает (крутил по разному). Выложил исходник.