wtsapi32.dll: WTSEnumerateSessions API периодически устанавливает значение pCount равным 0 - PullRequest
0 голосов
/ 12 декабря 2018

Я использую 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...