Use o WMI para detectar se uma unidade USB estava conectada, independentemente de ter sido montada?

4

Estou escrevendo um script que usa MS KB 823732 para impedir temporariamente que os usuários conectem novos dispositivos de armazenamento USB. Isso funciona bem e a chave de registro HKLM\...\Services\UsbStor bloqueia com êxito o acesso de dispositivos recém-conectados.

Existe um evento WMI que me dirá que uma unidade estava conectada , independentemente de estar montada?

Eu tentei consultar por __InstanceCreationEvent , mas isso aparentemente só é gerado depois que a unidade é montada e disponibilizada, o que não atende aos meus requisitos.

    
por Seth Petry-Johnson 22.02.2010 / 19:36

1 resposta

1

Versão do .NET: link

Com a fonte: dotnetslackers.com/community/blogs/basharkokash/archive/2008/03/15/USB-Detection-source-code.aspx

Seção relevante:

static void AddInsetUSBHandler()
{

    WqlEventQuery q;
    ManagementScope scope = new ManagementScope("root\CIMV2");
    scope.Options.EnablePrivileges = true;

    try
    {

        q = new WqlEventQuery();
        q.EventClassName = "__InstanceCreationEvent";
        q.WithinInterval = new TimeSpan(0, 0, 3);
        q.Condition = @"TargetInstance ISA 'Win32_USBControllerdevice'";
        w = new ManagementEventWatcher(scope, q);
        w.EventArrived += new EventArrivedEventHandler(USBAdded);
        w.Start();

    }

    catch (Exception e)
    {

        Console.WriteLine (e.Message);
        if (w != null)
              w.Stop();

    }

}
    
por 23.02.2010 / 02:58