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

Вниз

Mapped файл   Найти похожие ветки 

 
Stan   (2008-04-03 19:39) [0]

Как узнать что файл на данный момент проецируется в память (mapped) какой то программой. Интересует сам факт(да или нет), имя программы и остальное не нужно.
К примеру шрифты в папке Fonts, файл Arial.ttf - всегда мэпирован.


 
Игорь Шевченко ©   (2008-04-03 20:32) [1]


> Как узнать что файл на данный момент проецируется в память
> (mapped) какой то программой


http://code.progler.ru/get/191 - может найдешь что полезное


 
Loginov Dmitry ©   (2008-04-03 22:16) [2]

> Как узнать что файл на данный момент проецируется в память
> (mapped) какой то программой. Интересует сам факт(да или
> нет), имя программы и остальное не нужно.


Уменьши ему размер с помощью SetEndOfFile - узнаешь... ;)


 
Игорь Шевченко ©   (2008-04-03 23:22) [3]

Пример из [1] надо слегка дополнить

procedure TfMain.PaintBoxSelectedMouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
 EntryIndex, EntryX, EntryY : Integer;
 GridHeight:  Integer;
 GridWidth :  Integer;
 PaintBox : TPaintBox;
 Address: DWORD;
begin
 PaintBox := Sender as TPaintBox;
 if Button = mbLeft then begin
   GridHeight := PaintBox.Height div 32;
   GridWidth  := PaintBox.Width  div 32;
   EntryX := (X div GridWidth);
   EntryY := (Y div GridHeight);
   EntryIndex := EntryY * 32 + EntryX;
   Address := DWORD(DWORD(EntryIndex) * FSelectedMemory.EntrySize) +
     FSelectedMemory.StartAddress;
   lbSelectedPage.Caption := Format("%.8x", [Address]);
   if FSelectedMemory.Map[EntryIndex] = MemImage then
     lbContents.Caption := GetModuleFileNameForAddress(Address)
   else if FSelectedMemory.Map[EntryIndex] = MemMapped then
     lbContents.Caption := GetMappedFileNameForAddress(Address)
   
 else
     lbContents.Caption := "Unknown";
 end;
end;


function TfMain.GetMappedFileNameForAddress(Address: DWORD): string;
var
 ModuleName: array[0..1024] of char;
 rc: DWORD;
 mbi : TMemoryBasicInformation;
begin
 rc := VirtualQueryEx(FCurrentProcess, Pointer(Address), mbi, SizeOf(mbi));
 if rc <> SizeOf(mbi) then
   raise Exception.Create(SysErrorMessage(GetLastError));
 rc := GetMappedFileName(FCurrentProcess, Pointer(mbi.AllocationBase),
     ModuleName, SizeOf(ModuleName));
 if rc > 0 then
   Result := ModuleName
 else
   Result := SysErrorMessage(GetLastError);
end;


 
Stan   (2008-04-04 00:47) [4]

>>Уменьши ему размер с помощью SetEndOfFile - узнаешь

Собственно лекарство против этого и нужно. SetEndOfFile - вперед можно, назад нет. Вкратце - использую для затирания "хвостов" файлов.


 
Loginov Dmitry ©   (2008-04-05 16:11) [5]

> Собственно лекарство против этого и нужно. SetEndOfFile
> - вперед можно, назад нет


GetLastError не спасет? ;)



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
15-1233097754
Германн
2009-01-28 02:09
2009.03.29
Ох уж мне эти писатели "кривых" драйверов!


4-1207309857
DiamondShark
2008-04-04 15:50
2009.03.29
Как узнать, что приложение запущено в терминальной сессии?


15-1232265533
{RASkov}
2009-01-18 10:58
2009.03.29
Возможности вирусов заражать из сети


15-1232536106
Ламо777
2009-01-21 14:08
2009.03.29
Бесплатный UML для AS3


2-1233414166
SkyN
2009-01-31 18:02
2009.03.29
получить содержимое и нажать кнопку страницы открытой в браузере