XE8 и GetModuleFileNameEx....
От: istok20  
Дата: 28.04.16 16:50
Оценка:
Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично' при том что перед этим успешно вызывается SetDebugPriv и UAC в винде отключен. Подобный код скомпиленный из Delphi7 работает нормально. Куда копать???


function GetPathFromPID(const PID: cardinal): string;
var
 hProcess: THandle;
 path: array[0..MAX_PATH - 1] of char;
begin
 hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, PID);
 if hProcess <> 0 then
   try
     if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) = 0 then
       RaiseLastOSError;

     result := path;
   finally
     CloseHandle(hProcess)
   end
 else
   RaiseLastOSError;
end;

function SetDebugPriv: Boolean;
var
 Token: THandle;
 tkp: TTokenPrivileges;
begin
 Result := false;
 if OpenProcessToken(GetCurrentProcess,
   TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
 begin
   if LookupPrivilegeValue(nil, PChar('SeDebugPrivilege'),
     tkp.Privileges[0].Luid) then
   begin
     tkp.PrivilegeCount := 1;
     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
     Result := AdjustTokenPrivileges(Token, False,
       tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
   end;
 end;
end;
Re: XE8 и GetModuleFileNameEx....
От: BlackEric http://black-eric.lj.ru
Дата: 28.04.16 21:00
Оценка:
Здравствуйте, istok20, Вы писали:

В юникодные строки.
https://github.com/BlackEric001
Re[2]: XE8 и GetModuleFileNameEx....
От: istok20  
Дата: 28.04.16 21:28
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Здравствуйте, istok20, Вы писали:


BE>В юникодные строки.


попробовал с AnsiChar и GetModuleFileNameExA — ошибка та же...
Re: XE8 и GetModuleFileNameEx....
От: okman Беларусь https://searchinform.ru/
Дата: 29.04.16 06:09
Оценка:
Здравствуйте, istok20, Вы писали:

I>Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично'...


GetModuleFileNameEx не работает, если вызывается из 32-битного процесса, а целевой процесс 64-битный.
Правда, смущает это:

I>Подобный код скомпиленный из Delphi7 работает нормально.
Re[2]: XE8 и GetModuleFileNameEx....
От: istok20  
Дата: 29.04.16 08:32
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, istok20, Вы писали:


I>>Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично'...


O>GetModuleFileNameEx не работает, если вызывается из 32-битного процесса, а целевой процесс 64-битный.



чем заменить?
Re[2]: XE8 и GetModuleFileNameEx....
От: istok20  
Дата: 29.04.16 08:34
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, istok20, Вы писали:


I>>Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично'...


O>GetModuleFileNameEx не работает, если вызывается из 32-битного процесса, а целевой процесс 64-битный.

O>Правда, смущает это:

I>>Подобный код скомпиленный из Delphi7 работает нормально.


сори, вы правы, там вызывался GetProcessImageFileName... вопрос закрыт, спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.