5

とりわけ、いくつかのマップされたドライブの存在をチェックする必要がある WPF アプリを作成しています。コードは簡単です。

DriveInfo[] systemDrives = DriveInfo.GetDrives();
foreach (DriveInfo i in systemDrives)
{
     if ((i.Name.Contains("V")) && (i.IsReady))
     {
          result = true;
          break;
     }

 }

マップされたドライブは、すべてのユーザーに対してマップされます。上記のコードは通常のユーザーとして実行すると正常に動作しますが、Visual Studio 2010 を管理者として実行すると、GetDrives メソッドは固定ドライブと DVD ドライブのみを返し、マップされたドライブは返しません。実行可能ファイルが管理者として実行されている場合も同様です。なぜこれが起こっているのでしょうか?

4

2 に答える 2

5

http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/125180-run-administrator-loses-access-mapped-drives.htmlから、

( http://social.technet.microsoft.com/Forums/en-US/w7itpronetworking/thread/31c9eff2-ece3-4430-886d-19b54796e411/経由):

これは実際には正常な動作です。XPで見たように、ドライブマッピングはユーザーコンテキストに固有です。したがって、User1にドライブH:が\ server \ share1にマップされている場合、User2はこのH:ドライブマッピングに自動的にアクセスできません。User1のセッションにのみ存在します。User2が\server\ share1にアクセスする場合は、H:ドライブまたはその他の適切なドライブのいずれかで独自のマッピングを作成する必要があります。

まあ、それはVistaでも同じようなものです....もっとそうです。

以前のバージョンのWindowsとは異なり、管理者がWindows Vistaを実行しているコンピューターにログオンすると、ユーザーの完全な管理者アクセストークンは、完全な管理者アクセストークンと標準ユーザーアクセストークンの2つのアクセストークンに分割されます。ログオンプロセス中に、管理者を識別する承認およびアクセス制御コンポーネントが削除され、標準のユーザーアクセストークンが作成されます。次に、標準のユーザーアクセストークンを使用して、デスクトップのExplorer.exeプロセスを開始します。すべてのアプリケーションは、デスクトップの最初の起動からアクセス制御データを継承するため、すべて標準ユーザーとして実行されます。管理者がログオンした後、ユーザーが管理タスクを実行しようとするまで、完全な管理者アクセストークンは呼び出されません。

したがって、管理者が管理アクセスを必要とするある種のアクションを実行するために「昇格」すると、その「分割トークン」は一時的に完全な管理トークンに置き換えられます。事実上、これは、ユーザーコンテキストが異なることを意味します。そのため、ドライブマッピングも変更されます。したがって、H:ドライブは、現在のコンテキストで有効なマッピングを持っていません。

私が使用した回避策は、管理コマンドプロンプト(常に昇格されたトークンがある場所)を開き、そこから一致するドライブマッピングを作成することです(net use h:\ server \ share1)。標準ユーザーと上級管理者は「H:」ドライブの意味を共通に理解しているため、すべてが正常に実行されます。

私は(まあ、ある種の!)なぜこのデザインが実施されているのか理解しています。私はそれを批判したり擁護したりしようとはしません。しかし、あなたはそれを持っています。

理想的な世界では、管理者は「グローバル」マッピングを構成でき、それはマシン上のすべてのユーザーコンテキストに自動的に適用されます(ほとんど実際のデバイスのように)。しかし、それは起こりませんでした。ほとんどのオペレーティングシステムには、さまざまな程度で、乱雑な妥協点があります。

于 2012-06-29T20:16:33.517 に答える
3

レジストリ エントリによって、マップされたドライブも管理者に表示されるようにすることができます。

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/システム

値 1 で DWORD EnableLinkedConnections を作成します

ここで説明されているように: http://www.winability.com/how-to-make-elevated-programs-recognize-network-drives/

これはWin 10でうまくいきました。

于 2020-02-12T10:13:51.237 に答える