Почему мой запрос WMI для событий CIM_LogicalDisk возвращает события Win32_LogicalDisk, а не события Win32_MappedLogicalDisk? - PullRequest
2 голосов
/ 22 июня 2011

У меня есть System.Management.WqlEventQuery , прослушивающий событие "__InstanceOperationEvent". Это событие является базовым классом для событий "__InstanceCreationEvent", "__InstanceDeletionEvent" и "__InstanceModificationEvent", поэтому оно охватывает все три.

Когда мое WqlEventQuery.Condition равно "TargetInstance ISA 'Win32_LogicalDisk'", я получаю события только для логических дисков, как и ожидалось.

Однако, когда мое WqlEventQuery.Condition равно "(TargetInstance ISA 'Win32_LogicalDisk' or TargetInstance ISA 'Win32_MappedLogicalDisk')", я все равно получаю только Win32_LogicalDisk событий. Кроме того, я также должен иметь возможность использовать WqlEventQuery.Condition , установленный как "TargetInstance ISA 'CIM_LogicalDisk'", потому что CIM_LogicalDisk является базовым классом для Win32_LogicalDisk и Win32_MappedLogicalDisk . К сожалению, этот альтернативный запрос также возвращает только Win32_LogicalDisk события.

В общем, я не могу захватить Win32_MappedLogicalDisk события. Я предполагаю, что такое событие должно генерироваться, когда я щелкаю правой кнопкой мыши сетевой ресурс и сопоставляю его как сетевой диск с новой буквой диска. Несмотря на то, что этот новый подключенный диск хорошо отображается в Проводнике, моя программа никогда не получает никаких событий.

Являются ли какие-либо мои предположения неверными? Что такое Win32_MappedLogicalDrive или что отличает его от Win32_LogicalDrive , чей DriveType является "NetworkDrive"? Как я могу записать события для подключения / отключения сетевых дисков с помощью WMI?

ОБНОВЛЕНИЕ: Я написал больше об этой проблеме здесь: http://social.technet.microsoft.com/Forums/en-US/ocsmanagement/thread/1c92f08b-b9c9-4f27-a1bb-0c16a8868d19 Это оказывается нежелательным побочным эффектом UAC, без работы, за исключением создания дублированных сопоставлений дисков под административный аккаунт.

1 Ответ

2 голосов
/ 22 июня 2011

Я искал, полагая, что это (как обычно) какое-то поведение, связанное с UAC в Vista / Window 7, и достаточно уверенное ... http://www.vistax64.com/powershell/270814-win32_mappedlogicaldisk-returns-null-vista.html

Поскольку сопоставленные накопители «для каждого пользователя», накопитель, сопоставленный не имеющим прав доступа пользователем (например, из Проводника), не может быть просмотрен запросом WMI, работающим с повышенными правами администратора. Это нелогично, потому что обычно приложение может получить доступ к большей информации, работающей от имени администратора, а не к меньшей. Таким образом, в зависимости от того, кто подключил диск, он может быть виден программе в зависимости от того, работает ли он с повышенными привилегиями или нет. Я предполагаю, что мне придется использовать параметры олицетворения, чтобы программа обнаружила все диски, к которым она может иметь доступ.

Кроме того, как только это сработало, я увидел дублирующиеся записи для сетевых дисков и понял, что набор объектов Win32_LogicalDisk включает в себя объекты Win32_MappedLogicalDisk, хотя Win32_MappedLogicalDIsk не является Win32_LogicalDisk, если речь идет о любой иерархии классов. Win32_MappedLogicalDisk, как и Win32_LogicalDisk, распространяется непосредственно из CIM_LogicalDisk в соответствии с документацией.

См. Обсуждение проблем, вызванных UAC для подключенных дисков, здесь: http://blogs.msdn.com/b/cjacks/archive/2007/02/19/mapped-network-drives-with-uac-on-windows-vista.aspx?PageIndex=2

Выдержка:

"Моя заглушка работает с правами администратора. Вы предлагаете, что как-то это может определить, что управляет стандартным пользователем был нанесен на карту, а затем сделать отображение снова? Или мне нужны две заглушки: первые пробеги без возвышения, а делает список (скажем, в реестр) подключенные диски, а затем обстреливает заглушка № 2, которая просит повышения до админ, читает список реестра и повторно сопоставляет диски. Звучит вроде Рубе Голдберг, как мне!"

Еще один обходной путь, например, дублирование сопоставлений дисков для администраторов, но включает предоставление общего доступа к сопоставлениям дисков обычных пользователей администраторам путем связывания их токенов. Смотри http://support.microsoft.com/kb/937624

...