Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

PID и SID процесса

01.01.2007
unit Unit1;

 
interface
 
uses
 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 
Dialogs, StdCtrls;
 
type
  TForm1
= class(TForm)
    Button1
: TButton;
    procedure Button1Click
(Sender: TObject);
 
end;
 
 
PTokenUser = ^TTokenUser;
 
TTokenUser = record
   
User: array[0..0] of TSIDAndAttributes;
 
end;
 
  procedure
ConvertSidToStringSid(SID: PSID; var StringSid: LPSTR); stdcall;
    external advapi32 name
'ConvertSidToStringSidA';
 
var
  Form1
: TForm1;
 
implementation
 
{$R *.dfm}
 
function GetCurrentUserSID: String;
var
 
TokenHandle: THandle;
 
TokenInformationClass: TTokenInformationClass;
 
TokenInformation: PTokenUser;
 
ReturnLength: DWORD;
 
StringSid: LPSTR;
begin
 
Result := '';
 
if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then
 
try
   
TokenInformationClass := TokenUser;
   
GetTokenInformation(TokenHandle, TokenInformationClass, nil, 0, ReturnLength);
   
if GetLastError = ERROR_INSUFFICIENT_BUFFER then
   
begin
     
TokenInformation := GetMemory(ReturnLength);
     
if TokenInformation <> nil then
     
try
       
if GetTokenInformation(TokenHandle, TokenInformationClass,
         
TokenInformation, ReturnLength, ReturnLength) then
       
begin
         
ConvertSidToStringSid(TokenInformation^.User[0].Sid, StringSid);
         
Result := StringSid;
       
end;
     
finally
       
FreeMemory(TokenInformation);
     
end;
   
end;
 
finally
   
CloseHandle(TokenHandle);
 
end;
end;
 
 
procedure TForm1
.Button1Click(Sender: TObject);
begin
 
ShowMessage(GetCurrentUserSID);
end;
 
end.

 
 

В данном примере GetCurrentProcess можно заменить (если имеешь PID) на

              hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, True, PID);
             
if hProcess <> 0 then
             
try
               
// теперь заменяй GetCurrentProcess значением из hProcess
             
finally
               
CloseHandle(hProcess);
             
end;

 

Взято из https://forum.sources.ru

Автор: Rouse_