/// <summary> /// Gets the processes running on the terminal server. /// </summary> /// <returns>An array of processes.</returns> public TerminalServerProcess[] GetProcesses() { IntPtr dataPtr; int count; TerminalServerProcess[] processes; if (!Win32.WTSEnumerateProcesses(this, 0, 1, out dataPtr, out count)) { Win32.ThrowLastError(); } using (var data = new WtsMemoryAlloc(dataPtr)) { processes = new TerminalServerProcess[count]; for (int i = 0; i < count; i++) { var process = data.ReadStruct <WtsProcessInfo>(i); processes[i] = new TerminalServerProcess( process.ProcessId, process.SessionId, Marshal.PtrToStringUni(process.ProcessName), process.Sid != IntPtr.Zero ? new Sid(process.Sid, _systemName) : null ); } return(processes); } }
/// <summary> /// Gets the processes running on the terminal server. /// </summary> /// <returns>An array of processes.</returns> public TerminalServerProcess[] GetProcesses() { IntPtr dataPtr; int count; TerminalServerProcess[] processes; if (!Win32.WTSEnumerateProcesses(this, 0, 1, out dataPtr, out count)) Win32.Throw(); using (WtsMemoryAlloc data = new WtsMemoryAlloc(dataPtr)) { processes = new TerminalServerProcess[count]; for (int i = 0; i < count; i++) { var process = data.ReadStruct<WtsProcessInfo>(0, WtsProcessInfo.SizeOf, i); processes[i] = new TerminalServerProcess( process.ProcessId, process.SessionId, Marshal.PtrToStringUni(process.ProcessName), process.Sid != IntPtr.Zero ? new Sid(process.Sid, _systemName) : null ); } return processes; } }