Форум: "Система";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c