Запрос с wtsapi32.dll не работает с SAM-Account-Name для японских пользователей

Я работаю с 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);

У меня проблема с пользователем с SAM-Account-Name на японском языке (Unicode).

Я изменил свой класс с (версия Unicode):

[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, он не работает.

Пользователи без символов юникода прекрасно работают с не-юникодной версией метода.

1 ответ

Наконец, я использовал конфигурацию charset только для входных параметров

[DllImport("wtsapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool WTSQueryUserConfigW(
                                    string pServerName,
                                    string pUserName,
                                    WindowsTerminalServiceConfig wtsConfigClass,
                                    out StringBuilder pBuffer,
                                    out int dataLength);
Другие вопросы по тегам