// добавляет справку к System.Management.dll к проекту.
using система;
using System.Collections;
using System.Management;
using System.Text.RegularExpressions;
using System.Collections.Generic;
namespace CSharp.CodeSnippet.WMI
{
общественный тип Win32_LogonSession
{
общественный шнур AuthenticationPackage;
общественный шнур LogonID;
общественное LogonEventType LogonType;
общественное имя шнура;
общественное DateTime StartTime;
общественное enum LogonEventType
{
Система = 0,
Взаимодействующе,
Сеть,
Серия,
Обслуживание,
Полномочие,
Откройте,
NetworkClearText,
NewCredentials,
RemoteInteractive,
CachedInteractive,
CachedRemoteInteractive,
CachedUnlock
}
общественный статический список GetList ()
{
вопрос шнура = «выбирает * от Win32_LogonSession»;
Искатель ManagementObjectSearcher = новое ManagementObjectSearcher (вопрос);
ManagementObjectCollection приводит к = искатель. Получите ();
Перечислите список = новый список (результаты. Отсчет);
Словарь userTable = GetLoggedOnUsersTable ();
foreach (ManagementObject logonCurrent в результатах)
{
Вход Win32_LogonSession = новое Win32_LogonSession ();
entry.AuthenticationPackage = (шнур) logonCurrent [«AuthenticationPackage»];
entry.LogonID = (шнур) logonCurrent [«LogonID»];
entry.LogonType = (LogonEventType) Convert.ToInt32 (logonCurrent [«LogonType»]);
entry.StartTime = ConvertFileTime ((шнур) logonCurrent [«StartTime»]);
если (userTable.ContainsKey, то (entry.LogonID))
{
вход. Имя = (шнур) userTable [entry.LogonID];
}
список. Добавьте (вход);
}
возвратите список;
}
приватный статический словарь GetLoggedOnUsersTable ()
{
вопрос шнура = «выбирает * от Win32_LoggedOnUser»;
Искатель ManagementObjectSearcher = новое ManagementObjectSearcher (вопрос);
ManagementObjectCollection приводит к = искатель. Получите ();
Таблица словаря = новый словарь (результаты. Отсчет);
foreach (currentObject ManagementObject в результатах)
{
зашнуруйте учет = GetUser (currentObject (шнура) [«антецедент»]);
зашнуруйте встречу = GetLogonID (currentObject (шнура) [«иждивенец»]);
таблица. Добавьте (встреча, учет);
}
возвратите таблицу;
}
приватный статический шнур GetLogonID (propertyText шнура)
{
зашнуруйте картину = «LogonId= \» (? ) \ \ d+ \ "";
matchID спички = Regex.Match (propertyText, картина);
если (matchID.Success), то
{
возвращенное matchID.Groups [«удостоверение личности»]. Значение;
}
еще
{
возвращенное "";
}
}
приватный статический шнур GetUser (propertyText шнура)
{
зашнуруйте картину = «Domain= \» (? [\ A-Za-z \ d_-] +) \ «|Name= \» (? [\ \ A-Za-z \ d \ s_-] +) \ "";
домен = "" шнура;
имя = "" шнура;
foreach (спичка matchCurrent в Regex.Matches (propertyText, картине))
{
fullText шнура = matchCurrent.Groups [0]. Значение;
если (fullText.StartsWith, то («домен»))
{
домен = matchCurrent.Groups [«домен»]. Значение;
}
еще
{
имя = matchCurrent.Groups [«имя»]. Значение;
}
}
если (домен. == 0 длины)
{
возвращенное имя;
}
еще
{
возвращенный домен + «\ \» + имя;
}
}
приватное статическое DateTime ConvertFileTime (время шнура)
{
если (время! = null)
{
шнур const FILE_TIME_MASK = «yyyyMMddHHmmss»;
время = время. Подстрока (0, time.IndexOf («."));
возвращенное DateTime.ParseExact (время, FILE_TIME_MASK, null);
}
возвращенное DateTime.MinValue;
}
}
}
|