Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

NtQuerySystemInformation   Найти похожие ветки 

 
mbgmz   (2004-04-02 18:08) [0]

Здравствуйте! Я отчаяно пытаюсь найти в
NtQuerySystemInformation
информацию о том
сколько какой процесс занимает процентов процессора.
Но это мне никак не удаётся, там есть всё что угодно,
кроме этого.
И ещё вопрос, как отловить процесс,
который повесил хук на NtQuerySystemInformation
и прячет себя таким образом?


 
Digitman ©   (2004-04-02 18:12) [1]

беги со всех ног отсель !!!
сейчас Игорь тебя "разложит по швам" по самое нехочу


> Я отчаяно пытаюсь


ничерта ты не пытаешься

иначе бы привел фрагменты того, ЧТО тебе КОНКРЕТНО непонятно


 
mbgmz   (2004-04-02 19:09) [2]

type
   TForm1 = class(TForm)
       Button1: TButton;
       sg: TStringGrid;
       procedure Button1Click(Sender: TObject);

   private
       { Private declarations }
   public
       { Public declarations }
   end;  
PProcessInfo = ^TProcessInfo;
   TProcessInfo = record
       dwOffset: DWORD;
       dwThreadCount: DWORD;
       dwUnkown1: array[1..6] of DWORD;
       ftCreationTime: TDateTime;
       dwUnkown2: DWORD;
       dwUnkown3: DWORD;
       dwUnkown4: DWORD;
       dwUnkown5: DWORD;
       dwUnkown6: DWORD;
       pszProcessName: PWideChar;
       dwBasePriority: DWORD;
       dwProcessID: DWORD;
       dwParentProcessID: DWORD;
       dwHandleCount: DWORD;
       dwUnkown7: DWORD;
       dwUnkown8: DWORD;
       dwVirtualBytesPeak: DWORD;
       dwVirtualBytes: DWORD;
       dwPageFaults: DWORD;
       dwWorkingSetPeak: DWORD;
       dwWorkingSet: DWORD;
       dwUnkown9: DWORD;
       dwPagedPool: DWORD;
       dwUnkown10: DWORD;
       dwNonPagedPool: DWORD;
       dwPageFileBytesPeak: DWORD;
       dwPageFileBytes: DWORD;
       dwPrivateBytes: DWORD;
       dwUnkown11: DWORD;
       dwUnkown12: DWORD;
       dwUnkown13: DWORD;
       dwUnkown14: DWORD;
       OTHERIO: DWORD;
       dwUnkown16: DWORD;
       dwUnkown17: DWORD;
       dwUnkown18: DWORD;

       dwUnkown19: DWORD;
       dwUnkown20: DWORD;
       dwUnkown21: DWORD;
       dwUnkown22: DWORD;

       dwUnkown23: DWORD;
       dwUnkown24: DWORD;
       dwUnkown25: DWORD;
       dwUnkown26: DWORD;
       dwUnkown27: DWORD;
       dwUnkown28: DWORD;
       dwUnkown29: DWORD;
       dwUnkown30: DWORD;

       dwUnkown31: DWORD;
       dwUnkown32: DWORD;

       dwUnkown33: DWORD;
       dwUnkown34: DWORD;
       dwUnkown35: DWORD;
       dwUnkown36: DWORD;
       dwUnkown37: DWORD;
       dwUnkown38: DWORD;
       dwUnkown39: DWORD;
       dwUnkown40: DWORD;

       ati: array[1..1] of TThreadInfo;
   end;
   TNtQSI = function(Nmb: integer; Ptr: Pointer; Size1, Size2: integer): DWORD; stdcall;

var
   Form1: TForm1;
   pe: TProcessEntry32;
   snap: THandle;
   NtQSI: TNtQSI;
   Buf: array[1..2048000] of char;
   PrcInfo: PProcessInfo;
   hLib: DWORD;
   Ptr: Pointer;
   Cur: DWORD;
   tmpStr: string;
procedure GetProcessList();

implementation

{$R *.dfm}

procedure GetProcessList();
var
   i: integer;
begin
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           begin}// WinNT/2000/XP
   hLib := LoadLibrary("NTDLL.DLL");
   if hLib > 0 then
   begin
        i := 0;
        inc(i);
       @NtQSI := GetProcAddress(hLib, "NtQuerySystemInformation");
       NtQSI(5, @Buf, 2048000, 0);
       Cur := 1;
       Ptr := Addr(Buf[Cur]);
       PrcInfo := Ptr;
       tmpStr := PrcInfo.pszProcessName;
       while PrcInfo.dwOffset <> 0 do
       begin
           inc(i);
           Cur := Cur + PrcInfo.dwOffset;
           Ptr := Addr(Buf[Cur]);
           PrcInfo := Ptr;
           //>
           Form1.sg.ColWidths[i] := 90;
           form1.sg.Rows[i].Add(PrcInfo.pszProcessName);
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwProcessID));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwThreadCount));

           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown2));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown3));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown4));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown5));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown6));

           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwBasePriority));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwParentProcessID));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown8));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown9));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown10));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown12));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown13));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown14));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.OTHERIO));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown16));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown17));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown18));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown19));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown20));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown21));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown22));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown23));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown24));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown25));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown26));

           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown27));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown28));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown29));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown30));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwVirtualBytesPeak));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwVirtualBytes));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwPageFaults));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwWorkingSetPeak));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwWorkingSet));
           form1.sg.Rows[i].Add(inttostr(PrcInfo.dwPagedPool));
          form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown31));
      form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown32));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown33));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown34));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown35));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown36));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown37));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown38));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown39));
       form1.sg.Rows[i].Add(inttostr(PrcInfo.dwUnkown40));
       end;
   end;
   FreeLibrary(hLib);
end;


 
mbgmz   (2004-04-02 19:11) [3]

наверно, если бы не пытался, то и не писал бы ничего
у меня складывается впечатление что в ntdll нет процедуры, с помощью которой можно получить эту информацию,наверно надо искать где-то ещё


 
Игорь Шевченко ©   (2004-04-02 21:04) [4]

http://www.schevchenko.net.ru/SRC/QuerySystemInformation_60.zip

Обратить внимание на поля
   UserTime : LARGE_INTEGER;
   KernelTime : LARGE_INTEGER;
в структуре SYSTEM_PROCESSES_NTхххх
в модуле NTDLL.PAS


 
Германн ©   (2004-04-03 01:10) [5]

2 Игорь Шевченко ©   (02.04.04 21:04) [4]
А почему Игорь, этой ссылки нет в Вашей в анкете? Какие правила пользования этим источником?


 
Alex Konshin ©   (2004-04-03 11:40) [6]

2 Игорь Шевченко
Кстати, на Jedi лежит аж целых два варианта Native API, и оба не наши :). На беглый взгляд - очень неполные и комментариев нет.


 
Игорь Шевченко ©   (2004-04-03 16:23) [7]

Alex Konshin ©   (03.04.04 11:40)

Кстати, на Jedi я не нашел, сколько не искал.
Твои объявления я почти интергрировал к себе (с (c) в источниках разумеется :)), сейчас у меня 150 функций, коллекция постоянно пополняется, правда, комментарии все на русском языке.
Если интересно, поделюсь.

Германн ©   (03.04.04 01:10)


>  почему Игорь, этой ссылки нет в Вашей в анкете?


Исправим.


> Какие правила пользования этим источником?


Freeware, без всяких ограничений. Можно упомянуть в (c) :))


 
Alex Konshin ©   (2004-04-03 23:22) [8]

А, там обе ссылки на одно и то же:
http://homepages.borland.com/jedi/cms/modules/apilib/


 
Игорь Шевченко ©   (2004-04-03 23:48) [9]

Alex Konshin ©   (03.04.04 23:22)

Спасибо.

Вообще, суровая работа, если учесть, что в последней мне известной версии NTDLL почти две тысячи функций (без учета Zw...)

Еще понравилось "also interesting is ntoskrnl.exe"  

Каким образом прототипы функций из ntoskrnl.exe могут помочь программисту на Delphi, интересно ?


 
Alex Konshin ©   (2004-04-04 06:28) [10]

Можно предложить им наши наработки.
Там уже есть мой winsock2 (старый, но все-таки).


 
Игорь Шевченко ©   (2004-04-04 12:18) [11]

Alex Konshin ©   (04.04.04 06:28)

Я принципиально все комментарии пишу на русском, если это условие не будет серьезным препятствием, то я готов поделиться.


 
Alex Konshin ©   (2004-04-04 12:29) [12]

Естественно, они хотят комментарии на английском :).


 
Игорь Шевченко ©   (2004-04-04 12:55) [13]

Alex Konshin ©   (04.04.04 12:29)

Тогда процесс может здорово затянуться, поскольку русскоязычная версия у меня будет приоритетным направлением, и тому есть обяснение - в сети гуляет масса сишных прототипов функций NTDLL с английскими комментариями, а с русскими мне, кроме своих, встречались только объявления (c) 1997 Алексей Коберниченко,
причем, комментариями та версия не изобилует.


 
mbgmz   (2004-04-04 18:39) [14]

>  Обратить внимание на поля
>     UserTime : LARGE_INTEGER;
>     KernelTime : LARGE_INTEGER;

1.вы предлагаете мне по этим параметрам самому вычислять процент занятости процессора???

2. проясните ситуацию с хуками, или кто-то мне задурил голову
что процесс может сделать себя невидимым?

>беги со всех ног отсель !!!

allright, а помочь человеку, который недавно узнал что такое dll.
слабо?


 
Игорь Шевченко ©   (2004-04-04 20:22) [15]

mbgmz   (04.04.04 18:39)

1) Конечно. Именно так он и вычисляется.


> 2. проясните ситуацию с хуками, или кто-то мне задурил голову
> что процесс может сделать себя невидимым?


Путем перехвата NtQuerySystemInformation - может. Можно узнать, что функция перехвачена через сравнение адреса явного импорта или результата вызова GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation") c GetModuleHandle("ntdll.dll") - если явный импорт или GetProcAddress вернул меньшее значение, то функция скорее всего перехвачена.


> а помочь человеку, который недавно узнал что такое dll.
> слабо?


А человеку матчасть поучить слабо ?


 
mbgmz   (2004-04-05 00:03) [16]

спасибо за помощь.
подскажите только что читать.
в "кнопочной" литературе, вроде архангельского
очень мало информации о таких вещах
как явный и неявный импорт....


 
Игорь Шевченко ©   (2004-04-05 00:12) [17]

mbgmz   (05.04.04 00:03)

Джеффри Рихтер "Программирование для Win32".
В электронном виде можно скачать на www.podgoretsky.com



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.047 c
14-1083157523
FlankerX
2004-04-28 17:05
2004.05.23
Microsoft vs Borland


1-1083684435
Schummi
2004-05-04 19:27
2004.05.23
Закрытие TTabSheet


3-1082975048
Litr
2004-04-26 14:24
2004.05.23
Заполнить поле значением по умолчанию


7-1082036240
VasRog
2004-04-15 17:37
2004.05.23
API: ScrollDC


7-1081378840
nec
2004-04-08 03:00
2004.05.23
Чтение и запись в COM-порт в Win XP/NT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский