траблы с ZwOpenFile

Тема в разделе "WASM.BEGINNERS", создана пользователем el-, 29 ноя 2006.

  1. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    Не могу понять почему ZwOpenFile не хочеть работать ... причем ко всему прочему возвращает еще какую то хореновую ошибку ... 80000002h ниже сорец плиз направте ибо у меня мыслей нет ваабще ):

    Код (Text):
    1. format PE GUI 4.0
    2. entry open
    3.  
    4. include 'D:\_123\INCLUDE\win32ax.inc'
    5.  
    6.  
    7. struct  OBJECT_ATTRIBUTES
    8.     Length              dd  ? ; 0
    9.     RootDirectory           dd  ? ; 4
    10.     ObjectName          dd  ? ; 8
    11.     Attributes          dd  ? ; 0ch
    12.     SecurityDescriptor      dd  ? ; 10h
    13.     SecurityQualityOfService    dd  ? ; 14h
    14. ends
    15.  
    16. struct  IO_STATUS_BLOCK
    17.     Status              dd  ?
    18.     Information         dd  ?
    19. ends
    20.  
    21. OBJ_CASE_INSENSITIVE        =   40h
    22. OBJ_KERNEL_HANDLE       =   200h
    23. FILE_OPEN_IF            =   3
    24. SYNCHRONIZE         =   100000h
    25. FILE_SYNCHRONOUS_IO_NONALERT    =   20h
    26. FILE_CREATE                     =   2
    27.  
    28. POBJECT_ATTRIBUTES      =   -18h
    29. PIO_STATUS_BLOCK        =   -20h
    30. hFile               =   -24h
    31. uniStr              =   -2ch
    32.  
    33. open:   enter   2ch,0
    34.     lea edi,[ebp-2ch]
    35.     mov ecx,2ch
    36.     xor eax,eax
    37.     rep stosb
    38.     lea esi,[ebp+uniStr]
    39.     mov     edi,szPath
    40.     invoke  RtlInitUnicodeString,esi,edi
    41.     lea edi,[ebp+POBJECT_ATTRIBUTES]
    42.     mov dword[edi+OBJECT_ATTRIBUTES.Length],18h
    43.     mov dword[edi+OBJECT_ATTRIBUTES.ObjectName],esi
    44.     mov dword[edi+OBJECT_ATTRIBUTES.Attributes],OBJ_CASE_INSENSITIVE+OBJ_KERNEL_HANDLE
    45.     lea eax,[ebp+hFile]
    46.     lea edx,[ebp+PIO_STATUS_BLOCK]
    47.     invoke  ZwOpenFile,eax,GENERIC_READ+GENERIC_WRITE+SYNCHRONIZE,edi,edx,FILE_SHARE_READ+FILE_SHARE_WRITE+FILE_SHARE_DELETE,FILE_SYNCHRONOUS_IO_NONALERT
    48.     invoke  ZwClose,dword[ebp+hFile]
    49. .ret:   ret
    50. szPath  db  '\',0,'?',0,'?',0,'\',0,'C',0,':',0,'\',0,'1',0,'.',0,'t',0,'x',0,'t',0,0,0
    51.  
    52. data    import
    53. library ntdll               ,   'ntdll.dll'
    54. import  ntdll,              \
    55.     ZwOpenFile          ,   'ZwOpenFile',               \
    56.     ZwClose             ,   'ZwClose',              \
    57.     RtlInitUnicodeString        ,   'RtlInitUnicodeString'
    58. end data
     
  2. seeQ

    seeQ New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2003
    Сообщения:
    71
    О, знакомая ошибка, сам долго с этим трахался. Структура OBJECT_ATTRIBUTES должна находиться по строго выровненному адресу. Что б дальше не было проблем используй ZwAllocateVirtualMemory для выделения под нее памяти.
     
  3. n0name

    n0name New Member

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

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    ну ды и так все на 4 отлично делится ...

    Код (Text):
    1. enter    2ch,0
    или я чего то не понимаю ? если да, то если не трудно измените код, до рабочего состояния ...

    зы. и кстати вот у CreateFile есть dwCreationDistribution CREATE_ALWAYS, есть ли такой же у ZwCreateFile ибо когда я пробовал он часто возвращал ошибку c0000035h, мол косяк в имени объекта ... это происходит только тогда когда файл уже создан ...
     
  5. el-

    el- New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    89
    сделал так ... теперь работает ... но это ж блин изврат )))))))))))): подскажите где именно надо выравнивать ???

    Код (Text):
    1.     lea edi,[ebp-2ch]
    2.     align   4
    3.     mov ecx,2ch
    4.     align   4
    5.     xor eax,eax
    6.     align   4
    7.     rep stosb
    8.     align   4
    9.     lea esi,[ebp+uniStr]
    10.     align   4
    11.     mov     edi,szPath
    12.     align   4
    13.     invoke  RtlInitUnicodeString,esi,edi
    14.     align   4
    15.     xor edx,edx
    16.     align   4
    17.     lea edi,[ebp+POBJECT_ATTRIBUTES]
    18.     align   4
    19.     mov dword[edi+OBJECT_ATTRIBUTES.Length],18h
    20.     align   4
    21.     mov dword[edi+OBJECT_ATTRIBUTES.ObjectName],esi
    22.     align   4
    23.     mov dword[edi+OBJECT_ATTRIBUTES.Attributes],OBJ_CASE_INSENSITIVE+OBJ_KERNEL_HANDLE
    24.     align   4
    25.     lea eax,[ebp+hFile]
    26.     align   4
    27.     lea edx,[ebp+PIO_STATUS_BLOCK]
    28.     align   4
    29.     invoke  ZwCreateFile,eax,SYNCHRONIZE,edi,edx,0,FILE_ATTRIBUTE_NORMAL,0,FILE_CREATE,FILE_SYNCHRONOUS_IO_NONALERT,0,0
    30.     align   4
    31.     invoke  ZwClose,dword[ebp+hFile]