Einzelnen Beitrag anzeigen

_BlackDragon_

Registriert seit: 4. Dez 2007
Ort: Eschweiler
64 Beiträge
 
#1

Memoryleak bei GetSecurityInfo

  Alt 6. Mär 2009, 13:46
Hi Leute,

versuche für Prozess jeweils die SID heraus zu bekommen. Das ganze funktioniert auch, allerdings
erhöht sich der Speicherbedarf meines Programms mit jedem Durchlauf (jedesmal 64 - 65 Prozesse)
um ca. 4KB.

Sicherheitsabfragen wurden zwecks Übersichtlichkeit entfernt:
Delphi-Quellcode:
function TBdsProcess.GetProcessOwnerSID(ProcID: Cardinal): Pointer;
var
  hProc: THandle;
  pOwner: PSID;
begin
  Result := nil;
  hProc := OpenProcess(PROCESS_QUERY_INFORMATION or GENERIC_READ, false, ProcID);
  try
    GetSecurityInfo(hProc, Cardinal(sotKernelObject), OWNER_SECURITY_INFORMATION, @pOwner, nil, nil, nil, nil);
    if IsValidSID(pOwner) then Result := pOwner;
  finally
    CloseHandle(hProc);
  end;
end;
Das Speicherloch entsteht definitiv in dieser Routine, da das Problem nicht auftritt, wenn sie nicht aufgerufen wird. Außerdem verdoppelt sich die Speicherverbrauchserhöhung, wenn ich die "selbe" Routine zusätzlich für die Gruppenzugehörigkeit aufrufe.

Irgendeine Idee???

Gruß

BlackDragon
  Mit Zitat antworten Zitat