Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/39: Рейтинг темы: голосов - 39, средняя оценка - 4.87
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
1

ZwQuerySystemInformation

17.07.2012, 17:43. Показов 7612. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа пытаюсь из ntdll.dll загрузить функцию - ZwQuerySystemInformations , но когда я объявляю её вот так -
C++
1
2
3
4
5
6
typedef BOOL  (__stdcall *ZwQuerySystemInformations)(
SYSTEM_INFORMATION_CLASS SystemInformationClass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength
);
компилятор говорит не объявлено - SYSTEM_INFORMATION_CLASS . Как быть в данной ситуации ? Пробовал объвить вот так -
C++
1
SYSTEM_INFORMATION_CLASS SystemInformationClass
но на это он тоже начинает ругаться . Среда - Dev C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2012, 17:43
Ответы с готовыми решениями:

Описание ZwQuerySystemInformation
Здравствуйте, есть у кого-нибудь описание функции ZwQuerySystemInformation? Поисковики мне ничего...

Список процессов через ZwQuerySystemInformation
Здравствуйте..Требуется получить список процессов через функцию ZwQuerySystemInformation...В...

Результаты ZwQuerySystemInformation
Здравствуйте....Требуется получить список процессов в драйвере с помощью функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.07.2012, 19:00 2
Нет такой функции в NtDll.dll. Есть ZwQuerySystemInformation. Только прототип ее уже описан в ddk/ntapi.h, зачем еще раз делать то же самое?
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.07.2012, 19:33  [ТС] 3
Цитата Сообщение от UI Посмотреть сообщение
Нет такой функции в NtDll.dll
извеняюсь опечатка зачем то - s наконце поставил , извини те , а где она есть и как мне её получить в dev c++ ?

Добавлено через 19 минут
Извеняюсь тупанул , всё нашёл , всё сделал
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.07.2012, 19:38 4
Вдруг еще кому понадобится. Для начала -
C++
1
#include <ddk/ntapi.h>
, а потом идем в Project -> Project Options -> Parameters, линкеру жмем Add library or Object, добавляем из папки \Dev-Cpp\lib библиотеку libntdll.a ... Всё, можно ZwQuerySystemInformation начинать использовать, больше делать ничего не надо.
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.07.2012, 20:00  [ТС] 5
ан нет функцию норм воспринимает , а вот при использовании какая то ерунда -
C++
1
2
3
static char Buffer[1000];static DWORD Byet=0x008;
ZwQuerySystemInformation(SystemSummaryMemoryInformation,Buffer,Byet,NULL);
MessageBox(hwnd,Buffer,"",MB_OK);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.07.2012, 20:20 6
Игорь с++, ZwQuerySystemInformation - это функция, которая при ошибке вернет результат типа NTSTATUS. Посмотри, какой результат она тебе выдает. Скорее всего 0xC0000004 (STATUS_INFO_LENGTH_MISMATCH). Так?
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.07.2012, 20:49  [ТС] 7
неа , вот такой - 0xC0000008

