![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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- может найдешь что полезное