Не могу понять почему ZwOpenFile не хочеть работать ... причем ко всему прочему возвращает еще какую то хореновую ошибку ... 80000002h ниже сорец плиз направте ибо у меня мыслей нет ваабще ): Code (Text): format PE GUI 4.0 entry open include 'D:\_123\INCLUDE\win32ax.inc' struct OBJECT_ATTRIBUTES Length dd ? ; 0 RootDirectory dd ? ; 4 ObjectName dd ? ; 8 Attributes dd ? ; 0ch SecurityDescriptor dd ? ; 10h SecurityQualityOfService dd ? ; 14h ends struct IO_STATUS_BLOCK Status dd ? Information dd ? ends OBJ_CASE_INSENSITIVE = 40h OBJ_KERNEL_HANDLE = 200h FILE_OPEN_IF = 3 SYNCHRONIZE = 100000h FILE_SYNCHRONOUS_IO_NONALERT = 20h FILE_CREATE = 2 POBJECT_ATTRIBUTES = -18h PIO_STATUS_BLOCK = -20h hFile = -24h uniStr = -2ch open: enter 2ch,0 lea edi,[ebp-2ch] mov ecx,2ch xor eax,eax rep stosb lea esi,[ebp+uniStr] mov edi,szPath invoke RtlInitUnicodeString,esi,edi lea edi,[ebp+POBJECT_ATTRIBUTES] mov dword[edi+OBJECT_ATTRIBUTES.Length],18h mov dword[edi+OBJECT_ATTRIBUTES.ObjectName],esi mov dword[edi+OBJECT_ATTRIBUTES.Attributes],OBJ_CASE_INSENSITIVE+OBJ_KERNEL_HANDLE lea eax,[ebp+hFile] lea edx,[ebp+PIO_STATUS_BLOCK] invoke ZwOpenFile,eax,GENERIC_READ+GENERIC_WRITE+SYNCHRONIZE,edi,edx,FILE_SHARE_READ+FILE_SHARE_WRITE+FILE_SHARE_DELETE,FILE_SYNCHRONOUS_IO_NONALERT invoke ZwClose,dword[ebp+hFile] .ret: ret szPath db '\',0,'?',0,'?',0,'\',0,'C',0,':',0,'\',0,'1',0,'.',0,'t',0,'x',0,'t',0,0,0 data import library ntdll , 'ntdll.dll' import ntdll, \ ZwOpenFile , 'ZwOpenFile', \ ZwClose , 'ZwClose', \ RtlInitUnicodeString , 'RtlInitUnicodeString' end data
О, знакомая ошибка, сам долго с этим трахался. Структура OBJECT_ATTRIBUTES должна находиться по строго выровненному адресу. Что б дальше не было проблем используй ZwAllocateVirtualMemory для выделения под нее памяти.
ну ды и так все на 4 отлично делится ... Code (Text): enter 2ch,0 или я чего то не понимаю ? если да, то если не трудно измените код, до рабочего состояния ... зы. и кстати вот у CreateFile есть dwCreationDistribution CREATE_ALWAYS, есть ли такой же у ZwCreateFile ибо когда я пробовал он часто возвращал ошибку c0000035h, мол косяк в имени объекта ... это происходит только тогда когда файл уже создан ...
сделал так ... теперь работает ... но это ж блин изврат )))))))))))): подскажите где именно надо выравнивать ??? Code (Text): lea edi,[ebp-2ch] align 4 mov ecx,2ch align 4 xor eax,eax align 4 rep stosb align 4 lea esi,[ebp+uniStr] align 4 mov edi,szPath align 4 invoke RtlInitUnicodeString,esi,edi align 4 xor edx,edx align 4 lea edi,[ebp+POBJECT_ATTRIBUTES] align 4 mov dword[edi+OBJECT_ATTRIBUTES.Length],18h align 4 mov dword[edi+OBJECT_ATTRIBUTES.ObjectName],esi align 4 mov dword[edi+OBJECT_ATTRIBUTES.Attributes],OBJ_CASE_INSENSITIVE+OBJ_KERNEL_HANDLE align 4 lea eax,[ebp+hFile] align 4 lea edx,[ebp+PIO_STATUS_BLOCK] align 4 invoke ZwCreateFile,eax,SYNCHRONIZE,edi,edx,0,FILE_ATTRIBUTE_NORMAL,0,FILE_CREATE,FILE_SYNCHRONOUS_IO_NONALERT,0,0 align 4 invoke ZwClose,dword[ebp+hFile]