Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.049 c
1-1208685519
Kolan
2008-04-20 13:58
2009.03.29
Сложный кросс таб отчет. Варианты реализации.


2-1233138545
Oleg_teacher
2009-01-28 13:29
2009.03.29
Узнать могу ли я создать файл в папке


1-1207988879
Timoha
2008-04-12 12:27
2009.03.29
Ярлыки в Delphi


15-1232104188
Артур Пирожков
2009-01-16 14:09
2009.03.29
Музыка. Много. Где скачать?


2-1233746718
Asker
2009-02-04 14:25
2009.03.29
как завершить приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский