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

Вниз

Функция 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.019 c
2-1134676315
Чакуока
2005-12-15 22:51
2006.01.08
Переход на Delphi7


14-1134503620
Gero
2005-12-13 22:53
2006.01.08
Ветка-долгожитель


3-1131991173
ivb2001
2005-11-14 20:59
2006.01.08
TClientDataSet не видит TDatasetProvider


10-1110228903
Homa_Programer
2005-03-07 23:55
2006.01.08
Редактор формул


1-1133936384
KvORubin
2005-12-07 09:19
2006.01.08
Как в МЕМО1 в первой строке