0

次のコードがあります。

  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$

LOCAL SERVICE で共有フォルダーのパスを表示できないようにする必要がありますか? 私は何を間違っていますか?(注:「NETWORK SERVICE」としても実行してみましたが、同じ結果でした。

4

2 に答える 2

1

WinApi NetShareEnumを使用してみましたが、同じ結果が得られました。興味深いことに、このコードはWindows 2008 R2で正しく動作し、Windows2008では機能しません。以前のプラットフォームを試したことはありません。

ローカルのSYSTEMアカウントは共有パスにアクセスできるため、これは権限の問題のように見えます。エンドレスなテストとローカルセキュリティ設定でのプレイは、何の結果ももたらしませんでした。regmonまたはfilemonを使用した疑わしいアクティビティは見つかりませんでした。アプリケーションをSYSTEMアカウントに切り替えることになりました。

于 2011-04-22T19:07:59.147 に答える
1

ローカルサービスには、ネットワーク共有に対する権限がありません。適切な権限を持つユーザー、おそらく共有に対する権限を持つドメインユーザーとしてサービスを実行する必要があります。

于 2011-04-22T19:10:30.837 に答える