Вот код в драйвере ;======================================= .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), хотя х.з. Помогите, кто знает, в чем ошибка Заранее благодарен
nitrotoluol При получении STATUS_INFO_LENGTH_MISMATCH, обычно, увеличивают буфер в два раза и снова вызывают ZwQuerySystemInformation. Увеличение и повторный вызов повторяют, пока приходит STATUS_INFO_LENGTH_MISMATCH. Пример ищи по слову STATUS_INFO_LENGTH_MISMATCH на СТАТЬИ > Секреты Win32 > Обнаружение скрытых процессов.
можно сделать по аналогии с моим исхрдником и в драйвере: Код (Text): NTGetInfoPtr proc uses ecx tp:DWORD local mSize:DWORD, mPtr:DWORD, rtm:DWORD mov mSize, 4000 bgn: invoke VirtualAlloc, 0, mSize, 1000h, 4 mov mPtr, eax push ecx mov ecx, esp invoke ZwQuerySystemInformation, tp, mPtr, mSize, ecx pop ecx mov rtm, eax .If rtm == 0C0000004h invoke VirtualFree, mPtr, 0, 4000h .If ecx mov mSize, ecx .Else mov eax, mSize add mSize, eax .endif .endif cmp rtm, 0C0000004h je bgn mov eax, mPtr ret NTGetInfoPtr endp
Разобрался Кстати, в догонку Чему в конце концов равен тип LARGE_INTEGER ? Потому как в докумментации стоит, что 6ти двордам, а в реалии вместо положенных 100 байт смещения, у меня вышло только 52, т.е. на порядок меньше...