[StructLayout(LayoutKind.Sequential)]
public struct UNICODE_STRING : IDisposable
{
public ushort Length;
public ushort MaximumLength;
private IntPtr buffer;
public UNICODE_STRING(string s)
{
Length = (ushort)(s.Length * 2);
MaximumLength = (ushort)(Length + 2);
buffer = Marshal.StringToHGlobalUni(s);
}
public void Dispose()
{
Marshal.FreeHGlobal(buffer);
buffer = IntPtr.Zero;
}
public override string ToString()
{
return Marshal.PtrToStringUni(buffer);
}
}
<StructLayout(LayoutKind.Sequential)> _
Private Structure UNICODE_STRING
Public Length As UShort
Public MaximumLength As UShort
<MarshalAs(UnmanagedType.LPWStr)> _
Private buffer As String
Public Sub New(s As String)
Length = CUShort(s.Length * 2)
MaximumLength = CUShort(Length + 2)
buffer = s
End Sub
Public Overrides Function ToString() As String
Return buffer
End Function
End Structure
None.
None.