Добавлено через 11 минут
Извеняюсь я ещё код чуть другой сделал -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static int a;
      static char Buffer[1000];static DWORD Byet=0x00C;
 
    switch (message)                  /* handle the messages */
    {
      
      case WM_CHAR:
a =  ZwQuerySystemInformation(SystemProcessorInformation,Buffer,Byet,NULL);
 if(a==0){Beep(500,500);
 Byet=GetLastError();
 itoa(Byet,Buffer,16);MessageBox(hwnd,Buffer,"",MB_OK);
 }
 if(a!=0){MessageBox(hwnd,Buffer,"",MB_OK);}          
           break;
Добавлено через 10 минут
причём я заметил какой бы я не делал параметр , возвращает всегда эту ошибку
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.07.2012, 21:51 8
Я не знаю, всегда ли можно вызывать эту функцию с параметром SystemSummaryMemoryInformation (про него в MSDN ни слова, а на сторонних сайтах есть вот такое примечание:
SystemSummaryMemoryInformation
0x014 GET checked build only
, что такое checked build? Почему только он? Непонятно), но вот такой код, к примеру, прекрасно отрабатывает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
case WM_CREATE:
{
   SYSTEM_BASIC_INFORMATION sbi;
   ULONG ReturnLength = 0;
                   
   ZwQuerySystemInformation(SystemBasicInformation, &sbi, 
      sizeof(SYSTEM_BASIC_INFORMATION), &ReturnLength);
                   
   char buffer[256];
   sprintf(buffer, "number processors : %d", sbi.NumberProcessors);
   MessageBoxA(hwnd, buffer, "title", MB_OK);
}
break;
, то есть, ZwQuerySystemInformation рабочая. Да и вообще, не стоило бы пользоваться функциями, для которых написано, что они "may be altered or unavailable in subsequent versions of Windows". Потом проблем не оберешься. Пользуйся рекомендованными средствами вместо недокументированных.
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.07.2012, 21:57  [ТС] 9
спасибо за информацию , если позволите ещё один вопрос - в pdh.dll какая функция(и есть ли она вообще)для вывода на экран загруженности процессора ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.07.2012, 22:56 10
Есть. MS дает пример использования pdh.dll для получения в том числе и загрузки процессора (достаточно в поле szObjectName записать "Processor", а в szCounterName - "% Processor Time" для англоязычной Windows или русские аналоги для русскоязычной, и далее PdhMakeCounterPath + PdhAddCounter + PdhCollectQueryData)
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.07.2012, 23:01  [ТС] 11
Спасибо полез разбираться и переписовать для Dev C++
0
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
18.07.2012, 04:41 12
А мне вот интересно стало: задается символьная переменная Buffer размеров в 1000 символов. А длина ее при вызове функции указывается то как 8, то как 12 символов. Это как???
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
18.07.2012, 13:00  [ТС] 13
GrayWolf, Да там уже по барабану главное , что не меньше , тем более это рабочий вариант , а в нормальном коде всё идёт последовательно.
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7
05.03.2013, 12:09 14
Игорь, вы разобрались с вашей задачей? Если да, то каким образом?
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
05.03.2013, 13:02  [ТС] 15
Student2014, с чем конкретно тебя интересует ?
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7
05.03.2013, 17:27 16
Компилятор не понимает SYSTEM_INFORMATION_CLASS.
Кстати, разумно ли для получения списка всех хендлов системы использовать эту функцию? Какой тогда аргумент надо передавать?
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
05.03.2013, 17:46  [ТС] 17
Цитата Сообщение от UI Посмотреть сообщение
Вдруг еще кому понадобится. Для начала -
Код C++
1
#include <ddk/ntapi.h>
, а потом идем в Project -> Project Options -> Parameters, линкеру жмем Add library or Object, добавляем из папки \Dev-Cpp\lib библиотеку libntdll.a ... Всё, можно ZwQuerySystemInformation начинать использовать, больше делать ничего не надо.
Вот это вы читали ?
0
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 7
05.03.2013, 17:54 18
Читал, но я работаю в VS2010.
А по второму вопросу что скажете?
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
05.03.2013, 18:03  [ТС] 19
Цитата Сообщение от Student2014 Посмотреть сообщение
А по второму вопросу что скажете?
Понятие не имею , я для чего то другого использовал , правда уже даже не помню для чего.
0
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
11.03.2013, 01:04 20
Цитата Сообщение от Student2014 Посмотреть сообщение
Компилятор не понимает SYSTEM_INFORMATION_CLASS.
#include "winternl.h"
Цитата Сообщение от Student2014 Посмотреть сообщение
Кстати, разумно ли для получения списка всех хендлов системы использовать эту функцию? Какой тогда аргумент надо передавать?
Ты о SYSTEM_PROCESS_INFORMATION?
0
11.03.2013, 01:04
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru