<?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[Benutzername eines Prozesses]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich versuche einen Taskmanager für WindowsXP zu erstellen. Ich weiß... WindowsXP hat schon einen und der funktioniert auch wunderbar. Ich würde trotzdem gerne versuchen einen vergleichbaren TaskManager zu erstellen, der mir vielleicht sogar mehr über die Prozesse verraten kann.<br />
Die erste Frage, die ich in dem Zusammenhang habe ist, wie ich den Benutzernamen herausfinden kann, mit/unter dem der Prozess läuft(wie im Windows Taskmanager).</p>
<p>Vielen Dank...</p>
<p>Der kleine Noob</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/72735/benutzername-eines-prozesses</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 07:36:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/72735.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 May 2004 18:10:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Benutzername eines Prozesses on Sat, 01 May 2004 18:10:39 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich versuche einen Taskmanager für WindowsXP zu erstellen. Ich weiß... WindowsXP hat schon einen und der funktioniert auch wunderbar. Ich würde trotzdem gerne versuchen einen vergleichbaren TaskManager zu erstellen, der mir vielleicht sogar mehr über die Prozesse verraten kann.<br />
Die erste Frage, die ich in dem Zusammenhang habe ist, wie ich den Benutzernamen herausfinden kann, mit/unter dem der Prozess läuft(wie im Windows Taskmanager).</p>
<p>Vielen Dank...</p>
<p>Der kleine Noob</p>
]]></description><link>https://www.c-plusplus.net/forum/post/512483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/512483</guid><dc:creator><![CDATA[KleinerNoob]]></dc:creator><pubDate>Sat, 01 May 2004 18:10:39 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzername eines Prozesses on Sat, 01 May 2004 18:30:39 GMT]]></title><description><![CDATA[<p>Das sollte mit <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/gettokeninformation.asp?frame=true" rel="nofollow">GetTokenInformation</a> funktionieren, wenn Du 'TokenUser' für die <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/token_information_class.asp?frame=true" rel="nofollow">TOKEN_INFORMATION_CLASS</a> nimmst. Du bekommst dann eine <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/token_user.asp?frame=true" rel="nofollow">TOKEN_USER</a>-Struktur gefüllt. Mit <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/lookupaccountsid.asp?frame=truehttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/security/security/lookupaccountsid.asp?frame=true" rel="nofollow">LookupAccountSid</a> kommst Du dann auf den Namen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/512490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/512490</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Sat, 01 May 2004 18:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzername eines Prozesses on Sat, 01 May 2004 19:20:18 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Ich werde es versuchen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/512518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/512518</guid><dc:creator><![CDATA[KleinerNoob]]></dc:creator><pubDate>Sat, 01 May 2004 19:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzername eines Prozesses on Mon, 03 May 2004 12:59:28 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe nun die Funktion zur Bestimmung des Benutzernamen eines Prozesses fertig. Es gibt mit der Bestimmung der Benutzernamen aber leider einen Haken. Meine Anwendung braucht „Debug Privileges“ und der Benutzername von „System“ und 2 von den 5 svchost.exe (n) können nicht angezeigt werden. Im Windows TaskManager hat „System“ den Benutzernamen „SYSTEM“ und die beiden svchost.exe (n) die Benutzernamen „LOKALER DIENST“ und „NETZWERKDIENST“. Bei diesen 3 Prozessen gibt GetLastError die Fehlermeldung „Zugriff verweigert“ zurück. Dieser Fehler tritt im Zusammenhang mit OpenProcessToken in der Funktion LookupProcessUser auf.<br />
Die ProcessId für LookupProcessUser bekomme ich mit OpenProcess:</p>
<pre><code class="language-cpp">hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION , FALSE, pe32.th32ProcessID );
</code></pre>
<p>Eine weitere Frage ist, ob ich die letzten 3 Parameter für LookupAccountSid angeben muss. Meine Anwendung braucht sie nicht, ersetze ich sie aber durch NULL wird eine Exception ausgelöst.</p>
<pre><code class="language-cpp">DWORD LookupProcessUser(HANDLE ProcessId, char* &amp;UsrName)
{
  DWORD dwDomainLength                = 0;
  DWORD	dwLength                      = 0;
  DWORD dwError                       = 0;

  HANDLE hToken;
  PTOKEN_USER ptu;
  TOKEN_INFORMATION_CLASS tInfoClass  = TokenUser;
  SID_NAME_USE snu                    = SidTypeUser;

  char *DomainName;

  bool boReturn = false;

  boReturn = OpenProcessToken(ProcessId,TOKEN_QUERY,&amp;hToken);
  if (!boReturn){return GetLastError();}

  do
  {
    dwError = 0;
    ptu      = (PTOKEN_USER)new unsigned char [dwLength];
    boReturn = GetTokenInformation(hToken, tInfoClass, (LPVOID)ptu, dwLength,&amp;dwLength);
    if (!boReturn) dwError  = GetLastError();
  }
  while (dwError ==  ERROR_INSUFFICIENT_BUFFER);

  if (!boReturn) return dwError;

  dwLength       = 0;
  dwDomainLength = 0;

  do
  {
    dwError        = 0;
    UsrName        = new char[dwLength];
    DomainName     = new char[dwDomainLength];
    boReturn       = LookupAccountSid(NULL,ptu-&gt;User.Sid,UsrName, &amp;dwLength, DomainName, &amp;dwDomainLength, &amp;snu);
    if (!boReturn) dwError = GetLastError();
  }
  while (dwError ==  ERROR_INSUFFICIENT_BUFFER);

  if (!boReturn) return dwError;

  return 0;

}
//---------------------------------------------------------------------------

DWORD EnableDebugPrivilege()
{

   HANDLE hToken;
   TOKEN_PRIVILEGES tkp;
   char buf[100]; 

   if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;hToken))
     return GetLastError(); 

   if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &amp;tkp.Privileges[0].Luid))
     return GetLastError();

   tkp.PrivilegeCount = 1;  // one privilege to set
   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

   if (!AdjustTokenPrivileges(hToken, FALSE, &amp;tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0))
     return GetLastError();

   return 0;
}
//---------------------------------------------------------------------------
</code></pre>
<p>Vielen Dank...</p>
<p>Der kleine Noob</p>
]]></description><link>https://www.c-plusplus.net/forum/post/513460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/513460</guid><dc:creator><![CDATA[KleinerNoob]]></dc:creator><pubDate>Mon, 03 May 2004 12:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzername eines Prozesses on Tue, 04 May 2004 15:57:37 GMT]]></title><description><![CDATA[<p>Hi!<br />
Zu diesem Thema habe ich auch eine Frage. Wie kann man denn den gesammten Pfad der Exe-Datei herausfinden. szExeName gibt ja nur den Namen der Exe wieder.</p>
<p>Danke</p>
<p>Doreios</p>
]]></description><link>https://www.c-plusplus.net/forum/post/514254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/514254</guid><dc:creator><![CDATA[Doreios]]></dc:creator><pubDate>Tue, 04 May 2004 15:57:37 GMT</pubDate></item></channel></rss>