Вы можете p / invoke LsaEnumerateLogonSessions ():
[DllImport("Secur32.dll", SetLastError = false)]
private static extern uint LsaEnumerateLogonSessions(out UInt64 logonSessionCount, out IntPtr logonSessionList);
[DllImport("secur32.dll", SetLastError = false)]
private static extern uint LsaFreeReturnBuffer(IntPtr buffer);
Первый параметр будет содержать количество зарегистрированных пользователей, если функция завершится успешно.Вы должны немедленно освободить массив LUID, возвращенный во втором параметре, используя LsaFreeReturnBuffer (), чтобы избежать утечек.
EDIT: LsaEnumerateLogonSessions () также возвращает неинтерактивные сеансы, поэтому вам необходимовызовите LsaGetLogonSessionData () для каждого LUID, чтобы проверить, является ли он интерактивным.Так что лучше использовать WMI, как предложил Unmesh, поскольку вам не придется перебирать IntPtr.Алгоритм остается тем не менее.