1

ドライブがシステムに追加されたとき、またはメディアがドライブに挿入されたときに(SHChangeNotifyRegister経由で)通知を受け取るためにシェルに登録するトレイアプリケーションがあります。これらの通知を受け取ったら、ドライブを開いてプロパティを照会しようとします。私のテストでは、単純な USB フラッシュ ドライブを使用しています。これは、物理コンソールでログオンしている場合は正常に機能しますが、リモート デスクトップ経由でログオンしている場合、CreateFile 呼び出しは ERROR_ACCESS_DENIED で失敗します。

私は CreateFile を次のように呼び出しています。

CreateFile(szDrive, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0 NULL);

ここで、szDrive の形式は"\\\\.\\G:"です。この後、いくつかの DeviceIoControl 呼び出しを行います。

奇妙なことに、これで Process Monitor を実行しましたが、リモート デスクトップのシナリオでは、トレイ アプリケーションからドライブに CreateFile のレコードがありません。ログ ファイルを書き込み、プロセス モニター ログにログ ファイルの CreateFile 呼び出しが表示されるので、トレイ アプリがそれを呼び出していることがわかります。Process Monitor に引っかかるほどには進んでいないようです。

マシンはすべてデフォルト設定 (つまり UAC) の Windows 7 です。私のアカウントはローカル管理者です。両方のシナリオ (ローカル デスクトップとリモート デスクトップ) で、トレイ アプリを標準ユーザー (昇格なし) として実行しています。ただし、トレイ アプリを昇格させると、リモート デスクトップ シナリオはドライブを開くことに成功します。

これは、私たちがサポートしないシナリオになる可能性がありますが、ここで何が起こっているのか知りたいです. 何か案は?

EDIT 1:これをもう一度見てみると、(リムーバブルドライブだけでなく)すべてのドライブで発生しているようです。観察された動作は同じです: CreateFile が ERROR_ACCESS_DENIED で失敗し、Process Monitor にログがありません。

編集 2: リモート ログオンが読み取りアクセスを拒否されているようです。GENERIC_READ を 0 に置き換えると、ドライブが正常に開かれます (ただし、DeviceIoControl 呼び出しは ERROR_ACCESS_DENIED で失敗します)。リモートログオンにドライブへの読み取りアクセスを許可できるかどうかを確認しようとして、WinObj をいじっています。

4

1 に答える 1

0

私は答えを見つけたと信じています。Vista のリムーバブル ストレージ デバイスに関するMicrosoftのホワイト ペーパーから:

I/O マネージャーとリムーバブル メディア デバイスの ACL

ドライバー スタックがデバイス オブジェクトを作成すると、I/O マネージャーは、デバイスの種類に基づく既定の ACL を設定します。デフォルトの ACL は、SYSTEM および管理者に完全なアクセス権を付与し、それ以外のすべてのユーザーには実行アクセス権のみを付与します。

  • Windows Vista の既定では、I/O マネージャーは IU グループに、CD ドライブなどのリムーバブル メディア デバイスのデバイス オブジェクト、および FILE_REMOVABLE_MEDIA 特性が定義されているディスク デバイス オブジェクトに対するフル アクセスを許可します。注: 以前のバージョンの Windows では、IU のエントリは、I/O マネージャーによって設定された ACL に存在しませんでした。Windows Vista の I/O マネージャーは IU グループへのフル アクセスを提供するため、前述のように、アプリケーションは特権の昇格を必要とせずにボリュームへの直接アクセスを受け取ることができます。ただし、Removable プロパティが設定されていない UFD デバイスは、I/O マネージャーがそれらをリムーバブルとして扱わないため、これによるメリットはありません。
  • SCSI INQUIRY コマンドに応答してデバイスから受信した ID データに Removable プロパティが設定されている場合、ディスク クラス ドライバーは FILE_REMOVABLE_MEDIA 特性を設定します。一部の UFD デバイスは、実際にはリムーバブル メディアではなくてもこのプロパティを設定するため、I/O マネージャーはそのようなデバイスをリムーバブル ディスクとして扱い、IU グループにボリュームへの読み取りおよび書き込みアクセスを提供します。
  • 既定では、Windows Vista の I/O マネージャーは、リムーバブル メディア デバイス オブジェクト (CD デバイス) および FILE_REMOVABLE_MEDIA 特性が設定されているディスク デバイス オブジェクトに対して、リモート接続ユーザーに実行アクセスのみを付与します。このため、リモート ユーザーは、CD または DVD ドライブを使用してデータを書き込んだり、光メディアへのバックアップを実行したり、リムーバブル ディスクをフォーマットしたりすることができません。管理者は、リムーバブル ストレージ アクセス グループ ポリシーを設定して、デフォルトの動作を上書きできます。このポリシーが設定されている場合、I/O マネージャーはこれらのデバイスのリモート ユーザーにフル アクセスを許可し、読み取りおよび書き込み機能を許可します。

そのため、Vista では、インタラクティブ ユーザーとリモート ユーザーに対して、異なる方法でデバイスに ACL を設定します。このようなものになると思いました。

于 2010-03-02T20:36:34.390 に答える