Пишем логи о съемных носителях
Логирование подключения и отключение флешек уже встроенно в Windows, но не включено по умолчанию. Для активации записи логов необходимо включить журнал DriverFrameworks-UserMode. Это можно сделать через оснастку просмотр событий, команда для запуска eventvwr.msc. Расположен журнал в разделе журналы приложений и служб. После включения и получения первых событий, будем скриптом на Powershell получать необходимую информацию.
Путь к журналу — Microsoft-Windows-DriverFrameworks-UserMode/Operational. Размер журнала по-умолчанию составляет 1МБ, задать размер можно любой. В журнале нас будут интересовать события с ID — 2010 и 2100. Из событий 2100 необходимо будет получить значение RequestMinorCode, которое будет сообщать об извлечении USB носителя.
Скрипт извлечения USB носителя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$Events = Get-WinEvent -FilterHashtable @{Logname = "Microsoft-Windows-DriverFrameworks-UserMode/Operational" ; ID = 2100 ;} $ArrayList = New-Object System.Collections.ArrayList $V = "Получена операция PnP или управления питанием (27, 23) для устройства " Foreach ($Event in $Events) { [xml]$Xml = $Event.ToXml() $Row = "" | Select TimeCreated,MachineName,Messages $Row.MachineName = $Xml.Event.System.Computer $Row.TimeCreated = $Event.TimeCreated.ToString() if($Xml.Event.UserData.UMDFHostDeviceRequest.RequestMinorCode -eq "23") { $Row.Messages = $V + $Xml.Event.UserData.UMDFHostDeviceRequest.InstanceId [void]$ArrayList.Add($Row) } } $ArrayList | ft |
Скрипт подключения USB носителя:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$Events = Get-WinEvent -FilterHashtable @{Logname = "Microsoft-Windows-DriverFrameworks-UserMode/Operational" ; ID = 2010 ;} $ArrayList = New-Object System.Collections.ArrayList $V = "В хост-процессе успешно загружены драйверы устройства " Foreach ($Event in $Events) { [xml]$Xml = $Event.ToXml() $Row = "" | Select TimeCreated,MachineName,Messages $Row.MachineName = $Xml.Event.System.Computer $Row.TimeCreated = $Event.TimeCreated.ToString() $Row.Messages = $V + $Xml.Event.UserData.UMDFHostDeviceArrivalEnd.InstanceId [void]$ArrayList.Add($Row) } $ArrayList | ft |
Использование переменной V не обязательно в скрипте, но позволяет более детально понимать что произошло.