Marshal.SecureStringToGlobalAllocAnsi(SecureString) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
중요
이 API는 CLS 규격이 아닙니다.
복사할 때 ANSI 형식으로 변환하여 관리되는 SecureString의 내용을 관리되지 않는 메모리로 복사합니다.
public:
static IntPtr SecureStringToGlobalAllocAnsi(System::Security::SecureString ^ s);
public static IntPtr SecureStringToGlobalAllocAnsi (System.Security.SecureString s);
[System.CLSCompliant(false)]
public static IntPtr SecureStringToGlobalAllocAnsi (System.Security.SecureString s);
[System.Security.SecurityCritical]
public static IntPtr SecureStringToGlobalAllocAnsi (System.Security.SecureString s);
static member SecureStringToGlobalAllocAnsi : System.Security.SecureString -> nativeint
[<System.CLSCompliant(false)>]
static member SecureStringToGlobalAllocAnsi : System.Security.SecureString -> nativeint
[<System.Security.SecurityCritical>]
static member SecureStringToGlobalAllocAnsi : System.Security.SecureString -> nativeint
Public Shared Function SecureStringToGlobalAllocAnsi (s As SecureString) As IntPtr
매개 변수
복사할 관리되는 개체입니다.
반환
IntPtr
nativeint
관리되지 않는 메모리에서 s
매개 변수가 복사된 주소이거나 null 개체가 제공된 경우 0입니다.
- 특성
예외
s
매개 변수가 null
인 경우
사용 가능한 메모리가 부족한 경우
예제
다음 예제에서는 메서드를 SecureStringToGlobalAllocAnsi 사용하여 개체의 SecureString 내용을 관리되지 않는 메모리 블록으로 마샬링하고 암호 해독합니다. 그런 다음 메서드를 ZeroFreeGlobalAllocAnsi 사용하여 관리되지 않는 블록을 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.SecureStringToGlobalAllocAnsi(passWord);
passWord.Dispose();
if (unmanagedRef != IntPtr.Zero) {
Console.WriteLine("Zeroing out unmanaged memory...");
Marshal.ZeroFreeGlobalAllocAnsi(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
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.SecureStringToGlobalAllocAnsi(passWord)
passWord.Dispose()
If unmanagedRef <> IntPtr.Zero Then
Console.WriteLine("Zeroing out unmanaged memory...")
Marshal.ZeroFreeGlobalAllocAnsi(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.
설명
메서드는 SecureStringToGlobalAllocAnsi 사용자 지정 마샬링 또는 관리 코드와 비관리 코드를 혼합할 때 유용합니다. 이 메서드는 문자열에 필요한 관리되지 않는 메모리를 할당하므로 항상 메서드를 호출하여 메모리를 해제합니다 ZeroFreeGlobalAllocAnsi .
적용 대상
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET