<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=357339&amp;view=findpost&amp;p=3192653</guid>
        <pubDate>Wed, 22 Aug 2012 17:47:35 +0000</pubDate>
        <title>Проверка наличия прав админа</title>
        <link>https://forum.sources.ru/index.php?showtopic=357339&amp;view=findpost&amp;p=3192653</link>
        <description><![CDATA[Rouse_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=357339&view=findpost&p=3191831'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Booze &#064; <time class="tag-quote__quoted-time" datetime="2012-08-21T18:32:53+04:00">21.08.12, 14:32</time></span><div class='quote '>А как это сделать на линухе?</div></div><br>
если geteuid() вернул отличное от нуля значение - ты под рутом.]]></description>
        <author>Rouse_</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=357339&amp;view=findpost&amp;p=3191831</guid>
        <pubDate>Tue, 21 Aug 2012 14:32:53 +0000</pubDate>
        <title>Проверка наличия прав админа</title>
        <link>https://forum.sources.ru/index.php?showtopic=357339&amp;view=findpost&amp;p=3191831</link>
        <description><![CDATA[Booze: А как это сделать на линухе?]]></description>
        <author>Booze</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=357339&amp;view=findpost&amp;p=3137764</guid>
        <pubDate>Wed, 16 May 2012 15:38:11 +0000</pubDate>
        <title>Проверка наличия прав админа</title>
        <link>https://forum.sources.ru/index.php?showtopic=357339&amp;view=findpost&amp;p=3137764</link>
        <description><![CDATA[VahaC: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// автор NicoDE</div><div class="code_line">// http://www.delphipraxis.net/632305-post.html#730030</div><div class="code_line">&nbsp;</div><div class="code_line">unit TokenTools;</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp; Windows;</div><div class="code_line">&nbsp;</div><div class="code_line">function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID;</div><div class="code_line">&nbsp;&nbsp; out IsMember: BOOL): BOOL; stdcall;</div><div class="code_line">function SHTestTokenMembership(hToken: THandle; ulRID: ULONG): BOOL; stdcall;</div><div class="code_line">function IsUserAnAdmin(): BOOL; stdcall;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">function GetAdvApi32Lib(): HMODULE;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; ModuleName = &#39;ADVAPI32&#39;;</div><div class="code_line">{$WRITEABLECONST ON}</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; ModuleHandle: HMODULE = HMODULE(nil);</div><div class="code_line">{$WRITEABLECONST OFF}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Result := ModuleHandle;</div><div class="code_line">&nbsp;&nbsp; if Result = HMODULE(nil) then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := LoadLibrary(ModuleName);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if Result &#60;&#62; HMODULE(nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ModuleHandle := Result;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function CheckTokenMembership(TokenHandle: THandle; SidToCheck: PSID;</div><div class="code_line">&nbsp;&nbsp; out IsMember: BOOL): BOOL;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TFNCheckTokenMembership = function(TokenHandle: THandle; SidToCheck: PSID;</div><div class="code_line">&nbsp;&nbsp; &nbsp; out IsMember: BOOL): BOOL; stdcall;</div><div class="code_line">{$WRITEABLECONST ON}</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; Initialized: Integer = 0;</div><div class="code_line">&nbsp;&nbsp; RealApiFunc: TFNCheckTokenMembership = nil;</div><div class="code_line">{$WRITEABLECONST OFF}</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TAceHeader = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; AceType : Byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp; AceFlags: Byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp; AceSize : Word;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; TAccessAllowedAce = packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; Header : TAceHeader;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Mask : ACCESS_MASK;</div><div class="code_line">&nbsp;&nbsp; &nbsp; SidStart: DWORD;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; ACL_REVISION = 2;</div><div class="code_line">&nbsp;&nbsp; DesiredAccess = 1;</div><div class="code_line">&nbsp;&nbsp; GenericMapping: TGenericMapping = (</div><div class="code_line">&nbsp;&nbsp; &nbsp; GenericRead : STANDARD_RIGHTS_READ;</div><div class="code_line">&nbsp;&nbsp; &nbsp; GenericWrite : STANDARD_RIGHTS_WRITE;</div><div class="code_line">&nbsp;&nbsp; &nbsp; GenericExecute: STANDARD_RIGHTS_EXECUTE;</div><div class="code_line">&nbsp;&nbsp; &nbsp; GenericAll : STANDARD_RIGHTS_ALL</div><div class="code_line">&nbsp;&nbsp; );</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; ClientToken: THandle;</div><div class="code_line">&nbsp;&nbsp; ProcessToken: THandle;</div><div class="code_line">&nbsp;&nbsp; SecurityDescriptorSize: Cardinal;</div><div class="code_line">&nbsp;&nbsp; SecurityDescriptor: PSecurityDescriptor;</div><div class="code_line">&nbsp;&nbsp; Dacl: PACL;</div><div class="code_line">&nbsp;&nbsp; PrivilegeSetBufferSize: ULONG;</div><div class="code_line">&nbsp;&nbsp; PrivilegeSetBuffer: packed record</div><div class="code_line">&nbsp;&nbsp; &nbsp; PrivilegeSet: TPrivilegeSet;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Buffer: array [0..2] of TLUIDAndAttributes;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; GrantedAccess: ACCESS_MASK;</div><div class="code_line">&nbsp;&nbsp; AccessStatus: BOOL;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if Initialized = 0 then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; RealApiFunc := TFNCheckTokenMembership(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; GetProcAddress(GetAdvApi32Lib(), &#39;CheckTokenMembership&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; InterlockedIncrement(Initialized);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; if Assigned(RealApiFunc) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := RealApiFunc(TokenHandle, SidToCheck, IsMember)</div><div class="code_line">&nbsp;&nbsp; else</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; IsMember := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ClientToken := THandle(nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp; try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if TokenHandle &#60;&#62; THandle(nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ClientToken := TokenHandle</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; else if not OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, False,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ClientToken) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ClientToken := THandle(nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if GetLastError() = ERROR_NO_TOKEN then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY or</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TOKEN_DUPLICATE, ProcessToken) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not DuplicateToken(ProcessToken, SecurityImpersonation,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @ClientToken) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ClientToken := THandle(nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(ProcessToken);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if ClientToken &#60;&#62; THandle(nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; SecurityDescriptorSize := SizeOf(TSecurityDescriptor) +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SizeOf(TAccessAllowedAce) + SizeOf(TACL) +</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 * GetLengthSid(SidToCheck);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; SecurityDescriptor := PSecurityDescriptor(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LocalAlloc(LMEM_ZEROINIT, SecurityDescriptorSize));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if SecurityDescriptor &#60;&#62; nil then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if InitializeSecurityDescriptor(SecurityDescriptor,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SECURITY_DESCRIPTOR_REVISION) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if SetSecurityDescriptorOwner(SecurityDescriptor, SidToCheck,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; False) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if SetSecurityDescriptorGroup(SecurityDescriptor, SidToCheck,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; False) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dacl := PACL(SecurityDescriptor);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Inc(PSecurityDescriptor(Dacl));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if InitializeAcl(Dacl^,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SecurityDescriptorSize - SizeOf(TSecurityDescriptor),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ACL_REVISION) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if AddAccessAllowedAce(Dacl^, ACL_REVISION, DesiredAccess,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SidToCheck) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if SetSecurityDescriptorDacl(SecurityDescriptor, True, Dacl,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; False) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PrivilegeSetBufferSize := SizeOf(PrivilegeSetBuffer);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result := AccessCheck(SecurityDescriptor, ClientToken,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DesiredAccess, GenericMapping,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PrivilegeSetBuffer.PrivilegeSet, PrivilegeSetBufferSize,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GrantedAccess, AccessStatus);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if Result then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IsMember := AccessStatus and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (GrantedAccess = DesiredAccess);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LocalFree(HLOCAL(SecurityDescriptor));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if (ClientToken &#60;&#62; THandle(nil)) and</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (ClientToken &#60;&#62; TokenHandle) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(ClientToken);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function GetShell32Lib(): HMODULE;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; ModuleName = &#39;SHELL32&#39;;</div><div class="code_line">{$WRITEABLECONST ON}</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; ModuleHandle: HMODULE = HMODULE(nil);</div><div class="code_line">{$WRITEABLECONST OFF}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; Result := ModuleHandle;</div><div class="code_line">&nbsp;&nbsp; if Result = HMODULE(nil) then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := LoadLibrary(ModuleName);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if Result &#60;&#62; HMODULE(nil) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ModuleHandle := Result;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function SHTestTokenMembership(hToken: THandle; ulRID: ULONG): BOOL; stdcall;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TFNSHTestTokenMembership = function(hToken: THandle; ulRID: ULONG): BOOL; stdcall;</div><div class="code_line">{$WRITEABLECONST ON}</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; Initialized: Integer = 0;</div><div class="code_line">&nbsp;&nbsp; RealApiFunc: TFNSHTestTokenMembership = nil;</div><div class="code_line">{$WRITEABLECONST OFF}</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));</div><div class="code_line">&nbsp;&nbsp; SECURITY_BUILTIN_DOMAIN_RID = {text}000020;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; SidToCheck: PSID;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if Initialized = 0 then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; RealApiFunc := TFNSHTestTokenMembership(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; GetProcAddress(GetShell32Lib(), &#39;SHTestTokenMembership&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; InterlockedIncrement(Initialized);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; if Assigned(RealApiFunc) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := RealApiFunc(hToken, ulRID)</div><div class="code_line">&nbsp;&nbsp; else</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; SECURITY_BUILTIN_DOMAIN_RID, ulRID, 0, 0, 0, 0, 0, 0, SidToCheck);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if Result then</div><div class="code_line">&nbsp;&nbsp; &nbsp; try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; if not CheckTokenMembership(THandle(nil), SidToCheck, Result) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Result := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp; finally</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; FreeSid(SidToCheck);</div><div class="code_line">&nbsp;&nbsp; &nbsp; end;</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function IsUserAnAdmin(): BOOL;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; DOMAIN_ALIAS_RID_ADMINS = {text}000220;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp; TFNIsUserAnAdmin = function(): BOOL; stdcall;</div><div class="code_line">{$WRITEABLECONST ON}</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp; Initialized: Integer = 0;</div><div class="code_line">&nbsp;&nbsp; RealApiFunc: TFNIsUserAnAdmin = nil;</div><div class="code_line">{$WRITEABLECONST OFF}</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; if Initialized = 0 then</div><div class="code_line">&nbsp;&nbsp; begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; RealApiFunc := TFNIsUserAnAdmin(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; GetProcAddress(GetShell32Lib(), &#39;IsUserAnAdmin&#39;));</div><div class="code_line">&nbsp;&nbsp; &nbsp; InterlockedIncrement(Initialized);</div><div class="code_line">&nbsp;&nbsp; end;</div><div class="code_line">&nbsp;&nbsp; if Assigned(RealApiFunc) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := RealApiFunc()</div><div class="code_line">&nbsp;&nbsp; else</div><div class="code_line">&nbsp;&nbsp; &nbsp; Result := SHTestTokenMembership(THandle(nil), DOMAIN_ALIAS_RID_ADMINS);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>VahaC</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      </channel>
      </rss>
	