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

Вниз

ReadProcessMemory - Как узнать размер процесса в памяти?   Найти похожие ветки 

 
jab~   (2004-02-20 17:55) [0]

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

Пример того что я написал:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   OpenDialog1: TOpenDialog;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
const
 BUFFER_SIZE = 4096;
 BUFFER_LIMIT = BUFFER_SIZE - 1;
 ReadBase: Pointer = Pointer($00401000);

var
 SI: TStartupInfo;
 PI: TProcessInformation;
 ExeFile: string;
 Buf: array [0..BUFFER_LIMIT] of Byte;
 ReadBytes: Cardinal;
 I: Integer;
begin
if OpenDialog1.Execute then begin
 ExeFile:=OpenDialog1.FileName;
 try
   if ParamCount > 0 then ExeFile := ParamStr(1);
   FillChar(SI, SizeOf(SI), $00);
   FillChar(PI, SizeOf(PI), $00);
   SI.cb := SizeOf(SI);
   if not CreateProcess(PChar(ExeFile), "", nil, nil, False, 0, nil, nil, SI, PI) then
     RaiseLastWin32Error;
   try
     if not ReadProcessMemory(PI.hProcess, ReadBase, @Buf, BUFFER_SIZE, ReadBytes) then
      RaiseLastWin32Error;
      Memo1.Lines.Text:="Read "+IntToStr(ReadBytes)+" bytes:";
      Memo1.Lines.Add("");
     for I := 0 to ReadBytes-1 do
     begin
       Memo1.Lines.Text:=Memo1.Lines.Text+" "+IntToHex(Buf[I], 2);
       if (I+1) mod 16 = 0 then Memo1.Lines.Add("");
     end;
     Memo1.Lines.Add("OK");
   finally
     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
   end;
 except
   on E: EXception do
   begin
     Memo1.Lines.Add(E.Message);
     Halt(1);
   end;
 end;
end;
end;

end.


 
Игорь Шевченко ©   (2004-02-20 18:08) [1]

Рихтера читать. Вдумчиво.


 
Юрий Зотов ©   (2004-02-21 16:21) [2]

> jab~   (20.02.04 17:55)  
> А как узнать полный размер памяти который занимает процесс?

Можно и не узнавать - ответ заранее известен. Ровно 4 гигабайта.


 
jab~   (2004-02-23 09:09) [3]

to Юрий Зотов
Это максимальный размер... Мне узнать сколько он в данный момент занимает.

to Игорь Шевченко
Читать медленно и вдумчиво.. :):):)


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

jab~   (23.02.04 09:09)


> Это максимальный размер... Мне узнать сколько он в данный
> момент занимает


Читать Рихтера два раза. Читать про функцию VirtualQueryEx в книжке Рихтера.


 
Digitman ©   (2004-02-24 17:01) [5]

$00401000

а это что такое ? и почему ?

и почему то, что лежит в адресах НИЖЕ упомянутого, ты не считаешь  никоим образом относящимся к процессу ??



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

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

Наверх




Память: 0.48 MB
Время: 0.031 c
3-1080125571
Внук
2004-03-24 13:52
2004.04.25
Передача сессии извне


1-1081569135
Николаиус
2004-04-10 07:52
2004.04.25
Програма может вносить изменения в реестр?


7-1077927199
BBCHa
2004-02-28 03:13
2004.04.25
Словить Ctrl+Enter


8-1074866170
Samerly
2004-01-23 16:56
2004.04.25
Существует ли help к FastDIB?


7-1077382967
Maxkat
2004-02-21 20:02
2004.04.25
Установка программ