Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.05;
Скачать: CL | DM;

Вниз

Перечисление групп процесса   Найти похожие ветки 

 
Игорь ©   (2009-07-24 14:25) [0]

Правильно ли такое перечисление групп процесса?

const
 SE_GROUP_MANDATORY = $00000001;
 SE_GROUP_ENABLED_BY_DEFAULT = $00000002;
 SE_GROUP_ENABLED = $00000004;
 SE_GROUP_OWNER = $00000008;
 SE_GROUP_USE_FOR_DENY_ONLY = $00000010;
 SE_GROUP_INTEGRITY = $00000020;
 SE_GROUP_INTEGRITY_ENABLED = $00000040;
 SE_GROUP_RESOURCE = $20000000;
 SE_GROUP_LOGON_ID = $C0000000;

procedure TForm1.EnumProcessGroups(PID: DWORD);
const
 TokenSize = $1000;
var
 hProcess, hToken: THandle;
 pTokenInfo: PTokenGroups;
 i, j: Integer;
 pName, pDomain: array[0..255] of Char;
 LastError, ReturnLength, SIDType: Cardinal;
 Group: PSIDAndAttributes;
begin
 hProcess:= OpenProcess(MAXIMUM_ALLOWED, False, PID);
 if hProcess <> 0 then
 begin
   try
     if OpenProcessToken(hProcess, MAXIMUM_ALLOWED, hToken) then
     begin
       try
         GetMem(pTokenInfo, TokenSize);
         try
           if GetTokenInformation(hToken, TokenGroups, pTokenInfo, TokenSize, ReturnLength) then
           begin
             Group:= PSIDAndAttributes(PAnsiChar(pTokenInfo) + SizeOf(Cardinal));
             for i:= 0 to pTokenInfo.GroupCount - 1 do
             begin
               FillChar(pName, SizeOf(pName), 0);
               FillChar(pDomain, SizeOf(pDomain), 0);
               j:= 0;
               repeat
                 LookupAccountSID(nil, Group.Sid, PChar(@pName), ReturnLength, PChar(@pDomain), ReturnLength, SIDType);
                 LastError:= GetLastError;
                 Inc(j);
               until
                 (string(pName) <> "") or (LastError = ERROR_NONE_MAPPED);
               with Form1.ListView1.Items.Add do
               begin
                 Caption:= String(pDomain) + "\" + String(pName);
                 SubItems.Add("");
                 if Group.Attributes and SE_GROUP_OWNER = SE_GROUP_OWNER then
                   ListView1.Items[i].SubItems[0]:= "Owner";
                 if Group.Attributes and SE_GROUP_MANDATORY = SE_GROUP_MANDATORY then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ Mandatory";
                 if Group.Attributes and SE_GROUP_USE_FOR_DENY_ONLY = SE_GROUP_USE_FOR_DENY_ONLY then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ Deny";
                 if Group.Attributes and SE_GROUP_LOGON_ID = SE_GROUP_LOGON_ID then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ LogonID";
                 if Group.Attributes and SE_GROUP_INTEGRITY = SE_GROUP_INTEGRITY then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ Integrity";
                 if Group.Attributes and SE_GROUP_INTEGRITY_ENABLED = SE_GROUP_INTEGRITY_ENABLED then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "/ IntegrityEnabled";
                 if Group.Attributes and SE_GROUP_INTEGRITY = SE_GROUP_ENABLED then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ Enabled";
                 if Group.Attributes and SE_GROUP_INTEGRITY_ENABLED = SE_GROUP_ENABLED_BY_DEFAULT then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ EnabledByDefault";
                 if Group.Attributes and SE_GROUP_RESOURCE = SE_GROUP_RESOURCE then
                   ListView1.Items[i].SubItems[0]:= ListView1.Items[i].SubItems[0] + "\ Resource";
               end;
               Group:= PSIDAndAttributes(PAnsiChar(Group) + SizeOf(TSIDAndAttributes));
             end;
           end;
         finally
           FreeMem(pTokenInfo);
         end;
       finally
         CloseHandle(hToken);
       end;
     end;
   finally
     CloseHandle(hProcess);
   end;
 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 EnumProcessGroups(GetCurrentProcessId);
end;


 
Eraser ©   (2009-07-24 18:40) [1]

сравни полученный результат с показаниями Process Explorer"а - вот и ответ.



Страницы: 1 вся ветка

Текущий архив: 2011.06.05;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.011 c
15-1297805399
Юрий
2011-02-16 00:29
2011.06.05
С днем рождения ! 16 февраля 2011 среда


2-1298571014
nord
2011-02-24 21:10
2011.06.05
ожидание выполнения процедуры


15-1297845189
Tirael
2011-02-16 11:33
2011.06.05
виртуальная NTFS


2-1298528519
Trekker
2011-02-24 09:21
2011.06.05
Открытие страницы IE в полноэкранном режиме в текущем окне


2-1294930060
Scott Storch
2011-01-13 17:47
2011.06.05
загрузка dll из ресурса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский