Dot-Net

遇到未在列舉中定義的 FileSystemRights 值

  • June 16, 2021

我編寫了一個應用程序來檢查目錄上的所有文件系統權限。

一個目錄有許多訪問規則(類型FileSystemAccessRule)。

每個訪問規則都有一個屬性FileSystemRights,它是一個標誌列舉。

執行此程序時,我不斷遇到一個FileSystemRights268435456(以0x10000000十六進製表示)。

這個值只是沒有出現在列舉中!它實際上高於最高的單個標誌值(Synchronize,值為0x100000)。

有誰知道這是什麼?

請參閱http://cjwdev.wordpress.com/2011/06/28/permissions-not-included-in-net-accessrule-filesystemrights-enum/

從該頁面:

使用 .NET,您可能認為確定分配給目錄/文件的權限應該很容易,因為定義了一個 FileSystemRights Enum,它似乎包含文件/目錄可以擁有的所有可能權限,並且呼叫 AccessRule.FileSystemRights 返回一個這些值的組合。但是,您很快就會遇到一些權限,其中此屬性中的值與 FileSystemRights 列舉中的任何值都不匹配(我希望他們不會將某些屬性命名為與 Type 同名的名稱,但是嘿)。

這樣做的最終結果是,對於某些文件/目錄,您根本無法確定分配給它們的權限。如果您執行 AccessRule.FileSystemRights.ToString,那麼對於這些值,您所看到的只是一個數字而不是描述(例如 Modify、Delete、FullControl 等)。您可能會看到的常見數字是:

-1610612736、–536805376 和 268435456

要弄清楚這些權限實際上是什麼,您需要查看當您將該數字視為 32 個單獨的位而不是整數(因為整數是 32 位長)時設置了哪些位,並將它們與此圖進行比較: http: //msdn.microsoft.com/en-us/library/aa374896(v=vs.85).aspx

例如,-1610612736 設置了第一位和第三位,這意味著它是 GENERIC_READ 與 GENERIC_EXECUTE 的組合。所以現在您可以將這些通用權限轉換為它們對應的特定文件系統權限。

您可以在此處查看每個通用權限映射到哪些權限:http: //msdn.microsoft.com/en-us/library/aa364399.aspx。請注意,STANDARD_RIGHTS_READ、STANDARD_RIGHTS_EXECUTE 和 STANDARD_RIGHTS_WRITE 都是同一件事(不知道為什麼,對我來說似乎很奇怪)並且實際上都等於 FileSystemRights.ReadPermissions 值。

引用自:https://stackoverflow.com/questions/9694834