MutexSecurity 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示具名 Mutex 的 Windows 存取控制安全性。 此類別無法獲得繼承。
public ref class MutexSecurity sealed : System::Security::AccessControl::NativeObjectSecurity
public sealed class MutexSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Security.SecurityCritical]
public sealed class MutexSecurity : System.Security.AccessControl.NativeObjectSecurity
type MutexSecurity = class
inherit NativeObjectSecurity
[<System.Security.SecurityCritical>]
type MutexSecurity = class
inherit NativeObjectSecurity
Public NotInheritable Class MutexSecurity
Inherits NativeObjectSecurity
- 繼承
- 屬性
範例
下列程式碼範例示範規則和 Deny 規則之間的 Allow 分隔,並示範相容規則中的許可權組合。 此範例會 MutexSecurity 建立 物件、新增允許和拒絕目前使用者各種許可權的規則,並顯示產生的規則組。 此範例接著會允許目前使用者的新許可權,並顯示結果,顯示新許可權會與現有 Allow 規則合併。
注意
這個範例不會將安全性物件附加至 Mutex 物件。 您可以在 和 Mutex.SetAccessControl 中找到 Mutex.GetAccessControl 附加安全性物件的範例。
using System;
using System.Threading;
using System.Security.AccessControl;
using System.Security.Principal;
public class Example
{
public static void Main()
{
// Create a string representing the current user.
string user = Environment.UserDomainName + "\\" +
Environment.UserName;
// Create a security object that grants no access.
MutexSecurity mSec = new MutexSecurity();
// Add a rule that grants the current user the
// right to enter or release the mutex.
MutexAccessRule rule = new MutexAccessRule(user,
MutexRights.Synchronize | MutexRights.Modify,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
// Add a rule that denies the current user the
// right to change permissions on the mutex.
rule = new MutexAccessRule(user,
MutexRights.ChangePermissions,
AccessControlType.Deny);
mSec.AddAccessRule(rule);
// Display the rules in the security object.
ShowSecurity(mSec);
// Add a rule that allows the current user the
// right to read permissions on the mutex. This rule
// is merged with the existing Allow rule.
rule = new MutexAccessRule(user,
MutexRights.ReadPermissions,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
ShowSecurity(mSec);
}
private static void ShowSecurity(MutexSecurity security)
{
Console.WriteLine("\r\nCurrent access rules:\r\n");
foreach(MutexAccessRule ar in
security.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine(" User: {0}", ar.IdentityReference);
Console.WriteLine(" Type: {0}", ar.AccessControlType);
Console.WriteLine(" Rights: {0}", ar.MutexRights);
Console.WriteLine();
}
}
}
/*This code example produces output similar to following:
Current access rules:
User: TestDomain\TestUser
Type: Deny
Rights: ChangePermissions
User: TestDomain\TestUser
Type: Allow
Rights: Modify, Synchronize
Current access rules:
User: TestDomain\TestUser
Type: Deny
Rights: ChangePermissions
User: TestDomain\TestUser
Type: Allow
Rights: Modify, ReadPermissions, Synchronize
*/
Imports System.Threading
Imports System.Security.AccessControl
Imports System.Security.Principal
Public Class Example
Public Shared Sub Main()
' Create a string representing the current user.
Dim user As String = Environment.UserDomainName _
& "\" & Environment.UserName
' Create a security object that grants no access.
Dim mSec As New MutexSecurity()
' Add a rule that grants the current user the
' right to enter or release the mutex.
Dim rule As New MutexAccessRule(user, _
MutexRights.Synchronize _
Or MutexRights.Modify, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
' Add a rule that denies the current user the
' right to change permissions on the mutex.
rule = New MutexAccessRule(user, _
MutexRights.ChangePermissions, _
AccessControlType.Deny)
mSec.AddAccessRule(rule)
' Display the rules in the security object.
ShowSecurity(mSec)
' Add a rule that allows the current user the
' right to read permissions on the mutex. This rule
' is merged with the existing Allow rule.
rule = New MutexAccessRule(user, _
MutexRights.ReadPermissions, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
ShowSecurity(mSec)
End Sub
Private Shared Sub ShowSecurity(ByVal security As MutexSecurity)
Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)
For Each ar As MutexAccessRule In _
security.GetAccessRules(True, True, GetType(NTAccount))
Console.WriteLine(" User: {0}", ar.IdentityReference)
Console.WriteLine(" Type: {0}", ar.AccessControlType)
Console.WriteLine(" Rights: {0}", ar.MutexRights)
Console.WriteLine()
Next
End Sub
End Class
'This code example produces output similar to following:
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Deny
' Rights: ChangePermissions
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: Modify, Synchronize
'
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Deny
' Rights: ChangePermissions
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: Modify, ReadPermissions, Synchronize
備註
MutexSecurity物件會指定具名系統 Mutex 的存取權限,並指定如何稽核存取嘗試。 Mutex 的存取權限會以規則表示,每個存取規則都由 MutexAccessRule 物件表示。 每個稽核規則都是以 MutexAuditRule 物件表示。
這會鏡像基礎Windows安全性系統,其中每個安全性實體最多都有一個選擇性存取控制清單, (DACL) 控制安全物件的存取權,而且最多一個系統存取控制清單 (SACL) ,以指定稽核哪些存取嘗試。 DACL 和 SACL 是 ACE) (存取控制專案的排序清單,可指定使用者和群組的存取和稽核。 MutexAccessRule或 MutexAuditRule 物件可能代表多個 ACE。
注意
Mutex物件可以代表本機 Mutex 或具名系統 Mutex。 Windows存取控制安全性只對具名系統 mutex 有意義。
MutexSecurity、 MutexAccessRule 和 類別會隱藏 ACL 和 MutexAuditRule ACE 的實作詳細資料。 它們可讓您忽略十七個不同的 ACE 類型,以及正確維護存取權限繼承和傳播的複雜度。 這些物件也設計為防止下列常見的存取控制錯誤:
使用 Null DACL 建立安全性描述項。 DACL 的 Null 參考可讓任何使用者將存取規則新增至物件,可能建立拒絕服務攻擊。 新的 MutexSecurity 物件一律以空的 DACL 開頭,這會拒絕所有使用者的所有存取。
違反 ACE 的正式順序。 如果 DACL 中的 ACE 清單未以標準順序保留,使用者可能會不小心獲得安全物件的存取權。 例如,拒絕的存取權限必須一律出現在允許的存取權限之前。 MutexSecurity 物件會在內部維護正確的順序。
操作安全性描述項旗標,這應該只在資源管理員控制之下。
建立不正確 ACE 旗標組合。
操作繼承的 ACE。 繼承和傳播是由資源管理員處理,以回應您對存取和稽核規則所做的變更。
將無意義的 ACE 插入 ACL。
.NET 安全性物件不支援的唯一功能是大部分應用程式開發人員應該避免的危險活動,例如:
資源管理員通常會執行的低階工作。
以不維護標準順序的方式新增或移除存取控制專案。
若要修改具名 mutex 的Windows存取控制安全性,請使用 Mutex.GetAccessControl 方法來取得 MutexSecurity 物件。 藉由新增和移除規則來修改安全性物件,然後使用 Mutex.SetAccessControl 方法來重新附加它。
重要
對物件所做的 MutexSecurity 變更不會影響具名 Mutex 的存取層級,直到您呼叫 Mutex.SetAccessControl 方法,將改變的安全性物件指派給具名 Mutex 為止。
若要將存取控制安全性從一個 Mutex 複製到另一個 Mutex,請使用 Mutex.GetAccessControl 方法取得 MutexSecurity 代表第一個 Mutex 之存取和稽核規則的物件,然後使用 Mutex.SetAccessControl 方法或接受 MutexSecurity 物件的建構函式,將這些規則指派給第二個 Mutex。
投資安全性描述元定義語言的使用者 (SDDL) 可以使用 SetSecurityDescriptorSddlForm 方法來設定具名 mutex 的存取規則,以及 GetSecurityDescriptorSddlForm 取得代表 SDDL 格式之存取規則的字串。 不建議用於新的開發。
建構函式
MutexSecurity() |
使用預設值,初始化 MutexSecurity 類別的新執行個體。 |
MutexSecurity(String, AccessControlSections) |
從具有指定名稱的系統 Mutex,使用存取控制安全性規則的指定區段,初始化 MutexSecurity 類別的新執行個體。 |