可移動驅動器我具有與殼寄存器驅動器時添加到系統中,或者當媒體被插入驅動器(經由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調用。
奇怪的是,我已經在這個運行過程監控和遠程桌面場景有的CreateFile從我的托盤應用的驅動器上沒有記錄。我知道我的托盤應用程序正在調用它,因爲我編寫了一個日誌文件,並且在Process Monitor日誌中看到CreateFile調用日誌文件。這就好像它甚至不足以被Process Monitor所吸引。
該機器是Windows 7的所有默認設置(即UAC)。我的帳戶是本地管理員。在這兩種情況下(本地和遠程桌面),我都以標準用戶身份運行我的托盤應用程序(即不提升)。但是,如果我提升我的托盤應用程序,則遠程桌面方案會成功打開驅動器。
這可能最終會被我們只是不支持的場景,但我還是想知道是怎麼回事。有任何想法嗎?
編輯1:再次看到這一點後,它似乎發生所有驅動器(不只是可移動的)。觀察到的行爲是相同的:CreateFile與ERROR_ACCESS_DENIED一起失敗,並且在Process Monitor中沒有日誌。
編輯2:似乎遠程登錄被拒絕讀訪問;如果我用0替換GENERIC_READ,那麼它將成功打開驅動器(儘管DeviceIoControl調用失敗並返回ERROR_ACCESS_DENIED)。我正在玩WinObj,嘗試查看是否可以授予對驅動器的遠程登錄讀取權限。