Exemple #1
0
        static SessionInfo GetSessionInfo(string userName, string password)
        {
            var    ppSessionInfo        = IntPtr.Zero;
            UInt32 sessionCount         = 0;
            var    wtsEnumerateSessions = WTSEnumerateSessions((IntPtr)WTSCurrentServerHandle, 0, 1, ref ppSessionInfo, ref sessionCount);

            if (wtsEnumerateSessions)
            {
                var wtsSessionInfo = GetWTSSessionInfo(userName, sessionCount, ppSessionInfo);
                return(wtsSessionInfo == null && RDCClient.Connect(userName, password)
                    ? GetSessionInfo(userName, password)
                    : new SessionInfo(wtsSessionInfo, ppSessionInfo));
            }
            return(new SessionInfo(null, ppSessionInfo));
        }
Exemple #2
0
 public static void Launch(string userName, string password, string processPath, string arguments)
 {
     RDCClient.SessionInfo sessionInfo = RDCClient.GetSessionInfo(userName, password);
     if (sessionInfo.Info != null)
     {
         IntPtr userToken = RDCClient.GetUserToken(sessionInfo.Info.Value);
         Trace.TraceInformation("UserToken=" + userToken);
         CreateProcess(processPath, userToken, arguments);
         CloseHandle(userToken);
     }
     else
     {
         Environment.Exit(200);
     }
     WTSFreeMemory(sessionInfo.IntPtr);
 }