2010-07-27 4 views
0

J'ai un service qui s'exécute en tant que système, je veux engendrer un nouveau processus dans une session TS utilisateur avec les privilèges de l'utilisateur.Créer un processus en tant qu'utilisateur après le chargement du profil utilisateur

J'appelle LogonUser, LoadUserProfile, CreateEnvironmentBlock, CreateProcessAsUser et spwan le processus dans la session TS utilisateur.

Le terme processus (cmd.exe) dans la session utilisateur TS, mais quand je suis en train d'exécuter l'application GUI je reçois le message d'erreur suivant:

Exception EAccessViolation dans le module ntdll.dll à 00022272.

Violation d'accès à l'adresse 77D22272 dans le module 'ntdll.dll'. Ecrire de l'adresse 0000000C.

Ai-je manqué quelque chose?

Toute aide serait grandement appréciée!

Merci, Lior

Répondre

0

Regard sur Launching a process in user’s session from a service. Le problème principal est que vous devriez commencer le processus avec d'autres sessions TS. Donc, vous devez passer la session en cours en ce qui concerne SetTokenInformation et TokenSessionId. Pour être en mesure de le faire, vous devez activer le privilège SE_TCB_NAME.

De plus, vous devez changer la sécurité Descriptor du bureau et des objets de Windows en ce qui concerne la station de OpenWindowStation, OpenDesktop et SetUserObjectSecurity (voir http://msdn.microsoft.com/en-us/library/ms681928.aspx, http://msdn.microsoft.com/en-us/library/ms687107.aspx et http://support.microsoft.com/kb/165194)

Questions connexes