[W32] Process starten op interactieve desktop vanuit svc.*

Pagina: 1
Acties:

Verwijderd

Even mijn post aanpassen om het geheel weer enigszins begrijpelijk te maken :).

Wat ik probeer te doen is vanuit een programma dat bij het opstarten van de computer wordt uitgevoerd (ik laat even in het midden of dit een service is, of een applicatie die gestart wordt met de startup scripts mogelijkheden van Windows, maar waarschijnlijk wordt het een service), een gebruiker interactief te laten inloggen.

De bedoeling is dat dit gaat werken onder XP, en wel zo dat de gebruiker ingelogd wordt zonder dat het welcome screen verdwijnt. De gebruiker moet dus "op de achtergrond" ingelogd worden. Waarom wil ik dit? Op deze manier worden de standaard startups al uitgevoerd, en kan XP even lekker uit-opstarten, terwijl ik iets anders ga doen. Als ik dan terug kom achter mijn computer dan hoef ik alleen maar mijn wachtwoord in te voeren en alles staat meteen klaar.

Het probleem is dat ik me afvraag hoe ik dit nu voor elkaar moet krijgen (er zal waarschijnlijk een flink stukje programmeerwerk in zitten). En daar gaat dit topic dus over :).

edit:
Zou een mod de titel kunnen veranderen naar [W32/XP] Gebruiker interactief inloggen vanuit service ?

[ Voor 88% gewijzigd door Verwijderd op 28-07-2004 11:28 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 28 juli 2004 @ 09:06:
[...]


De service wil/kan ik best zelf maken. Wat ik alleen nog moet weten is wat de correcte methode zou zijn om het te doen (API calls, NT kernel calls, etc.).
Er zijn volgens mij geen reguliere Win32 API calls die feitelijk een complete interactive logon inclusief Startup programs uitvoeren et al: het dichtste wat je gaat komen is LogonUserEx.

Ik denk dat je eens heel diep in de WinLogon/GINA API's zou moeten graven om iets van deze strekking te vinden. En voordat je ook maar een regel code daarvan uitprobeert: lees de hele MSDN-sectie over WinLogon en GINA door! Om een tip te geven op welk niveau je daar staat te werken:
When Winlogon initializes, it registers the CTRL+ALT+DEL secure attention sequence (SAS) with the system, and then creates three desktops within the WinSta0 window station.
:)

Professionele website nodig?


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Topicstarter
Je kan sinds XP dacht ik wel processen starten op een andere Winsta dan je eigen winsta (zo doet vziw Task Scheduler het ook), maar een winsta creeren als service en die attachen aan een user gaat denk ik niet lukken tenzij een interactive service die je onder een user account draait aan een echte interactieve desktop kan.

Verwijderd

Mja, de vraag is hoe XP dat doet met winstations en desktops. En dat staat nergens in die WinLogon documentatie.

Die is sowieso uit de tijd, want er wordt totaal geen rekening gehouden met Fast User Switching; bijvoorbeeld:
When Winlogon is in the workstation-locked state, a secure desktop is displayed until the user unlocks the workstation by providing the same identification and authentication information as the user who originally logged on, or until an administrator forces a logoff.
Klopt dus niet meer helemaal met XP.

Wat me doet vermoeden dat de documentatie wel klopt maar dat FUS gewoon een hack van Microsoft is op hun eigen systeem :).

Toch maar eens verder lezen...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 28 juli 2004 @ 10:46:
Mja, de vraag is hoe XP dat doet met winstations en desktops. En dat staat nergens in die WinLogon documentatie.

Die is sowieso uit de tijd, want er wordt totaal geen rekening gehouden met Fast User Switching; bijvoorbeeld:
Op zich klopt die documentatie, maar dan voor domain logons (daar werkt FUS namelijk niet bij). Ik weet zelf ook niet echt hoe FUS geimplementeerd is, maar volgens mij is het puur een kwestie van extra Desktops op eenzelfde WinStation (je hebt er normaal 3: desktop, winlogon en screensaver).

Check eens of je WlxActivateUserShell in de MSGina.dll kunt aanroepen, zie het kopje 'Implementing WlxActivateUserShell' in MSDN:
The following code shows an example WlxActivateUserShell implementation. This example calls the function CreateProcessAsUser to run Userinit.exe, which sets up some user preferences and starts the shell.

