1

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 バージョンの方法で問題なく動作します。

4

1 に答える 1