Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Mapped файл


Stan ©   (2008-04-03 19:39:00) 

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


Loginov Dmitry   (2008-04-05 16:11:00) [1]

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


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


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

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

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


Игорь Шевченко   (2008-04-03 23:22:00) [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;


Loginov Dmitry   (2008-04-03 22:16:00) [4]

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


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


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


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо