開梱_WTS_CLIENT_ADDRESS.住所vb.net (取得IPアドレスからターミナルサービスをクライアント)
-
08-07-2019 - |
質問
私は以下のような構造をとります:
<StructLayout(LayoutKind.Sequential)> _
Public Structure _WTS_CLIENT_ADDRESS
Public AddressFamily As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=20)> _
Public Address() As Byte
End Structure
る人口は、以下の呼び出し:
Dim _ClientIPAddress As New _WTS_CLIENT_ADDRESS
Dim rtnPtr As IntPtr
Dim rtncount As Int32
NativeMethods.WTSQuerySessionInformation(CInt(NativeMethods.WTS_CURRENT_SERVER_HANDLE), NativeMethods.WTS_CURRENT_SESSION, NativeMethods.WTS_INFO_CLASS.WTSClientAddress, rtnPtr, rtncount)
'_ClientIPAddress()
_ClientIPAddress = _
CType(System.Runtime.InteropServices.Marshal.PtrToStructure(rtnPtr, GetType(_WTS_CLIENT_ADDRESS)), _WTS_CLIENT_ADDRESS)
のアドレスバイト配列は、人口がわからないどのように変換する有効な文字列または整数値です。のMDSN文書は疎: http://msdn.microsoft.com/en-us/library/aa383857(VS.85).aspx
解決
だほとんどが自のコードです。そうだね、MSDNはなかなか明確などの内部をバイト配列が、こちらのよくお使いいただくために:
IPAddress address = new IPAddress(_ClientIPAddress.Address.Skip(2).Take(4).ToArray());
最初の二つのバイトがないと思われるものの場合はAF_INET(IPv4または2)オペレーションのバイトのIPv4アドレス、クライアントの
まもっていただきたいと、コードの取り扱IPv6(AF_INET6)が正常に扱うことAF_INET6である。かを読み込む必要があり16バイトの代わりに、4このプロトコルです。
所属していません StackOverflow