Note that if CreateProcessAsUser is not successful, your implementation must return FALSE to tell Winlogon to log off.
Dit is een nogal belangrijke clue: het lijkt er dus op dat je met LogonUserEx en een CreateProcessAsUser op UserInit.exe iets voor mekaar zou moeten kunnen krijgen. Een ander alternatief is natuurlijk gewoon je eigen GINA schrijven :)

[ Voor 37% gewijzigd door curry684 op 28-07-2004 10:55 ]

Professionele website nodig?


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Topicstarter
Een hack is het niet echt - Windows heeft al zins het begin meerdere 'desktops' gekend (WinSta tions lijken een beetje op desktops zeg maar - niet helemaal waar maar tis wat eenvoudiger). Iirc had je vroeger altijd drie desktops - de 'Service' desktop (daar draaiden services op), de Winlogon desktop (CAD scherm e.d.) en de interactieve desktop.

Door gewoon een winsta toe te voegen krijg je in principe een extra user (er zit iets meer aan dan dat, maar soit :P ). In de de API call CreateProcessAsUser() een desktop opgeven in het startupinfo record:

Zie: http://msdn.microsoft.com...e/createprocessasuser.asp
http://msdn.microsoft.com.../base/startupinfo_str.asp

Verwijderd

curry684 schreef op 28 juli 2004 @ 10:50:
[...]

Op zich klopt die documentatie, maar dan voor domain logons (daar werkt FUS namelijk niet bij). Ik weet zelf ook niet echt hoe FUS geimplementeerd is, maar volgens mij is het puur een kwestie van extra Desktops op eenzelfde WinStation (je hebt er normaal 3: desktop, winlogon en screensaver).
Ja, maar volgens de documentatie kan de WS gelockt worden, en kan daarna niemand meer inloggen. Dus het kan goed zijn dat FUS daaromheen werkt en gewoon een nieuwe WS aanmaakt.

Maar er is niet echt veel over te vinden...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

elevator schreef op 28 juli 2004 @ 10:53:
Een hack is het niet echt - Windows heeft al zins het begin meerdere 'desktops' gekend (WinSta tions lijken een beetje op desktops zeg maar - niet helemaal waar maar tis wat eenvoudiger).
Absoluut niet waar: een desktop bestaat binnen een Window Station. De WinSta representeert een fysiek station: A window station is a secure object that contains a set of global atoms, a clipboard, and a set of desktop objects.. Een desktop is daarbinnen een grafische omgeving: A desktop is a secure object contained within a window station object. A desktop has a logical display surface and contains windows, menus, and hooks.

Zie ook de CreateDesktop en CreateWindowStation API calls.



edit:
edit2: zitten we nu niet erg hard op Programming & Webscripting niveau te neuzelen nadat ik dit topic stomtoevallig hier vond? :P

[ Voor 14% gewijzigd door curry684 op 28-07-2004 11:01 ]

Professionele website nodig?


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Topicstarter
Zoals ik al zeg - ik heb het enigszins vereenvoudigd weergegeven . Voor een gebruiker is een winstation namelijk gelijk aan een desktop (je ziet alleen je winsta\default) - dat het in zichzelf meerdere virtuele desktops representeert weet ik :)

[edit]
Mjah - ik denk dat je beter een nieuw topic kan openen in Programming & Webscripting als je hierover wilt doorgaan idd.

[edit]Ik heb ooit eens geprobeerd vanuit een 2000 (v3) portmonitor een dialog te creeren op een willekeurige interactieve desktop van een user op een terminal server en ik kan je vertellen dat dat niet gemakkelijk is :)

[ Voor 41% gewijzigd door elevator op 28-07-2004 11:02 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

elevator schreef op 28 juli 2004 @ 11:01:
[edit]
Mjah - ik denk dat je beter een nieuw topic kan openen in Programming & Webscripting als je hierover wilt doorgaan idd.
Splits maar af vanaf [rml]OneOfBorg in "[ XP] Automatisch inloggen zonder welcome..."[/rml], dan mag OneOfBorg daarna z'n nieuwe startpost even bijediten :)

Professionele website nodig?


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Topicstarter
Afgesplitst van [rml][ XP] Automatisch inloggen zonder welcome screen te unlocken?[/rml] - je mag zelf even een nieuwe topictitel bedenken :)
Pagina: 1