Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > .NET для новичков > ZwQuerySystemInformation && C# |
Автор: CL0NE 9.9.2009, 03:29 | ||||||||||||||||||||||||||
Синтаксис данной функции (в дополнение к ссылке на мсдн - http://msdn.microsoft.com/en-us/library/ms725506(VS.85).aspx):
Привел я ее к такому виду в своем коде:
Первый параметр указывает на тип получаемой информации:
сделал его енумерейшном:
Ради теста использовал первый вариант, самый простой:
Второй параметр -
Следовательно, при первом варианте получим структуру:
Привел ее к "надлежащему" виду:
При вызове функция возвращает код NTSATUS
Первый при удачном вызове, третий - при слишком маленьком буфере. Третий параметр у функции - размер выделенного нами буфера, четвертый - обьем байт, записанных в буфер. Мой тестовый код, попытка использовать данную функцию:
Ну а теперь, самое "вкусное" (смысл топика ![]()
|
Автор: mihryak 9.9.2009, 21:01 | ||
а откуда ты взял значения энума SYSTEM_INFORMATION_CLASS? везде, где попадались, SystemBasicInformation был равен 0 например, http://processhacker.sourceforge.net/hacking/structs.php#systembasicinformation если взять оттуда и структуру
то на домашней висте успешно выдалось 2 процессора а вот на рабочем 2003 сервере не прокатило тем не менее, и там, и там по коду 0x02c мне выдавался требуемый размер памяти, равный 172, ни из твоего варианта структуры, ни из моего такой размер не получить, у нас 44 так, кстати, я и убедился, что 0 - подходящее значение, при нём и при 62(0x3E) выдавалось 44 требуемых байта (при 62 те же значения полей структуры). ни одно другое число из интервала 0..99999999 44 не дало как бы то ни было, ZW-функции не предназначены для использования вне внутренностей системы, советую поискать альтернативный вариант. тот же МСДН рекомендует для получения числа процессоров http://msdn.microsoft.com/en-us/library/ms724381(VS.85).aspx |
Автор: CL0NE 10.9.2009, 00:13 | ||||||||
Вообще-то мне нужа функция ради SystemProcessorPerformanceInformation. Ибо функция GetSystemTimes, предлагаемая, как альтернатива, возвращает суммарную загрузку процессора. Так же само и WMI (который я использовал до этого, причем, как на каком-то форуме упоминалось, добавляет загрузку процессора на 10% Оо). А хочется на каждое ядро ![]()
Только что, погуглив, нашел где я их взял. http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/System%20Information/SYSTEM_INFORMATION_CLASS.html#SystemBasicInformation о_О Спросонья я почемуто посчитал
Мораль: никогда не пишите код на сонную голову! ![]() mihryak спасибо огромное, все работает! |
Автор: CL0NE 13.9.2009, 05:39 | ||||||
все. да не все ![]() ![]() Это при использовании SystemProcessorPerformanceInformation
Первое поле - время, проведенное процессором в режиме бездействия, измеряется в тиках. Берем определенный промежуток (n tick, тик- 100 наносекунд, если не ошибаюсь). Замеряем время простоя процессора в начале промежутка и в конце. Делим на время промежутка и получаем процент бездействия. Отняв от единицы - получим процент загрузки ![]()
что ж, будем дальше ломать код ![]() p.s.: сделал поправку, т.к. упустил момент о размерах типов в С++ (long - 32-bit signed integer), C# (64-bit signed integer.) Теперь появилась проблема... постоянно выводит загрузку 100% оО |