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 的用户有疑问。

我用(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 调用这个方法它不起作用。

没有 unicode 字符的用户可以使用非 unicode 版本方法正常工作。

4

1 回答 1

1

最后我只对输入参数使用了字符集配置

[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);
于 2018-02-21T17:13:30.993 回答