<?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[CreateProcess() als SYSTEM --&amp;gt; Sichtbar im Desktop]]></title><description><![CDATA[<p>Hey ho,</p>
<p>ich habe eine kleine Service-Applikation geschrieben, die im Sicherheitskontext SYSTEM läuft. Dieses Programm ist Teil einer kleinen Softwareverteilung. Der Service führt bei Bedarf Installationsroutinen aus. Bisher sehe ich jedoch diese Aktionen nicht, weil keine Verlinkung mit dem Desktop vorgesehen war.</p>
<p>Hier der Ausschnitt aus dem Quellcode:</p>
<pre><code class="language-cpp">void ExecuteProg(AnsiString Programm)
{

    ZeroMemory( &amp;si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &amp;pi, sizeof(pi) );

    // Prozess starten 
    if( !CreateProcess( NULL,   // No module name (use command line).
        TEXT(Programm.c_str()), // Command line.
        NULL,             // Process handle not inheritable.
        NULL,             // Thread handle not inheritable.
        FALSE,            // Set handle inheritance to FALSE.
        0,                // No creation flags.
        NULL,             // Use parent's environment block.
        NULL,             // Use parent's starting directory.
        &amp;si,              // Pointer to STARTUPINFO structure.
        &amp;pi )             // Pointer to PROCESS_INFORMATION structure.
       )
     {
     // Fehler aufgetreten.
     ProcessRunning = false;

     }
    else
     {
     // Keine Fehler aufgetreten. Prozess wurde gestartet
     ProcessRunning = true;
     }

}
</code></pre>
<p>Nun möchte ich das Ändern und die Applikation auf dem Desktop sichtbar machen. Dabei ist mir klar, dass ich die Struktur STARTINFO nicht einfach leer übergeben darf, sondern initialisieren und mit Werten füllen muss - Mit den richtigen Werten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich habe auch herausgefunden, dass ich irgendwie mit <em>lpDesktop</em> arbeiten muss, aber es erschließt sich mir nicht wie genau.</p>
<p>Für Hilfe wäre ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142603/createprocess-als-system-gt-sichtbar-im-desktop</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 20:27:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142603.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Apr 2006 07:36:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CreateProcess() als SYSTEM --&amp;gt; Sichtbar im Desktop on Sat, 01 Apr 2006 07:36:22 GMT]]></title><description><![CDATA[<p>Hey ho,</p>
<p>ich habe eine kleine Service-Applikation geschrieben, die im Sicherheitskontext SYSTEM läuft. Dieses Programm ist Teil einer kleinen Softwareverteilung. Der Service führt bei Bedarf Installationsroutinen aus. Bisher sehe ich jedoch diese Aktionen nicht, weil keine Verlinkung mit dem Desktop vorgesehen war.</p>
<p>Hier der Ausschnitt aus dem Quellcode:</p>
<pre><code class="language-cpp">void ExecuteProg(AnsiString Programm)
{

    ZeroMemory( &amp;si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &amp;pi, sizeof(pi) );

    // Prozess starten 
    if( !CreateProcess( NULL,   // No module name (use command line).
        TEXT(Programm.c_str()), // Command line.
        NULL,             // Process handle not inheritable.
        NULL,             // Thread handle not inheritable.
        FALSE,            // Set handle inheritance to FALSE.
        0,                // No creation flags.
        NULL,             // Use parent's environment block.
        NULL,             // Use parent's starting directory.
        &amp;si,              // Pointer to STARTUPINFO structure.
        &amp;pi )             // Pointer to PROCESS_INFORMATION structure.
       )
     {
     // Fehler aufgetreten.
     ProcessRunning = false;

     }
    else
     {
     // Keine Fehler aufgetreten. Prozess wurde gestartet
     ProcessRunning = true;
     }

}
</code></pre>
<p>Nun möchte ich das Ändern und die Applikation auf dem Desktop sichtbar machen. Dabei ist mir klar, dass ich die Struktur STARTINFO nicht einfach leer übergeben darf, sondern initialisieren und mit Werten füllen muss - Mit den richtigen Werten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich habe auch herausgefunden, dass ich irgendwie mit <em>lpDesktop</em> arbeiten muss, aber es erschließt sich mir nicht wie genau.</p>
<p>Für Hilfe wäre ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028423</guid><dc:creator><![CDATA[mymicha]]></dc:creator><pubDate>Sat, 01 Apr 2006 07:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess() als SYSTEM --&amp;gt; Sichtbar im Desktop on Sat, 01 Apr 2006 08:43:10 GMT]]></title><description><![CDATA[<p>Es ist aus Sicherheitsgründen nicht empfehlenswert Service mit dem Desktop interagieren zu lassen.<br />
Mit Vista wird es gar nicht mehr möglich sein. Deshalb empfehle ich Dringen dieses nicht zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028450</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 01 Apr 2006 08:43:10 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess() als SYSTEM --&amp;gt; Sichtbar im Desktop on Sat, 01 Apr 2006 09:30:37 GMT]]></title><description><![CDATA[<p>Meinst du jetzt generell, dass Prozesse, die unter dem SYSTEM Account von Windows laufen keine Interaktionen mehr mit dem Desktop haben sollen (und bei Vista können) oder nur Prozesse, die als Service unter Windows laufen (egal, unter welchem User)?</p>
<p>Sonst könnte ich ja auch meinen Prozess unter einem lokalen Administratorkonto (mit Serviceberechtigung) laufen lassen. Dann wäre zumindest die Einschränkung mit dem SYSTEM Account weg (sofern es die gibt).</p>
<p>Welche Möglichkeiten hätte ich denn sonst dem User sehen zu lassen, was die Softwareverteilung macht? Bisher läuft das halt über Timeouts, wenn mal ein Fehler auftritt. Man sieht ja leider nix <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f622.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--crying_face"
      title=";("
      alt="😢"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028473</guid><dc:creator><![CDATA[mymicha]]></dc:creator><pubDate>Sat, 01 Apr 2006 09:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess() als SYSTEM --&amp;gt; Sichtbar im Desktop on Sat, 01 Apr 2006 09:45:46 GMT]]></title><description><![CDATA[<p>Es geht um Services und um alles was höhere Privilegien hat...<br />
Siehe: <a href="http://security.tombom.co.uk/shatter.html" rel="nofollow">http://security.tombom.co.uk/shatter.html</a></p>
<p>Der &quot;normale&quot; Weg ist, eine Normale-Mode Applikation zu schreibe, die dann &quot;normal&quot; mit dem Servcie kommuniziert (z.B: Named-Pipes).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028482</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sat, 01 Apr 2006 09:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess() als SYSTEM --&amp;gt; Sichtbar im Desktop on Sat, 01 Apr 2006 10:02:45 GMT]]></title><description><![CDATA[<p>Ah Tschuldigung. Hätte ich vielleicht dazu sagen sollen. Die Softwareverteilung besteht aus einer Client.exe, die unter dem Benutzer (nur mit Benutzerrechten) läuft und natürlich auch mit dessen Desktop interagiert. Der Service managed alles im Hintergrund. Lädt neue Pakete usw. Die beiden unterhalten sich selbstverständlich fleißig.</p>
<p>Die wichtigste Aufgabe des Services ist es jedoch, Installationsroutinen mit höheren Rechten zu starten.</p>
<p>Vielleicht kann ich aber auch die Funktion &quot;CreateUserWithLogonW&quot; nutzen und diese aus der Client-Applikation heraus zu starten. Damit könnte mir geholfen sein. Leider muss ich dann aber einen lokalen Admin bzw. einen Domänen-User mit lokalen Adminrechten verwenden. Dies blieb mir bisher erspart.</p>
<p>Vielen Dank auf jeden Fall für deine Infos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028491</guid><dc:creator><![CDATA[mymicha]]></dc:creator><pubDate>Sat, 01 Apr 2006 10:02:45 GMT</pubDate></item></channel></rss>