Marshal.ptrtostringansi возвращает 1 символ
Я пытаюсь получить имя пользователя от sessionid.
Я скопировал vb.net подписи от pinvoke.net: WTSQuerySessionInformation (wtsapi32)[^] и pinvoke.net: WTSInfoClass (перечисления)[^]
Затем я использовал код C# для Как получить имя Пользователя по идентификатору сеанса со страницы WTSQuerySessionInformation в качестве ссылки, чтобы записать его в vb.net и придумали эту функцию:
Private Shared Function GetUserName(sessionID As Integer) Dim Buffer As IntPtr Dim Count As Integer Dim UserName As String WTSQuerySessionInformation(IntPtr.Zero, sessionID, WTS_INFO_CLASS.WTSUserName, Buffer, Count) UserName = Marshal.PtrToStringAnsi(Buffer) WTSFreeMemory(Buffer) Return UserName End Function
Когда я запускаю его с идентификатором сеанса -1, Я получаю только первую букву имени пользователя. Если я изменю эту строку с Имя Пользователя = Маршал.PtrToStringAnsi(Буфер) к Имя Пользователя = Маршал.PtrToStringAuto(Буфер) тогда это работает. Что дает и как это исправить, чтобы использовать Marshal.PtrToStringAnsi?
Что я уже пробовал:
Код C# из pinvoke.net: WTSQuerySessionInformation (wtsapi32)[^] работать отлично.