Marshal.SecureStringToCoTaskMemUnicode(SecureString) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
Important
이 API는 CLS 규격이 아닙니다.
관리되는 개체의 내용을 관리 SecureString 되지 않는 COM 작업 할당자에서 할당된 메모리 블록에 복사합니다.
public:
static IntPtr SecureStringToCoTaskMemUnicode(System::Security::SecureString ^ s);
public static IntPtr SecureStringToCoTaskMemUnicode(System.Security.SecureString s);
[System.Security.SecurityCritical]
public static IntPtr SecureStringToCoTaskMemUnicode(System.Security.SecureString s);
[System.CLSCompliant(false)]
public static IntPtr SecureStringToCoTaskMemUnicode(System.Security.SecureString s);
static member SecureStringToCoTaskMemUnicode : System.Security.SecureString -> nativeint
[<System.Security.SecurityCritical>]
static member SecureStringToCoTaskMemUnicode : System.Security.SecureString -> nativeint
[<System.CLSCompliant(false)>]
static member SecureStringToCoTaskMemUnicode : System.Security.SecureString -> nativeint
Public Shared Function SecureStringToCoTaskMemUnicode (s As SecureString) As IntPtr
매개 변수
복사할 관리되는 개체입니다.
반품
nativeint
매개 변수가 복사된 관리되지 않는 메모리의 s 주소이거나 null 개체가 제공된 경우 0입니다.
- 특성
예외
매개 변수는 s .입니다 null.
사용 가능한 메모리가 부족합니다.
예제
다음 예제에서는 메서드를 사용하여 SecureStringToCoTaskMemUnicode 개체의 SecureString 내용을 관리되지 않는 메모리 블록으로 마샬링하고 암호 해독합니다. 그런 다음 이 메서드를 ZeroFreeCoTaskMemUnicode 사용하여 관리되지 않는 블록을 0으로 처리하고 삭제합니다.
using System;
using System.Runtime.InteropServices;
using System.Security;
class Example
{
static void Main()
{
IntPtr unmanagedRef = IntPtr.Zero;
// Ask the user for a password.
Console.Write("Please enter your password: ");
SecureString passWord = GetPassword();
Console.WriteLine("Copying and decrypting the string to unmanaged memory...");
// Copy the Secure string to unmanaged memory (and decrypt it).
unmanagedRef = Marshal.SecureStringToCoTaskMemUnicode(passWord);
passWord.Dispose();
if (unmanagedRef != IntPtr.Zero) {
Console.WriteLine("Zeroing out unmanaged memory...");
Marshal.ZeroFreeCoTaskMemUnicode(unmanagedRef);
}
Console.WriteLine("Done.");
}
public static SecureString GetPassword()
{
SecureString password = new SecureString();
// get the first character of the password
ConsoleKeyInfo nextKey = Console.ReadKey(true);
while (nextKey.Key != ConsoleKey.Enter) {
if (nextKey.Key == ConsoleKey.Backspace) {
if (password.Length > 0) {
password.RemoveAt(password.Length - 1);
// erase the last * as well
Console.Write(nextKey.KeyChar);
Console.Write(" ");
Console.Write(nextKey.KeyChar);
}
}
else {
password.AppendChar(nextKey.KeyChar);
Console.Write("*");
}
nextKey = Console.ReadKey(true);
}
Console.WriteLine();
// Lock the password down.
password.MakeReadOnly();
return password;
}
}
// The example displays output like the following:
// Please enter your password: **********
// Copying and decrypting the string to unmanaged memory...
// Zeroing out unmanaged memory...
// Done.
Imports System.Runtime.InteropServices
Imports System.Security
Module Example
Public Sub Main()
Dim unmanagedRef As IntPtr
' Ask the user for a password.
Console.Write("Please enter your password: ")
Dim passWord As SecureString = GetPassword()
Console.WriteLine("Copying and decrypting the string to unmanaged memory...")
' Copy the Secure string to unmanaged memory (and decrypt it).
unmanagedRef = Marshal.SecureStringToCoTaskMemUnicode(passWord)
passWord.Dispose()
If unmanagedRef <> IntPtr.Size Then
Console.WriteLine("Zeroing out unmanaged memory...")
Marshal.ZeroFreeCoTaskMemUnicode(unmanagedRef)
End If
Console.WriteLine("Done.")
End Sub
Function GetPassword() As SecureString
Dim password As New SecureString()
' Get the first character of the password.
Dim nextKey As ConsoleKeyInfo = Console.ReadKey(True)
While nextKey.Key <> ConsoleKey.Enter
If nextKey.Key = ConsoleKey.BackSpace Then
If password.Length > 0 Then
password.RemoveAt(password.Length - 1)
' Erase the last * as well.
Console.Write(nextKey.KeyChar)
Console.Write(" ")
Console.Write(nextKey.KeyChar)
End If
Else
password.AppendChar(nextKey.KeyChar)
Console.Write("*")
End If
nextKey = Console.ReadKey(True)
End While
Console.WriteLine()
' lock the password down
password.MakeReadOnly()
Return password
End Function
End Module
' The example displays output like the following:
' Please enter your password: **********
' Copying and decrypting the string to unmanaged memory...
' Zeroing out unmanaged memory...
' Done.
설명
이 SecureStringToCoTaskMemUnicode 메서드는 사용자 지정 마샬링 또는 관리 코드와 관리되지 않는 코드를 혼합할 때 유용합니다. 이 메서드는 문자열에 필요한 관리되지 않는 메모리를 할당하므로 항상 메서드를 호출하여 메모리를 해제합니다 ZeroFreeCoTaskMemUnicode . 문자열의 문자는 유니코드 문자로 복사됩니다.