Форум: "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.033 c