Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
3-71544
Def
2003-09-02 11:46
2003.09.22
CommitRetaining отправляет в базу не все обновления


1-71610
mfender
2003-09-09 04:05
2003.09.22
TIME_ZONE, или как определить сторону света.


1-71748
begemot
2003-09-07 22:39
2003.09.22
Combobox


1-71650
AVK2
2003-09-06 04:04
2003.09.22
2 варианта прерывания вложенного цикла. Какой правильнее?


6-71807
Arhangel
2003-07-21 11:48
2003.09.22
indy компонент - IdMappedPortTCP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский