Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.034 c
4-1081046081
Prov
2004-04-04 06:34
2004.05.23
SW_HIDE


3-1083323866
ViJen
2004-04-30 15:17
2004.05.23
Сложное вычисляемое поле в Interbase


3-1083141496
Andrey V.
2004-04-28 12:38
2004.05.23
Создание базы


3-1082840316
kaif
2004-04-25 00:58
2004.05.23
Есть ли способ ALTER COLUMN для COMPUTED BY ?


4-1080995477
Yozh_Programmer
2004-04-03 16:31
2004.05.23
Какое сообщение юзать?