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;
Здравствуйте, istok20, Вы писали:
I>Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично'...
GetModuleFileNameEx не работает, если вызывается из 32-битного процесса, а целевой процесс 64-битный.
Правда, смущает это:
I>Подобный код скомпиленный из Delphi7 работает нормально.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, istok20, Вы писали:
I>>Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично'...
O>GetModuleFileNameEx не работает, если вызывается из 32-битного процесса, а целевой процесс 64-битный.
Здравствуйте, okman, Вы писали:
O>Здравствуйте, istok20, Вы писали:
I>>Delphi XE, Win7: GetModuleFileNameEx для explorer.exe (и многих других процессов) вызывает ошибку 'System Error. Code: 299. Запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично'...
O>GetModuleFileNameEx не работает, если вызывается из 32-битного процесса, а целевой процесс 64-битный. O>Правда, смущает это:
I>>Подобный код скомпиленный из Delphi7 работает нормально.
сори, вы правы, там вызывался GetProcessImageFileName... вопрос закрыт, спасибо