Форум: "WinAPI";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизФункция NtQuerySystemInformation - разве на win2000 не работает ? Найти похожие ветки
← →
msgipss (2005-11-04 07:53) [0]Здравствуйте мастера,
Помогите разобраться с проблемой: для получения списка процессов пытаюсь воспользоваться функцией NtQuerySystemInformation, на winxp, win2003 функция работает и возвращает реальный размер структуры, на win2k возвращает размер структуры равной 0. Хотя в nsdn конечно написано, что не рекомендуют ее использовать, но однако и ограничений нет на использование в winnt win2k (в winnt правда не тестировал). Код прилагаю.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
PSYSTEM_THREADS = ^SYSTEM_THREADS;
SYSTEM_THREADS = packed record
KernelTime: LARGE_INTEGER;
UserTime: LARGE_INTEGER;
CreateTime: LARGE_INTEGER;
WaitTime: ULONG;
StartAddress: Pointer;
UniqueProcess: DWORD;
UniqueThread: DWORD;
Priority: Integer;
BasePriority: Integer;
ContextSwitchCount: ULONG;
State: Longint;
WaitReason: Longint;
end;
PSYSTEM_PROCESS_INFORMATION = ^SYSTEM_PROCESS_INFORMATION;
SYSTEM_PROCESS_INFORMATION = packed record
NextOffset: ULONG;
ThreadCount: ULONG;
Reserved1: array [0..5] of ULONG;
CreateTime: FILETIME;
UserTime: FILETIME;
KernelTime: FILETIME;
ModuleNameLength: WORD;
ModuleNameMaxLength: WORD;
ModuleName: PWideChar;
BasePriority: ULONG;
ProcessID: ULONG;
InheritedFromUniqueProcessID: ULONG;
HandleCount: ULONG;
Reserved2 : array[0..1] of ULONG;
PeakVirtualSize : ULONG;
VirtualSize : ULONG;
PageFaultCount : ULONG;
PeakWorkingSetSize : ULONG;
WorkingSetSize : ULONG;
QuotaPeakPagedPoolUsage : ULONG;
QuotaPagedPoolUsage : ULONG;
QuotaPeakNonPagedPoolUsage : ULONG;
QuotaNonPagedPoolUsage : ULONG;
PageFileUsage : ULONG;
PeakPageFileUsage : ULONG;
PrivatePageCount : ULONG;
ReadOperationCount : LARGE_INTEGER;
WriteOperationCount : LARGE_INTEGER;
OtherOperationCount : LARGE_INTEGER;
ReadTransferCount : LARGE_INTEGER;
WriteTransferCount : LARGE_INTEGER;
OtherTransferCount : LARGE_INTEGER;
ThreadInfo: array [0..0] of SYSTEM_THREADS;
end;
function NtQuerySystemInformation(SystemInformationClass: DWORD; SystemInformation : Pointer; SystemInformationLength : DWORD; var ReturnLength: DWORD): DWORD; stdcall; external "ntdll.dll";
var Form1: TForm1;
SystemInformation: PSYSTEM_PROCESS_INFORMATION;
ReturnLength: DWORD;
const SystemProcessesAndThreadsInformation = 5;
STATUS_INFO_LENGTH_MISMATCH = $C0000004;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if NtQuerySystemInformation(SystemProcessesAndThreadsInformation,SystemInformation, 0, ReturnLength) <> STATUS_INFO_LENGTH_MISMATCH then Exit;
showmessage(SysErrorMessage(GetLastError));
showmessage(IntToStr(ReturnLength));
end;
end.
Просьба сильно не пинать структуру в инете нашел, (где не помню *( )
← →
BiN © (2005-11-04 15:20) [1]Всё у тебя неправильно.
Вот тут есть пример
http://www.schevchenko.net.ru/SRC/QuerySystemInformation_60.zip
← →
msgipss (2005-11-04 17:52) [2]BiN © (04.11.05 15:20) [1]
огромное сенькс - сел разбираться
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c