У меня есть следующий код для получения имени пользователя, связанного с идентификатором сеанса:
ppBuffer = ctypes.c_wchar_p()
pBytesReturned = ctypes.c_ulong()
ctypes.windll.wtsapi32.WTSQuerySessionInformationW(0, SessionId, 5, ctypes.byref(ppBuffer), ctypes.byref(pBytesReturned))
logging.info(f'Username: {ppBuffer.value}')
У меня возникают проблемы с попыткой перечислить через "WTSEnumerateSessionsW", чтобы получить массив идентификаторов сеанса и состояния
Я дошел до:
class WTS_SESSION_INFOW(ctypes.Structure):
_fields_ = [("SessionId", ctypes.c_ulong),
("pWinStationName", ctypes.c_wchar_p),
("State", ctypes.c_int)]
ppSessionInfo = WTS_SESSION_INFOW()
pCount = ctypes.c_ulong()
ctypes.windll.wtsapi32.WTSEnumerateSessionsW(0, 0, 1, ctypes.byref(ppSessionInfo), ctypes.byref(pCount))
pCount.value возвращает правильное количество запущенных экземпляров, однако ppSessionInfo.SessionId возвращает одно большое целое число, которое не соответствует ни одному текущему идентификатору сеанса.
В документации MS говорится, что ppSessionInfo должен быть массивом структур WTS_SESSION_INFOW, однако я не уверен, как это сделать sh это?
Я могу выполнить sh вышеуказанное, используя win32ts .WTSEnumerateSessions () и win32ts.WTSQuerySessionInformation (), однако я ограничен тем, какой импорт мне доступен.
Любая помощь будет принята с благодарностью.