Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

SecureString.MakeReadOnly Method

Definition

Namespace:
System.Security
Assemblies:
netstandard.dll, System.Runtime.InteropServices.dll
Assembly:
System.Security.SecureString.dll
Assembly:
System.Runtime.InteropServices.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
SecureString.cs
Source:
SecureString.cs
Source:
SecureString.cs
Source:
SecureString.cs
Source:
SecureString.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Makes the text value of this secure string read-only.

public:
 void MakeReadOnly();
public void MakeReadOnly();
member this.MakeReadOnly : unit -> unit
Public Sub MakeReadOnly ()

Exceptions

This secure string has already been disposed.

Examples

The following example demonstrates how the AppendChar and RemoveAt methods can be used to collect the characters in a password. After the password is collected, it is made read-only.

using System;
using System.Security;

class Example
{
 public static void Main()
 {
 ConsoleKeyInfo cki;
 String m = "\nEnter your password (up to 15 letters, numbers, and underscores)\n" +
 "Press BACKSPACE to delete the last character entered. " +
 "\nPress Enter when done, or ESCAPE to quit:";
 SecureString password = new SecureString();
 int top, left;

 // The Console.TreatControlCAsInput property prevents CTRL+C from
 // ending this example.
 Console.TreatControlCAsInput = true;

 Console.Clear();
 Console.WriteLine(m);

 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.

 do {
 cki = Console.ReadKey(true);
 if (cki.Key == ConsoleKey.Escape) break;

 if (cki.Key == ConsoleKey.Backspace) {
 if (password.Length > 0) {
 Console.SetCursorPosition(left + password.Length - 1, top);
 Console.Write(' ');
 Console.SetCursorPosition(left + password.Length - 1, top);
 password.RemoveAt(password.Length-1);
 }
 }
 else {
 if ((password.Length < 15) &&
 (Char.IsLetterOrDigit(cki.KeyChar) || cki.KeyChar == '_')) {
 password.AppendChar(cki.KeyChar);
 Console.SetCursorPosition(left+password.Length-1, top);
 Console.Write('*');
 }
 }
 } while (cki.Key != ConsoleKey.Enter & password.Length < 15);

 // Make the password read-only to prevent modification.
 password.MakeReadOnly();
 // Dispose of the SecureString instance.
 password.Dispose();
 }
}
// This example displays output like the following:
// Enter your password (up to 15 letters, numbers, and underscores)
// Press BACKSPACE to delete the last character entered.
// Press Enter when done, or ESCAPE to quit:
// ************
Imports System.Security

Class ExampleClass
 Public Shared Sub Main()
 Dim cki As ConsoleKeyInfo
 Dim m As String = vbCrLf & "Enter your password (up to 15 letters, numbers, and underscores)" &
 vbCrLf & "Press BACKSPACE to delete the last character entered. " & vbCrLf &
 "Press Enter when done, or ESCAPE to quit: "
 Dim password As New SecureString()
 Dim top, left As Integer

 ' The Console.TreatControlCAsInput property prevents CTRL+C from
 ' ending this example.
 Console.TreatControlCAsInput = True

 Console.Clear()
 Console.WriteLine(m)

 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.

 Do
 cki = Console.ReadKey(True)
 If cki.Key = ConsoleKey.Escape Then Exit Do

 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
 Loop While cki.Key <> ConsoleKey.Enter And password.Length < 15

 ' Make the password read-only to prevent modification.
 password.MakeReadOnly()
 ' Dispose of the SecureString instance.
 password.Dispose()
 End Sub
End Class
' The example displays output like the following:
' Enter your password (up to 15 letters, numbers, and underscores)
' Press BACKSPACE to delete the last character entered.
' Press Enter when done, or ESCAPE to quit:
' ************

Remarks

Initialize the text value of an instance of the SecureString class with the SecureString constructors, and modify the value with the Clear, RemoveAt, SetAt, InsertAt, and AppendChar methods.

After you have made your final modifications, use the MakeReadOnly method to make the value of the instance immutable (read-only). After the value is marked as read-only, any further attempt to modify it throws an InvalidOperationException.

The effect of invoking MakeReadOnly is permanent because the SecureString class provides no means to make the secure string modifiable again. Use the IsReadOnly method to test whether an instance of SecureString is read-only.

Applies to

See also


Feedback

Was this page helpful?