// adiciona uma referência a System.Management.dll ao projeto.
using o sistema;
using System.Collections;
using System.Management;
using System.Text.RegularExpressions;
using System.Collections.Generic;
namespace CSharp.CodeSnippet.WMI
{
classe pública Win32_LogonSession
{
corda pública AuthenticationPackage;
corda pública LogonID;
LogonEventType público LogonType;
nome público da corda;
StartTime DateTime público;
enum público LogonEventType
{
Sistema = 0,
Interativo,
Rede,
Grupo,
Serviço,
Proxy,
Destravar,
NetworkClearText,
NewCredentials,
RemoteInteractive,
CachedInteractive,
CachedRemoteInteractive,
CachedUnlock
}
lista de estática pública GetList ()
{
a pergunta da corda = “seleciona * de Win32_LogonSession”;
Pesquisador de ManagementObjectSearcher = ManagementObjectSearcher novo (pergunta);
ManagementObjectCollection resulta = pesquisador. Começ ();
Alistar a lista = lista nova (resultados. Contagem);
Dicionário userTable = GetLoggedOnUsersTable ();
foreach (ManagementObject logonCurrent nos resultados)
{
Entrada de Win32_LogonSession = Win32_LogonSession novo ();
entry.AuthenticationPackage = (corda) logonCurrent [“AuthenticationPackage”];
entry.LogonID = (corda) logonCurrent [“LogonID”];
entry.LogonType = (LogonEventType) Convert.ToInt32 (logonCurrent [“LogonType”]);
entry.StartTime = ConvertFileTime ((corda) logonCurrent [“StartTime”]);
se (userTable.ContainsKey (entry.LogonID))
{
entrada. Nome = (corda) userTable [entry.LogonID];
}
lista. Adicionar (entrada);
}
retornar a lista;
}
dicionário de estática confidencial GetLoggedOnUsersTable ()
{
a pergunta da corda = “seleciona * de Win32_LoggedOnUser”;
Pesquisador de ManagementObjectSearcher = ManagementObjectSearcher novo (pergunta);
ManagementObjectCollection resulta = pesquisador. Começ ();
Tabela do dicionário = dicionário novo (resultados. Contagem);
foreach (currentObject de ManagementObject nos resultados)
{
amarrar o cliente = o GetUser (currentObject (da corda) [“antecedente”]);
amarrar a sessão = o GetLogonID (currentObject (da corda) [“dependente”]);
tabela. Adicionar (sessão, cliente);
}
retornar a tabela;
}
corda de estática confidencial GetLogonID (propertyText da corda)
{
amarrar o teste padrão = “LogonId= \” (? ) \ \ d+ \ "";
matchID do fósforo = Regex.Match (propertyText, teste padrão);
se (matchID.Success)
{
matchID.Groups do retorno [“identificação”]. Valor;
}
mais
{
"" do retorno;
}
}
corda de estática confidencial GetUser (propertyText da corda)
{
amarrar o teste padrão = “Domain= \” (? [\ De A-Za-z \ d_-] +) \ “|Name= \” (? [\ \ De A-Za-z \ d \ s_-] +) \ "";
domínio = "" da corda;
nome = "" da corda;
foreach (fósforo matchCurrent em Regex.Matches (propertyText, teste padrão))
{
texto completo da corda = matchCurrent.Groups [0]. Valor;
se (fullText.StartsWith (“domínio”))
{
domínio = matchCurrent.Groups [“domínio”]. Valor;
}
mais
{
nome = matchCurrent.Groups [“nome”]. Valor;
}
}
se (domínio. == 0 do comprimento)
{
nome do retorno;
}
mais
{
domínio do retorno + “\ \” + nome;
}
}
ConvertFileTime DateTime de estática confidencial (tempo da corda)
{
se (tempo! = zero)
{
corda do const FILE_TIME_MASK = “yyyyMMddHHmmss”;
tempo = tempo. Substring (0, time.IndexOf (“."));
DateTime.ParseExact do retorno (tempo, FILE_TIME_MASK, zero);
}
DateTime.MinValue do retorno;
}
}
}
|