2011-07-28 37 views
1

我有一個需要找到我的硬盤(在C:分區)上的所有文件中查找所有文件,不論權限。 (的Windows XP專業版,採用C#)不管權限(Windows XP中,C#)

在前面一個問題,有人告訴我:

的「C:\系統卷Inforamtion」無法查看文件夾,因爲它只是分配給系統用戶。爲了看到它,你需要掌握它的所有權。但是,出於安全原因,不建議這樣做。 - Alex Mendez

我和Windows一起工作了很多年,這是我第一次聽說過SYSTEM用戶(這解釋了我過去曾經遇到過的許多挫折)。我曾假設「管理員」與UNIX中的「root」用戶類似,可以訪問所有內容。

在Windows中,是否有最終用戶擁有一切?

如果是這樣,那個用戶是誰?

如果是這樣,我如何以該用戶身份運行我的C#程序,以便我可以看到所有文件?

如果不是,有一些其他的方法? (其他程序做到這一點。)

+0

你想以編程方式做到這一點? –

回答

0

我敢肯定的是,只有這樣,才能訪問這些文件夾*是爲運行環0,這是CPU本身的內核級用戶分區;這也是一些惡意軟件/ Rootkit可以讓你的系統掛鉤的方式。

我很有信心,這是不是你可以在.net中實現的,我不知道你實際上可以實現它在無需編寫的系統級驅動器(一個.sys文件)。

無論如何,文件系統適用於操作系統,如果你是一個NTFS格式化驅動器上的內容是加密的,有一個超級讀所有的驅動程序將無法解密文件給你。

編輯:這些文件夾是系統文件夾,如果您可以PInvoke BackupRead/Write功能,您可能會訪問其他數據。

+0

儘管除了單個文件安全性的條款之外,管理員可以取得所有權並獲得訪問權限,如果您可以通過編程方式獲取對象的所有權,但這並不意味着您將從該文件獲取有意義的信息。 –

0

我相信FILE_FLAG_BACKUP_SEMANTICS大多可以做你所需要的。

+0

這不是一個.Net的東西,我不知道PInvoke等人是否會讓你使用這些函數,但是這個線程可能會根據這些語義指向正確的方向:http://social.msdn.microsoft.com /論壇/ EN-US/vcgeneral /線程/ d9397d33-b35f-407E-920D-b2dccdf969ec / –

0

您可以以交互方式(如SYSTEM)運行應用程序(或命令提示符)。例如,請參閱this question的接受答案。一旦應用程序運行交互式上下文,它就可以直接打開系統卷信息。

[編輯補充說明:]

在Windows中,有擁有一切的最終用戶?

不。有一個特權SeTakeOwnershipPrivilege,它默認授予管理員(並且隱式爲System),允許對象擁有所有權。對象所有者可以隨時更改ACL以授予訪問權限。

另一個特權SeBackupPrivilege授予管理員和備份操作員(以及系統)。它旨在允許讀取文件以執行備份,並繞過正常的讀取操作。這有效地允許讀取任何文件,繞過正常的訪問控制限制。

如果是這樣,那個用戶是誰?

沒有這樣的用戶。默認情況下,Windows僅通過該目錄上的ACL授予SYSTEM對C:\ System Volume Information的訪問權限。

如果是這樣,我該如何運行我的C#程序作爲該用戶,以便我可以看到所有文件?

您可以專門運行該程序作爲系統來查看系統卷信息(上面),雖然這不會讓你查看所有的文件必然。我認爲擁有備份操作員權限並使用備份標誌進行讀取操作是唯一可以查看所有文件而不管權限的機制。

0

不,沒有root用戶可以訪問所有內容。以SYSTEM或管理員或任何其他用戶身份運行將無法解決您的問題。你已經承擔了一個非常複雜的問題,並且用C#完成它將是一個額外的挑戰。我建議重新考慮使用C#。

開始here並閱讀FILE_FLAG_BACKUP_SEMANTICS標誌的說明以及鏈接,瞭解如何更改令牌上的權限。基本上,您將不得不暫時更改每個沒有讀取訪問權限的文件/目錄的訪問權限。