|
using System;
using System.Management;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static private Thread trd;
static private bool Saindo = false;
static void Main(string[] args)
{
Console.WriteLine("Iniciado...");
trd = new Thread(monitoraHardlock);
trd.Name = "MonitoraHardLock";
trd.Start();
}
static internal void monitoraHardlock()
{
string temp = "";
string[] info;
string nserie = "";
//Crio a query/evento WMI que deve ficar monitorando o pen drive
//(Win32_DiskDrive) a cada 1 segundo.
//Dependendo da necessidade e o que será monitorado, esse tempo
//pode ser maior. E é um evento de tipo "deleção"
//(__InstanceDeletionEvent) pois quero saber se vai ser removido
//e não inserido.
WqlEventQuery query = new WqlEventQuery("__InstanceDeletionEvent",
new TimeSpan(0, 0, 1),
"TargetInstance isa \"Win32_DiskDrive\"");
//Crio o evento de monitoração em si
ManagementEventWatcher watcher = new ManagementEventWatcher();
watcher.Query = query;
watcher.Options.Timeout = new TimeSpan(0, 0, 1);
int i = 0;
do
{
try
{
//Depois da execução da linha abaixo, é que o 'watcher'
//inicia a monitoração se houve mudança dos discos
//(se algum foi removido) a aplicação fica "travada"
//nessa linha pois fica esperando o evento
ManagementBaseObject ex = watcher.WaitForNextEvent();
//Depois do evento ter ocorrido, pego todas as
//informações do disco, no caso pen drive, que foi removido
//e pego o numero de serie
temp = ((ManagementBaseObject)ex["TargetInstance"])["PNPDeviceID"].ToString();
//Pego somente as informações que quero...
info = temp.Split(new Char[] { '\\', '&' });
//Coloco numa variável e mostro na tela
nserie = info[info.Length - 2];
Console.WriteLine("Pendrive de serie: " + nserie + " removido.");
}
catch (ManagementException ex)
{
if (ex.ErrorCode == ManagementStatus.Timedout)
{
goto Saida;
}
}
Saida:
if (Saindo == true)
{
i = 1;
}
}
while (i == 0);
//Paro o watcher. Se não estiver dentro de um loop,
//assim que o evento for disparado a aplicação seria encerrada.
//No caso deste exemplo a monitoração é contínua
watcher.Stop();
}
}
}
|