ZwQuerySystemInformation. eax=0xC0000004h. Почему?

Тема в разделе "WASM.BEGINNERS", создана пользователем nitrotoluol, 1 май 2007.

  1. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Вот код в драйвере
    ;=======================================
    .data?
    buf db 4000h dup (?)
    RetLen dd ?

    .code
    .......
    push offset [RetLen]
    push 4000h
    push offset [buf]
    push 5
    call NewZwQuerySystemInformation

    ;еах возвращает C0000004h - Status_Info_Len_Mismach
    ;=======================================

    Что я делаю не так? Вероятно дело во втором параметре (4000h), хотя х.з.
    Помогите, кто знает, в чем ошибка
    Заранее благодарен
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    nitrotoluol
    При получении STATUS_INFO_LENGTH_MISMATCH, обычно, увеличивают буфер в два раза и снова вызывают ZwQuerySystemInformation. Увеличение и повторный вызов повторяют, пока приходит STATUS_INFO_LENGTH_MISMATCH. Пример ищи по слову STATUS_INFO_LENGTH_MISMATCH на СТАТЬИ > Секреты Win32 > Обнаружение скрытых процессов.
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    можно сделать по аналогии с моим исхрдником и в драйвере:
    Код (Text):
    1. NTGetInfoPtr proc uses ecx tp:DWORD
    2.  local mSize:DWORD, mPtr:DWORD, rtm:DWORD
    3.  mov mSize, 4000
    4. bgn:
    5.  invoke VirtualAlloc, 0, mSize, 1000h, 4
    6.  mov mPtr, eax
    7.  push ecx
    8.  mov ecx, esp
    9.  invoke ZwQuerySystemInformation, tp, mPtr, mSize, ecx
    10.  pop ecx
    11.  mov rtm, eax
    12.  .If rtm == 0C0000004h
    13.   invoke VirtualFree, mPtr, 0, 4000h
    14.   .If ecx
    15.    mov mSize, ecx
    16.   .Else
    17.    mov eax, mSize
    18.    add mSize, eax
    19.   .endif
    20.  .endif
    21.  cmp rtm, 0C0000004h
    22.  je bgn
    23.  mov eax, mPtr
    24.  ret
    25. NTGetInfoPtr endp
     
  4. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Разобрался
    Кстати, в догонку
    Чему в конце концов равен тип LARGE_INTEGER ?
    Потому как в докумментации стоит, что 6ти двордам, а в реалии вместо положенных 100 байт смещения, у меня вышло только 52, т.е. на порядок меньше...
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    8 байт, тоже что и ULONGLONG вроде
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    nitrotoluol
    union.