internal static extern uint NetSessionEnum([MarshalAs(UnmanagedType.LPWStr)] string serverName, [MarshalAs(UnmanagedType.LPWStr)] string uncClientName, [MarshalAs(UnmanagedType.LPWStr)] string userName, [MarshalAs(UnmanagedType.U4)] SessionInfoLevel level, out SafeGlobalMemoryBufferHandle bufPtr, [MarshalAs(UnmanagedType.I4)] int prefMaxLen, [MarshalAs(UnmanagedType.U4)] out uint entriesRead, [MarshalAs(UnmanagedType.U4)] out uint totalEntries, [MarshalAs(UnmanagedType.U4)] out uint resumeHandle);
/// <summary>Creates a <see cref="SessionInfo"/> instance.</summary> /// <param name="hostName">The DNS or NetBIOS name of the specified host.</param> /// <param name="sessionLevel">One of the <see cref="SessionInfoLevel"/> options.</param> /// <param name="structure"> /// A <see cref="NativeMethods.SESSION_INFO_502"/>, <see cref="NativeMethods.SESSION_INFO_2"/>, /// <see cref="NativeMethods.SESSION_INFO_1"/>, <see cref="NativeMethods.SESSION_INFO_10"/> or <see cref="NativeMethods.SESSION_INFO_0"/> instance. /// </param> internal SessionInfo(string hostName, SessionInfoLevel sessionLevel, object structure) { var flags = 0; switch (sessionLevel) { case SessionInfoLevel.Info502: var sesi502 = (NativeMethods.SESSION_INFO_502)structure; NetName = sesi502.sesi502_cname; UserName = sesi502.sesi502_username; OpenedResources = (int)sesi502.sesi502_num_opens; ActiveTime = TimeSpan.FromSeconds((int)sesi502.sesi502_time); IdleTime = TimeSpan.FromSeconds((int)sesi502.sesi502_idle_time); ClientType = sesi502.sesi502_cltype_name; TransportType = sesi502.sesi502_transport; flags = (int)sesi502.sesi502_user_flags; break; case SessionInfoLevel.Info2: var sesi2 = (NativeMethods.SESSION_INFO_2)structure; NetName = sesi2.sesi2_cname; UserName = sesi2.sesi2_username; OpenedResources = (int)sesi2.sesi2_num_opens; ActiveTime = TimeSpan.FromSeconds((int)sesi2.sesi2_time); ClientType = sesi2.sesi2_cltype_name; flags = (int)sesi2.sesi2_user_flags; break; case SessionInfoLevel.Info1: var sesi1 = (NativeMethods.SESSION_INFO_1)structure; NetName = sesi1.sesi1_cname; UserName = sesi1.sesi1_username; OpenedResources = (int)sesi1.sesi1_num_opens; ActiveTime = TimeSpan.FromSeconds((int)sesi1.sesi1_time); IdleTime = TimeSpan.FromSeconds((int)sesi1.sesi1_idle_time); flags = (int)sesi1.sesi1_user_flags; break; case SessionInfoLevel.Info10: var sesi10 = (NativeMethods.SESSION_INFO_10)structure; NetName = sesi10.sesi10_cname; UserName = sesi10.sesi10_username; ActiveTime = TimeSpan.FromSeconds((int)sesi10.sesi10_time); IdleTime = TimeSpan.FromSeconds((int)sesi10.sesi10_idle_time); break; case SessionInfoLevel.Info0: var sesi0 = (NativeMethods.SESSION_INFO_0)structure; NetName = sesi0.sesi0_cname; break; } HostName = hostName; SessionLevel = sessionLevel; // SESS_GUEST = 1, // SESS_NOENCRYPTION = 2 GuestSession = flags == 1; EncryptedSession = !GuestSession && flags != 2; }