SecureString.MakeReadOnly メソッド
アセンブリ: mscorlib (mscorlib.dll 内)



SecureString コンストラクタを使用して、SecureString クラスのインスタンスのテキスト値を初期化します。値を変更するには、Clear、RemoveAt、SetAt、InsertAt、AppendChar の各メソッドを使用します。
変更が終わったら、MakeReadOnly メソッドを使用してインスタンスの値を変更不可 (読み取り専用) にします。値を読み取り専用としてマークした後は、変更しようとすると必ず InvalidOperationException がスローされます。
セキュリティ文字列を再び変更可能にする方法はないため、MakeReadOnly の実行による効果は永続的です。SecureString のインスタンスが読み取り専用かどうかを確認するには、IsReadOnly メソッドを使用します。

AppendChar メソッドおよび RemoveAt メソッドを使用してパスワード内の文字を収集する方法を次のコード例に示します。収集後、パスワードは読み取り専用になります。
' This example demonstrates using the AppendChar and RemoveAt ' methods to collect a password. Imports System Imports System.Security Class Sample Public Shared Sub Main() Dim cki As ConsoleKeyInfo Dim m1 As String = "(This example simulates entering a password. " & _ "Do not enter an actual password.)" & vbCrLf Dim m2 As String = "Enter your password (up to 15 letters, numbers, and underscores)" & vbCrLf & "Press BACKSPACE to delete the last character entered. " & vbCrLf & _ "Press ESCAPE to quit:" Dim password As New SecureString() Dim top, left As Integer ' ' The Console.TreatControlCAsInput property prevents this example from ' ending if you press CTL+C, however all other operating system keys and ' shortcuts, such as ALT+TAB or the Windows Logo key, are still in effect. ' Each input character is assumed to occupy one screen column. ' Console.TreatControlCAsInput = True Console.Clear() Console.WriteLine(m1) Console.WriteLine(m2) top = Console.CursorTop left = Console.CursorLeft ' Read user input from the console. Store up to 15 letter, digit, or underscore ' characters in a SecureString object, or delete a character if the user enters ' a backspace. Display an asterisk (*) on the console to represent each character ' that is stored. While True cki = Console.ReadKey(True) If cki.Key = ConsoleKey.Escape Then Exit While End If If cki.Key = ConsoleKey.BackSpace Then If password.Length > 0 Then Console.SetCursorPosition(left + password.Length - 1, top) Console.Write(" "c) Console.SetCursorPosition(left + password.Length - 1, top) password.RemoveAt(password.Length - 1) End If Else If password.Length < 15 AndAlso([Char].IsLetterOrDigit(cki.KeyChar) _ OrElse cki.KeyChar = "_"c) Then password.AppendChar(cki.KeyChar) Console.SetCursorPosition(left + password.Length - 1, top) Console.Write("*"c) End If End If End While ' Make the password read-only to prevent it from being modified after it has ' been collected. password.MakeReadOnly() End Sub 'Main End Class 'Sample ' 'This example produces results similar to the following text: ' '(This example simulates entering a password. Do not enter an actual password.) ' 'Enter your password (up to 15 letters, numbers, and underscores) 'Press BACKSPACE to delete the last character entered. 'Press ESCAPE to quit: '*************** '

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- SecureString.MakeReadOnly メソッドのページへのリンク