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

Вниз

GetMappedFileName   Найти похожие ветки 

 
R4D][   (2003-07-09 19:24) [0]

Вот в этом тексте GetMappedFileName всегда возвращает 0. Почему?(Передается заведомо "нормальный хэндл"):

function GetFileNameFromHandle(const FileHandle: THANDLE): PChar;
var
FileSize: DWORD;
hFileMap: THANDLE;
pMem : Pointer;
FileName: PChar;
begin
// Не поддерживаем большие фаилы
FileSize:=GetFileSize(FileHandle,nil);
// Создаем file mapping
hFileMap:=CreateFileMapping(FileHandle,nil,PAGE_READWRITE,0,FileSize,nil);
// Если че не так - уходим и возвращаем nil
if hFileMap=0 then
begin
ShowMessage("1");
Result:=nil;
abort;
end;
// Мапируем фаил
pMem:=MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, FileSize);
// Если че не так - уходим и возвращаем nil
if pMem=nil then
begin
ShowMessage("2");
Result:=nil;
abort;
end;
// Находим имя фаила по его проекции на память
GetMem(FileName, 255);
if GetMappedFileName(GetCurrentProcess,pMem,FileName,255)=0 then
begin
ShowMessage("3");
ShowMessage(FileName);
FreeMem(FileName);
Result:=nil;
( FileName)
Вот в этом тексте GetMappedFileName всегда возвращает 0. Почему?(Передается заведомо "нормальный хэндл"):

function GetFileNameFromHandle(const FileHandle: THANDLE): PChar;
var
FileSize: DWORD;
hFileMap: THANDLE;
pMem : Pointer;
FileName: PChar;
begin
// Не поддерживаем большие фаилы
FileSize:=GetFileSize(FileHandle,nil);
// Создаем file mapping
hFileMap:=CreateFileMapping(FileHandle,nil,PAGE_READWRITE,0,FileSize,nil);
// Если че не так - уходим и возвращаем nil
if hFileMap=0 then
begin
ShowMessage("1");
Result:=nil;
abort;
end;
// Мапируем фаил
pMem:=MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, FileSize);
// Если че не так - уходим и возвращаем nil
if pMem=nil then
begin
ShowMessage("2");
Result:=nil;
abort;
end;
// Находим имя фаила по его проекции на память
GetMem(FileName, 255);
if GetMappedFileName(GetCurrentProcess,pMem,FileName,255)=0 then
begin
ShowMessage("3");
ShowMessage(FileName);
FreeMem(FileName);
Result:=nil;
abort;
end;
ShowMessage(FileName);
FreeMem(FileName);
end;


Если это поможет, то под SoftIce"ом видно, что после NtQueryVirtualMemory происходит переход к
xor eax,eax
ret
(вкратце, конечно).
Еще GetLastError возвращает непонятное 59(Непредвиденная сетевая ошибка).


 
Ученик ©   (2003-07-09 22:55) [1]

http://support.microsoft.com/default.aspx?scid=kb;en-us;Q320133


 
R4D][   (2003-07-10 10:36) [2]

Спасибо. Значит с моим "продуктом" надо распространять еще и дополнительные 17 метров. В стиле Microsoft :(. Ученик, а ты не знаешь где можно отдельно скачать фаил psapi.dll без Service Pack"ов?


 
3APA3A ©   (2003-07-10 17:32) [3]

Может это я не то говорю, но где у тебя в CreateFileMapping имя
объекта? Разве nil сработает?


 
R4D][   (2003-07-10 18:32) [4]

nil - Работает, более того, если тебе не нужно, чтобы была доступна межпроцессная ты должен указывать nil. Хотя я и указывать на всякий случай пробовал - все равно не получилось :(.


 
icWasya ©   (2003-07-11 09:26) [5]

GetMappedFileName
The GetMappedFileName function checks if the specified address is within a memory-mapped file in the address space of the specified process. If so, the function returns the name of the memory-mapped file.

DWORD GetMappedFileName(
HANDLE hProcess, // handle to process
LPVOID lpv, // address to verify
LPTSTR lpFilename, // file name buffer
DWORD nSize // size of buffer
);
Parameters
hProcess
[in] Handle to the process.
lpv
[in] Specifies the address to verify.
lpFilename
[out] Pointer to the buffer that receives the name of the memory-mapped file to which the address specified by lpv belongs.
nSize
[in] Specifies the size, in bytes, of the lpFilename buffer.
Return Value
If the function succeeds, the return value specifies the length of the string copied to the buffer.


If the function fails, the return value is zero. To get extended error information, call GetLastError.

Requirements
Windows NT/2000 or later: Requires Windows NT 4.0 or later.



 
R4D][   (2003-07-11 15:29) [6]

И чего :)???...
If the function fails, the return value is zero
Да и GetLastError установлен. Нет, по-моему Ученик прав, ибо в msdn написано черным по белому:"БАГ, чтобы исправить качай SP1".
Да и появился новый вопрос на эту тему - противоречит ли распространение psapi.dll вместе с моей прогой лиц. соглашению с Microsoft?



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

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

Наверх




Память: 0.48 MB
Время: 0.026 c
7-71977
Dimaxx
2003-07-09 23:35
2003.09.22
Как получить полный путь к папке профиля текущего пользователя?


14-71905
Nik8.
2003-09-03 11:27
2003.09.22
Прикольная история недавно прочитал


6-71784
ERRORMAN
2003-07-23 19:07
2003.09.22
Получение информации


6-71815
shelest
2003-07-24 15:33
2003.09.22
Поиск файлов на отделбном компьютере в локальной сети.


14-71845
DiamondShark
2003-09-01 14:35
2003.09.22
Поздравляю всех.