Глупый вопрос про ZwQuerySystemInformation

Тема в разделе "WASM.BEGINNERS", создана пользователем Fail, 14 мар 2012.

  1. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    Всем привет. Пытаюсь получить список запущеных процессов с помощью функции ZwQuerySystemInformation. И никак не могу понять, почему ниче не работает:dntknw: Делаю так:
    Код (Text):
    1. HINSTANCE addrNt = GetModuleHandle(TEXT("ntdll.dll"));
    2.     if(addrNt == NULL) cout << "Failed get ntdll.dll handle" << endl;
    3.  
    4.     FARPROC zwfunc = GetProcAddress(addrNt, "ZwQuerySystemInformation");
    5.     if(zwfunc == NULL) cout << "Failed get ntdll.dll addres" << endl;
    6.  
    7.     PVOID pBuff;
    8.     ULONG cBuff = 0x8000;
    9.     zwfunc(SystemProcessesAndThreadsInformation, pBuff, cBuff, NULL);
    Пишет ошибку
    [Error] 'SystemProcessesAndThreadsInformation' was not declared in this scope

    если добавляю кавычки
    zwfunc("SystemProcessesAndThreadsInformation", pBuff, cBuff, NULL);
    то пишет
    [Error] too many arguments to function

    Что делать?:)
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    1. подключите заголовочный файл с обявленной SystemProcessesAndThreadsInformation (или объявите через define)
    2. объявите нормально прототип ZwQuerySystem Information.
     
  3. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Какой есчо GetProcAddr. Подрубайте ntdll.lib
     
  4. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    h0t

    Переделал:

    Код (Text):
    1. #define SystemProcessesAndThreadsInformation    5
    2. ....
    3.  
    4. unsigned long ZwQuerySystemInformation
    5.   (ULONG tag, VOID *buffer, ULONG bufferSize, ULONG *returnedSize);
    6. ....
    7.  
    8. далее тот же код
    выдает
    [Error] too many arguments to function

    это ппц....

    Malfoy

    хотелось бы именно так.
     
  5. gorodon

    gorodon New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2009
    Сообщения:
    301
    Fail а память под pBuff выделять разве не надо?

    Код (Text):
    1.     pBuff = HeapAlloc(hHeap, 0, cBuff);
    2.     memset(pBuff, 0, cBuff);
     
  6. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Код (Text):
    1. typedef NTSTATUS(*pZwQuerySystemInformation)(ULONG tag, VOID *buffer, ULONG bufferSize, ULONG *returnedSize);
    2.  
    3.  
    4. HMODULE h = LoadLibraryA("ntdll.dll");
    5. pZwQuerySystemInformation Zwquery = (pZwQuerySystemInformation)  GetProcAddress(h,"ZwQuerySystemInformation");
    6. Zwquery(0,0,0,0);
    Только не понял почему тема создана в HEAP
    P.S. если хотите через lib'у добавьте либу в опциях ликовщика или через #pragma
     
  7. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    h0t

    Спасибо.

    Только вот опять проблема..)
    На строчку
    Код (Text):
    1. typedef NTSTATUS (*pZwQuerySystemInformation) (ULONG tag, VOID *buffer, ULONG bufferSize, ULONG *returnedSize);
    выдает
    [Error] ISO C++ forbids declaration of 'NTSTATUS' with no type [-fpermissive]
    [Error] typedef 'NTSTATUS' is initialized (use decltype instead)
    [Error] 'pZwQuerySystemInformation' was not declared in this scope

    что это может быть? Компилятор DevC++
     
  8. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    typedef ULONG
    (WINAPI *pZwQuerySystemInformation) (
    ULONG SystemInformationClass,
    PVOID SystemInformation,
    ULONG SystemInformationLength,
    PULONG ReturnLength
    );
     
  9. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    У тебя NTSTATUS определен ?
    Вообще то конвенция stdcalll на х86
    тоесть так надо
    Код (Text):
    1. typedef NTSTATUS (NTAPI*pZwQuerySystemInformation) (ULONG tag, VOID *buffer, ULONG bufferSize, ULONG *returnedSize);
     
  10. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    XshStasX
    Ну да писал по памяти просто, что-бы донести идею....
     
  11. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    steelfactor

    Спасибо, на одну ошибку меньше:)

    XshStasX
    пробовал, все равно..

    Код (Text):
    1. [Error] ISO C++ forbids declaration of 'NTSTATUS' with no type [-fpermissive]
    2. [Error] typedef 'NTSTATUS' is initialized (use decltype instead)
     
  12. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    NTSTATUS замени на ULONG.
    Если NTSTATUS он тебе так важен, то задефайни его где-нить в своих хидерах.
    NTSTATUS == ULONG, обычно так
     
  13. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    steelfactor

    АААААААААААА!!!!)))))))) Компилицца!!!!!!!!!!))) Спасибо бро!!!!!!! +100500 в карму))
     
  14. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    Еще вопросик) А в каком заголовочном файле лежат эти типы?

    [Error] 'UNICODE_STRING' does not name a type
    [Error] 'KPRIORITY' does not name a type
    [Error] 'VM_COUNTERS' does not name a type
    [Error] 'SYSTEM_THREADS' does not name a type
     
  15. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    ntddk.h
     
  16. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    Fail
    В твоем случае дешевле будет ручками объявить, чем эти ntddk.h подключать, иначе куча ошибок будет. Найди в сети и задефайни их сам.
     
  17. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.500
    Адрес:
    Russia
    Скачайте наконец WDK. Чего вы мучаетесь?
     
  18. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    504
    Установил WDK. Проблемы прибавились:) Я, наверное, чего то не понимаю, но как компилятор может выдавать ошибки на свою же библиотеку?:)

    Код (Text):
    1. #include "stdafx.h"
    2. #include <ntddk.h>
    3.  
    4.  
    5. int _tmain(int argc, _TCHAR* argv[])
    6. {
    7.     return 0;
    8. }
    Из всего кода я добавил только строчку #include <ntddk.h>, и тут у меня посыполось нечто:

    Код (Text):
    1. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8898): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
    2. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8898): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
    3. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C2144: синтаксическая ошибка: перед "int" требуется ";"
    4. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    5. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C2086: int DECLSPEC_DEPRECATED_DDK_WINXP: переопределение
    6. 1>          c:\winddk\7600.16385.1\inc\ddk\wdm.h(8838): см. объявление "DECLSPEC_DEPRECATED_DDK_WINXP"
    7. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C2143: синтаксическая ошибка: отсутствие ";" перед "__stdcall"
    8. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C2433: LARGE_INTEGER: "inline" не разрешается для объявлений данных
    9. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    10. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8909): error C2086: int LARGE_INTEGER: переопределение
    11. 1>          c:\winddk\7600.16385.1\inc\ddk\wdm.h(8840): см. объявление "LARGE_INTEGER"
    12. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8911): error C2146: синтаксическая ошибка: отсутствие ")" перед идентификатором "LargeInteger"
    13. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8911): warning C4229: устаревший элемент: пропуск модификаторов для данных
    14. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8911): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    15. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8913): error C2059: синтаксическая ошибка: )
    16. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8914): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
    17. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(8914): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
    18. 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ktmtypes.h(136): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "TmVirtualClock"
    19. 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ktmtypes.h(136): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    20. 1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ktmtypes.h(136): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    21. 1>c:\winddk\7600.16385.1\inc\ddk\wdm.h(10199): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "VirtualClock"
    и это только малая часть:)
     
  19. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    Попробуй так
    Код (Text):
    1. #include "stdafx.h"
    2.  
    3. namespace  DDK
    4. {
    5.  #include <ntddk.h>
    6. }
    7.  
    8. int _tmain(int argc, _TCHAR* argv[])
    9. {
    10.     return 0;
    11. }
    Когда будешь писать какой то тип/функцию из ntddk в начале нужно будет писать DDK::
    А по поводу ошибок отключи все остальные инклуды для начала.
    или #include <ntddk.h> попробуй первым сделать.
    Или в там есть не известные типы ...
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.500
    Адрес:
    Russia
    Fail

    Вы что курили ?
    Посмотирте хотя б примеры в WDK. Как писать драйвера. Так же обратите внимание на то, какие параметры для компилятора и линкера там выставляются.