Я использую WTSEnumerateSessions
API для получения пользовательских сессий по RDP.
Я беру ссылку на this и код выглядит следующим образом:
IntPtr ppSessionInfo = IntPtr.Zero;
Int32 pCount = 0;
Int32 retval = WTSEnumerateSessions(server, 0, 1, ref ppSessionInfo, ref pCount);
Log.Write(pCount.ToString());
Int32 dataSize = Marshal.SizeOf(typeof(WTS_SESSION_INFO));
Int64 current = (int)ppSessionInfo;
if (retval != 0)
{
for (int i = 0; i < pCount; i++)
{
WTS_SESSION_INFO si = (WTS_SESSION_INFO)Marshal.PtrToStructure((System.IntPtr)current, typeof(WTS_SESSION_INFO));
current += dataSize;
ret.Add(si.SessionID + " " + si.State + " " + si.pWinStationName);
}
WTSFreeMemory(ppSessionInfo);
}
В большинстве случаев работает нормально, но на конкретной машине логика не работает, потому чтоон получает pCount
0. Вот мой вопрос: в каких сценариях WTSEnumerateSessions
устанавливает pCount
в 0?
Примечание: этот код работает на пользователя системы, и во время работы машина может быть заблокирована, отключена или зарегистрированаoff.
Я явно добавил журналы, чтобы получить значение count, и это было 0.