2010-02-26 100 views
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調用。

奇怪的是,我已經在這個運行過程監控和遠程桌面場景有的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,嘗試查看是否可以授予對驅動器的遠程登錄讀取權限。

回答

0

我相信我找到了答案。從微軟white paper關於Vista的移動存儲設備:

I/O管理器和可移動媒體設備的ACL

當驅動程序堆棧創建設備對象時,I/O管理器設置一個默認的ACL是基於設備類型。默認ACL提供對SYSTEM和Administrators的完全訪問權限,並且只對其他人執行訪問。

  • 默認情況下,在Windows Vista中,I/O管理器授予爲可移動媒體設備,如CD驅動器,併爲已定義FILE_REMOVABLE_MEDIA特點這些磁盤設備對象設備對象的IU組完全訪問權限。 注意:在早期版本的Windows中,IU條目未出現在由I/O管理器設置的ACL中。 Windows Vistas I/O管理器提供對IU組的完全訪問權限,以便應用程序可以在不需要提升權限的情況下直接訪問卷,如前所述。但是,未設置可移動屬性的UFD設備不會從中受益,因爲I/O管理器不會將它們視爲可移動的。
  • 如果從設備接收到的響應SCSI INQUIRY命令的標識數據設置了可移動屬性,則磁盤類驅動程序會設置FILE_REMOVABLE_MEDIA特性。由於某些UFD設備即使不是真正的可移動介質,也會設置此屬性,因此I/O管理器將此類設備視爲可移動磁盤,併爲卷提供IU組的讀取和寫入訪問權限。
  • 默認情況下,Windows Vista I/O管理器僅爲可移動媒體設備對象(CD設備)的遠程連接用戶以及設置了FILE_REMOVABLE_MEDIA特性的磁盤設備對象提供執行訪問權限。因此,遠程用戶無法使用CD或DVD驅動器刻錄數據,也無法對光盤進行備份或格式化可移動磁盤。管理員可以將可移動存儲訪問組策略設置爲覆蓋默認行爲。當設置此策略時,I/O管理器授予對這些設備的遠程用戶的完全訪問權限,允許讀取和寫入功能。

那麼Vista將在ACL的不同設備的交互式用戶VS遠程用戶。我覺得它會是這樣的。