' 导入命名空间
Imports System.Security
Imports System.Security.Policy
Imports System.Security.Principal
Imports System.Security.Permissions
Public Class Form1
Inherits System.Windows.Forms.Form
' Event handler for Run button.
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
tbxOutput.Cursor = Cursors.WaitCursor
tbxOutput.Text = ""
Dim policyStatement As PolicyStatement = firstConstructorTest()
Dim policyStatement2 As PolicyStatement = secondConstructorTest()
' Add attributes to policy statement.
policyStatement.Attributes = PolicyStatementAttribute.All
Dim policyStatementCopy As PolicyStatement
policyStatementCopy = createCopy(policyStatement)
addXmlMember(policyStatementCopy)
summarizePolicyStatment(policyStatement)
' Align interface and conclude application.
tbxOutput.AppendText(vbCrLf + "This sample completed " + _
"successfully; press Exit to continue.")
tbxOutput.Cursor = Cursors.Default
End Sub
' Construct a PolicyStatement with an Unrestricted permission set.
Private Function firstConstructorTest() As PolicyStatement
' Construct policy statement based on newly created permission set.
' Assemble permission set.
Dim permissions As New PermissionSet(PermissionState.Unrestricted)
permissions.AddPermission( _
New SecurityPermission(SecurityPermissionFlag.Execution))
permissions.AddPermission( _
New ZoneIdentityPermission(SecurityZone.MyComputer))
' Instantiate a new policy statement with specified permission set.
Dim policyStatement As New PolicyStatement(permissions)
Return PolicyStatement
End Function
' Construct a PolicyStatement with an Unrestricted permission set with
' the LevelFinal attribute.
Private Function secondConstructorTest() As PolicyStatement
' Construct policy statement based on newly created permission set.
' Assemble permission set.
Dim permissions As New PermissionSet(PermissionState.Unrestricted)
permissions.AddPermission( _
New SecurityPermission(SecurityPermissionFlag.Execution))
permissions.AddPermission( _
New ZoneIdentityPermission(SecurityZone.MyComputer))
Dim levelFinalAttribute As PolicyStatementAttribute
levelFinalAttribute = PolicyStatementAttribute.LevelFinal
' Instantiate a new policy statement with specified permission set
' and the LevelFinal attibute set allowing lower policy levels to be
' avoided in a resolve.
Dim policyStatement As _
New PolicyStatement(permissions, levelFinalAttribute)
Return policyStatement
End Function
' Add named permission set to specified PolicyStatement.
Private Sub AddPermissions(ByRef policyStatement As PolicyStatement)
' Set up a NamedPermissionSet with all permissions.
Dim allPerms As New NamedPermissionSet("allPerms")
allPerms.AddPermission( _
New SecurityPermission(SecurityPermissionFlag.Execution))
allPerms.AddPermission( _
New ZoneIdentityPermission(SecurityZone.MyComputer))
allPerms.AddPermission( _
New SiteIdentityPermission("www.contoso.com"))
policyStatement.PermissionSet = allPerms
End Sub
' If the class attribute is not found in specified PolicyStatement,
' add a child XML element with an added class attribute.
Private Sub addXmlMember(ByRef policyStatement As PolicyStatement)
Dim xmlElement As SecurityElement = policyStatement.ToXml()
If (xmlElement.Attribute("class") Is Nothing) Then
Dim newElement As New SecurityElement("PolicyStatement")
newElement.AddAttribute("class", policyStatement.ToString())
newElement.AddAttribute("version", "1.1")
newElement.AddChild(New SecurityElement("PermissionSet"))
policyStatement.FromXml(newElement)
tbxOutput.AppendText("Added the class attribute and modified the")
tbxOutput.AppendText(" version number." + vbCrLf)
tbxOutput.AppendText(newElement.ToString() + vbCrLf)
End If
End Sub
' Verify specified object is a PolicyStatement type. Retrieve a copy
' using the private getCopy method.
Private Function createCopy( _
ByVal sourceObject As Object) As PolicyStatement
Dim returnedStatement = New PolicyStatement(Nothing)
' Compare specified object's type with the PolicyStatement type.
If (sourceObject.GetType() Is GetType(PolicyStatement)) Then
returnedStatement = getCopy(CType(sourceObject, PolicyStatement))
Else
Throw New ArgumentException("Excepted PolicyStatement type.")
End If
Return returnedStatement
End Function
' Return a copy of the specified PolicyStatement if the result of the
' Copy command results in an equivalent object. Otherwise, return the
' original object.
Private Function getCopy( _
ByVal policyStatement As PolicyStatement) As PolicyStatement
' Create an equivalent copy of the policy statement.
Dim policyStatementCopy As PolicyStatement = policyStatement.Copy()
' Compare the specified objects for equality.
If (Not policyStatementCopy.Equals(policyStatement)) Then
Return policyStatementCopy
Else
Return policyStatement
End If
End Function
' Summarize the specified PolicyStatement to the console window.
Private Sub summarizePolicyStatment( _
ByVal policyStatement As PolicyStatement)
' Retrieve the class path for policyStatement.
Dim policyStatementClass As String = policyStatement.ToString()
Dim hashCode As Integer = policyStatement.GetHashCode()
Dim attributeString As String = ""
' Retrieve the string representation of the Policy's attributes.
If (Not policyStatement.AttributeString Is Nothing) Then
attributeString = policyStatement.AttributeString
End If
' Write summary to console window.
tbxOutput.AppendText("*** " + policyStatementClass + " summary ***")
tbxOutput.AppendText(vbCrLf)
tbxOutput.AppendText("PolicyStatement has been created with hash ")
tbxOutput.AppendText("code(" + hashCode.ToString() + ") ")
tbxOutput.AppendText("containing the following attributes: ")
tbxOutput.AppendText(attributeString + vbCrLf)
End Sub
' Event handler for Exit button.
Private Sub Button2_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Application.Exit()
End Sub
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents Panel2 As System.Windows.Forms.Panel
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents tbxOutput As System.Windows.Forms.RichTextBox
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Panel2 = New System.Windows.Forms.Panel
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.Panel1 = New System.Windows.Forms.Panel
Me.tbxOutput = New System.Windows.Forms.RichTextBox
Me.Panel2.SuspendLayout()
Me.Panel1.SuspendLayout()
Me.SuspendLayout()
'
'Panel2
'
Me.Panel2.Controls.Add(Me.Button1)
Me.Panel2.Controls.Add(Me.Button2)
Me.Panel2.Dock = System.Windows.Forms.DockStyle.Bottom
Me.Panel2.DockPadding.All = 20
Me.Panel2.Location = New System.Drawing.Point(0, 320)
Me.Panel2.Name = "Panel2"
Me.Panel2.Size = New System.Drawing.Size(616, 64)
Me.Panel2.TabIndex = 1
'
'Button1
'
Me.Button1.Dock = System.Windows.Forms.DockStyle.Right
Me.Button1.Font = New System.Drawing.Font( _
"Microsoft Sans Serif", _
9.0!, _
System.Drawing.FontStyle.Regular, _
System.Drawing.GraphicsUnit.Point, _
CType(0, Byte))
Me.Button1.Location = New System.Drawing.Point(446, 20)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 24)
Me.Button1.TabIndex = 2
Me.Button1.Text = "&Run"
'
'Button2
'
Me.Button2.Dock = System.Windows.Forms.DockStyle.Right
Me.Button2.Font = New System.Drawing.Font( _
"Microsoft Sans Serif", _
9.0!, _
System.Drawing.FontStyle.Regular, _
System.Drawing.GraphicsUnit.Point, _
CType(0, Byte))
Me.Button2.Location = New System.Drawing.Point(521, 20)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(75, 24)
Me.Button2.TabIndex = 3
Me.Button2.Text = "E&xit"
'
'Panel1
'
Me.Panel1.Controls.Add(Me.tbxOutput)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill
Me.Panel1.DockPadding.All = 20
Me.Panel1.Location = New System.Drawing.Point(0, 0)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(616, 320)
Me.Panel1.TabIndex = 2
'
'tbxOutput
'
Me.tbxOutput.AccessibleDescription = _
"Displays output from application."
Me.tbxOutput.AccessibleName = "Output textbox."
Me.tbxOutput.Dock = System.Windows.Forms.DockStyle.Fill
Me.tbxOutput.Location = New System.Drawing.Point(20, 20)
Me.tbxOutput.Name = "tbxOutput"
Me.tbxOutput.Size = New System.Drawing.Size(576, 280)
Me.tbxOutput.TabIndex = 1
Me.tbxOutput.Text = "Click the Run button to run the application."
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 15)
Me.ClientSize = New System.Drawing.Size(616, 384)
Me.Controls.Add(Me.Panel1)
Me.Controls.Add(Me.Panel2)
Me.Name = "Form1"
Me.Text = "PolicyStatement"
Me.Panel2.ResumeLayout(False)
Me.Panel1.ResumeLayout(False)
Me.ResumeLayout(False)
End Sub
#End Region
End Class
请发表评论