Конференция "WinAPI" » GetModuleFileNameEx....
 
  • guest (28.04.16 16:34) [0]
    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;

  • DVM © (30.04.16 11:56) [1]

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

    Может манифест который автоматически добавляет Delphi XE как то влияет?
 
Конференция "WinAPI" » GetModuleFileNameEx....
Есть новые Нет новых   [134427   +35][b:0][p:0.001]