<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Prüfen ob ein Privileg gesetzt ist - wie?]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann ich in meinem Programm prüfen ob ich ein security privilege bereits gesetzt habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220975/prüfen-ob-ein-privileg-gesetzt-ist-wie</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 08:06:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220975.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Aug 2008 19:21:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prüfen ob ein Privileg gesetzt ist - wie? on Sat, 23 Aug 2008 19:21:29 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann ich in meinem Programm prüfen ob ich ein security privilege bereits gesetzt habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570232</guid><dc:creator><![CDATA[Windowzer]]></dc:creator><pubDate>Sat, 23 Aug 2008 19:21:29 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob ein Privileg gesetzt ist - wie? on Sun, 24 Aug 2008 01:17:07 GMT]]></title><description><![CDATA[<p>Ist war Delphi, aber die API-Funktionen sind antütlich die gleichen.</p>
<pre><code>function GetCurrentUserPrivileges: TUserPrivilegesArray;
const
  TokenSize = 800; //  (SizeOf(Pointer)=4 *200)
var
  hToken: THandle;
  pTokenInfo: PTOKENPRIVILEGES;
  ReturnLen: Cardinal;
  i: Integer;
  PrivName: PChar;
  DisplayName: PChar;
  NameSize: Cardinal;
  DisplSize: Cardinal;
  LangId: Cardinal;
begin
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY, hToken) then
  begin
    GetMem(pTokenInfo, TokenSize);
    try
      if GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize,
        ReturnLen) then
      begin
        GetMem(PrivName, 255);
        GetMem(DisplayName, 255);
        try
          setlength(result, pTokenInfo.PrivilegeCount);
          for i := 0 to pTokenInfo.PrivilegeCount - 1 do
          begin
            DisplSize := 255;
            NameSize := 255;
            LookupPrivilegeName(nil, pTokenInfo.Privileges[i].Luid, PrivName,
              Namesize);
            LookupPrivilegeDisplayName(nil, PrivName, DisplayName, DisplSize,
              LangId);
            SetString(result[i].InternalName, PrivName, NameSize);
            SetString(result[i].Displayname, DisplayName, DisplSize);
          end;
        finally
          FreeMem(PrivName, 255);
          FreeMem(DisplayName, 255);
        end;
      end;
    finally
      FreeMem(PTokenInfo, sizeof(PTokenPrivileges));
    end;
  end;
end;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1570320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570320</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 24 Aug 2008 01:17:07 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob ein Privileg gesetzt ist - wie? on Sun, 24 Aug 2008 16:32:49 GMT]]></title><description><![CDATA[<p>Also ich habe jetzt mal versucht mir die Privileg-Token zu holen, aber irgendwie klappt das Auslesen mit GetTokenInformation nicht so ganz, auch verstehe ich den Aufbau der TOKEN_PRIVILEGES Struktur nicht wirlich.<br />
Im Header steht dort in der Struktur ein Array der Größe &quot;ANYSIZE&quot;, welches einfach ein #define auf 1 ist.<br />
Aber beim Abrufen benötigt GetTokenInformation 64Bytes und speichert mir 5Token in dem Array (da ich mit malloc anfordere ist das kein Problem).<br />
Aber das vorher aktivierte Debug-Privileg fehlt.</p>
<p>Hier mal mein code:</p>
<pre><code class="language-cpp">int are_debug_privileges_enabled()
{
    HANDLE cur_process = GetCurrentProcess();
    HANDLE cur_prc_token;
    TOKEN_PRIVILEGES *tok_privs = NULL;
    DWORD needed_bytes = 0;
    unsigned i; /* loop counter */

    if( !OpenProcessToken( cur_process, TOKEN_QUERY, &amp;cur_prc_token ) )
        return 0;

    /* Retrieve the number of bytes needed to store the privileges. */
    GetTokenInformation( cur_prc_token, TokenPrivileges, NULL, 0, &amp;needed_bytes );

    tok_privs = malloc( needed_bytes );
    if( !tok_privs )
    {
        CloseHandle( cur_prc_token );
        return 0;
    }

    if( !GetTokenInformation( cur_prc_token, TokenPrivileges, tok_privs, 
                              needed_bytes, &amp;needed_bytes ) )
    {
        free( tok_privs );
        CloseHandle( cur_prc_token );
        return 0;
    }

    for( i = 0; i &lt; tok_privs-&gt;PrivilegeCount; ++i )
    {
        LUID_AND_ATTRIBUTES cur = tok_privs-&gt;Privileges[ i ];
        TCHAR priv_name[ MAX_PATH ];
        DWORD size = sizeof( priv_name ) / sizeof( TCHAR );

        if( !LookupPrivilegeName( NULL, &amp;cur.Luid, priv_name, &amp;size ) )
            continue;

        if( !_tcscmp( priv_name, _T( &quot;SeDebugPrivilege&quot; ) ) )
        {
            free( tok_privs );
            CloseHandle( cur_prc_token );
            return 1;
        }
    }

    free( tok_privs );
    CloseHandle( cur_prc_token );
    return 0;
}
</code></pre>
<p>Habt ihr irgendwelche Ideen, was da falsch laufen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1570569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1570569</guid><dc:creator><![CDATA[Windowzer]]></dc:creator><pubDate>Sun, 24 Aug 2008 16:32:49 GMT</pubDate></item></channel></rss>