Почему перечисление Win32_Shares как пользователя "LOCAL SERVICE" возвращает нулевые свойства? - PullRequest
0 голосов
/ 22 марта 2011

У меня есть следующий код:

  var searcher = new ManagementObjectSearcher("SELECT Name, Path FROM Win32_share");
  ManagementObjectCollection coll = searcher.Get();

  foreach (var share in coll)
  {
      Console.WriteLine("share-path: " + share["Path"] + " share-name:" + share["Name"]);
  }

Запустив его, как я, я получаю разумный вывод:

share-path: C:\Windows share-name:ADMIN$
share-path: C:\ share-name:C$
share-path: D:\ share-name:D
share-path: D:\ share-name:D$
share-path:  share-name:IPC$

Запуск его из службы в качествепользователь локальной системы, я не получаю свойство Path:

share-path: share-name:ADMIN$
share-path: share-name:C$
share-path: share-name:D
share-path: share-name:D$
share-path: share-name:IPC$

Разве локальная служба не сможет просматривать пути к общим папкам?Что я делаю неправильно?(Примечание: я также попытался запустить как «NETWORK SERVICE» с теми же результатами.

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

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

1 голос
/ 22 апреля 2011

Я пытался использовать WinApi NetShareEnum и получил те же результаты. Интересно отметить, что этот код работает правильно в Windows 2008 R2 и не работает в Windows 2008. Я не пробовал более ранние платформы.

Это похоже на проблему с разрешениями, потому что локальная учетная запись SYSTEM имеет доступ к общим путям. Бесконечные тесты и игра с локальными настройками безопасности не дали никаких результатов. Я не смог найти никаких подозрительных действий, используя regmon или filemon. В итоге я переключил свое приложение на учетную запись SYSTEM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...