Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
Speicher freigeben, der noch gebraucht wird
5. Jul 2007, 23:49
Folgende Funktion:
Delphi-Quellcode:
function GetProcessOwner(PID: DWord; var SID: PSID): Boolean;
var
hProcess : THandle;
ppsidOwner : PSID;
SecDescriptor : PSECURITY_DESCRIPTOR;
err : DWord;
const
SE_UNKNOWN_OBJECT_TYPE: DWord = 0;
SE_FILE_OBJECT : DWord = 1;
SE_SERVICE : DWord = 2;
SE_PRINTER : DWord = 3;
SE_REGISTRY_KEY : DWord = 4;
SE_LMSHARE : DWord = 5;
SE_KERNEL_OBJECT : DWord = 6;
SE_WINDOW_OBJECT : DWord = 7;
begin
hProcess := 0;
err := 0;
try
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or GENERIC_READ, False, pid);
if (hProcess <> 0) then
begin
err := GetSecurityInfo(hProcess, SE_KERNEL_OBJECT, OWNER_SECURITY_INFORMATION, @ppsidOwner, nil, nil, nil,
@SecDescriptor);
if (err = 0) then
begin
SID := ppsidOwner;
//LocalFree(Cardinal(SecDescriptor));
end;
CloseHandle(hProcess);
end;
except
end;
Result := (err = 0) and (hProcess <> 0);
end;
Wenn ich den Zeiger SecDescriptor in der Funktion freigeben ist der Rückgabewert natürlich ungülig. aber wie und wo geben ich den Speicher wieder frei bzw. wie bekomme ich den Zeiger als Ergebnis ohne mir ein Speicherleck einzuhandeln?
Michael Ein Teil meines Codes würde euch verunsichern.
|
|
Zitat
|