ドライブがシステムに追加されたとき、またはメディアがドライブに挿入されたときに(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 をいじっています。