wtsapi32.dll を使用しています。(ウィンドウ ターミナル サービス API)
メソッド WTSQueryUserConfig からユーザー情報を取得しようとしています。
[DllImport("wtsapi32.dll", CharSet = CharSet.Ansi, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool WTSQueryUserConfig(
[MarshalAs(UnmanagedType.LPStr)] string pServerName,
[MarshalAs(UnmanagedType.LPStr)] string pUserName,
WTS_CONFIG_CLASS wtsConfigClass,
out StringBuilder pBuffer,
out int dataLength);
日本語 (Unicode) の SAM-Account-Name を持つユーザーに問題があります。
クラスを(ユニコードバージョン)で変更しました:
[DllImport("wtsapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool WTSQueryUserConfigW(
[MarshalAs(UnmanagedType.LPStr)] string pServerName,
[MarshalAs(UnmanagedType.LPStr)] string pUserName,
WTS_CONFIG_CLASS wtsConfigClass,
out StringBuilder pBuffer,
out int dataLength);
しかし、このメソッドを日本語の SAM-Account-Name で呼び出しても機能しません。
Unicode 文字を持たないユーザーは、非 Unicode バージョンの方法で問題なく動作します。