So so etwas hab ich damals den Processtoken ausgelesen:
Delphi-Quellcode:
uses jwasddl
var
TokenHandle, ReturnLength, int_size: Cardinal;
TokenInformation : PTokenGroups;
aTokenUser: PSIDAndAttributes;
i: integer;
begin
if OpenProcessToken(GetCurrentProcess(), TOKEN_READ, TokenHandle) then
begin
GetTokenInformation(TokenHandle, TOKENUSER, nil, 0, ReturnLength);
int_size:=ReturnLength;
aTokenUser:=AllocMem(int_size);
if GetTokenInformation(TokenHandle, TOKENUSER, aTokenUser, int_size, ReturnLength) then
begin
// hier die USER Sid
end;
FreeMem(aTokenUser);
GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength);
int_size:=ReturnLength;
TokenInformation:=AllocMem(int_size);
if GetTokenInformation(TokenHandle, TokenGroups, TokenInformation, int_size, ReturnLength) then
for i:=0 to TokenInformation.GroupCount-1 do
with TokenInformation.Groups[i] do
begin
// hier gibt es die SID der Gruppe
end;
FreeMem(TokenInformation);
CloseHandle(TokenHandle);
end;
end;
Der Code ist von 2004 - wenn du den produktiv einsetzten willst, empfehle ich noch paar try finally blöcke.
Wenn du noch eine Idee brauchst, wie du später die Rechte dynamisch modellierst dann schau mal hier:
http://www.dynamicaccesscontrol.com/