Ivan Rodriguez
Ivan Rodriguez

Reputation: 436

Query with wtsapi32.dll doesn`t work with SAM-Account-Name for japanese users

I am working with wtsapi32.dll. (Window Terminal Service api)

I am trying to get user info from method 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);

I have problem with user with SAM-Account-Name in japanese (unicode).

I have modified my class with (unicode version):

[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);

But I call this method with japanese SAM-Account-Name it does not work.

Users without unicode characters works fine with non-unicode version method.

Upvotes: 1

Views: 295

Answers (1)

Ivan Rodriguez
Ivan Rodriguez

Reputation: 436

Finally I only used the charset configuration for the input parameters

[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);

Upvotes: 1

Related Questions