InitializeObjectAttributes

Тема в разделе "WASM.NT.KERNEL", создана пользователем calidus, 8 сен 2008.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Как можно заменить макрос InitializeObjectAttributes , для динамической инициализации в драйвере подаваемой строки , но не при компиляции?
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    OBJECT_ATTRIBUTES это такая структура. Просто напиши функцию для заполнения, выделения памяти и т.д.
    Код (Text):
    1. Length                  dd ?
    2. RootDirectory            dd ?
    3. ObjectName               dd ?
    4. Attributes               dd ?
    5. SecurityDescriptor       dd ?
    6. SecurityQualityOfService dd ?
     
  3. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Код (Text):
    1. OBJECT_ATTRIBUTES STRUCT        ; sizeof = 18h
    2.     dwLength                    DWORD           ? ; original name Length
    3.     RootDirectory               HANDLE          ?
    4.     ObjectName              AU_STRING   <?>
    5.     Attributes                  DWORD           ?
    6.     SecurityDescriptor          PVOID           ? ; Points to type SECURITY_DESCRIPTOR
    7.     SecurityQualityOfService    PVOID           ? ; Points to type SECURITY_QUALITY_OF_SERVICE
    8. OBJECT_ATTRIBUTES ENDS
    и вот типо вручную инициализация
    Код (Text):
    1. assume ecx:nothing
    2.     lea ecx, oa
    3.     xor eax, eax
    4.     assume ecx:ptr OBJECT_ATTRIBUTES
    5.     mov [ecx].dwLength, sizeof OBJECT_ATTRIBUTES
    6.     mov [ecx].RootDirectory, eax                       ; NULL
    7.     push 0
    8.     pop [ecx].ObjectName.buff
    9.     mov [ecx].Attributes, eax                          ; 0
    10.     mov [ecx].SecurityDescriptor, eax                  ; NULL
    11.     mov [ecx].SecurityQualityOfService, eax            ; NULL
    12.     assume ecx:nothing
    а вот то что мне надо записать в таблицу InitializeObjectAttributes addr oa,offset usDeviceName, OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE, NULL, NULL

    где offset usDeviceName это строка от invoke RtlInitUnicodeString, addr usDeviceName,edx
    где в едх строка в юникоде для инициализации. Есть другие примеры заполнения ? В выше описанное не оч понятно.

    Как заполнить ее я не в курсе =(
     
  4. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Я не помню masm. Наверное так:
    Код (Text):
    1. IOAttr PROC hRootDir:DWORD,uStr:DWORD,Attr:DWORD
    2.   invoke ExAllocatePool,PagedPool,18h
    3.   mov ecx,eax
    4.   assume ecx: PTR OBJECT_ATTRIBUTES
    5.   xor ebx,ebx
    6.   mov [ecx].dwLength, sizeof OBJECT_ATTRIBUTES
    7.   mov eax,hRootDir
    8.   mov [ecx].RootDirectory,eax
    9.   mov eax,[uStr]
    10.   push eax
    11.   pop [ecx].ObjectName.buff
    12.   mov eax,[Attr]
    13.   mov [ecx].Attributes, eax
    14.   mov [ecx].SecurityDescriptor, ebx
    15.   mov [ecx].SecurityQualityOfService, ebx
    16.   assume ecx:nothing
    17.   mov eax,ecx
    18.   ret
    19. IOAttr ENDP
    20. ;example
    21. push 0
    22. push offset usDeviceName
    23. push OBJ_CASE_INSENSITIVE + OBJ_KERNEL_HANDLE
    24. call IOAttr
     
  5. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    twgt Спасибо )))) .. пойду пробовать