Куда уходит память?! WTSQuerySessionInformation

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Куда уходит память?! WTSQuerySessionInformation

Сообщение sosed213 » 30.03.2015 (Пн) 13:15

Всем здравствуйте.

По совету уважаемого человека, создаю эту тему, хотя особого успеха не ожидаю.

Пишу маленькую утилиту (RDP Info) которая показывает информацию о подключенных пользователях и их сессиях.
Если кому интересно вот тут есть неплохой пример (в примере только для одного, текущего пользователя)

Проблема начинается когда в параметрах запроса указываю WTSInitialProgram. Получаю строку (путь к программе) которая стартует при входе пользователя, (на примере 1С терминального сервера это может быть c:\1C.bat)

Собственно проблема в том что опрос ведется по таймеру, и с каждым разом программа в оперативке занимает все больше и больше памяти. Это только на параметре WTSInitialProgram!


Вот фрагмент кода в котором у меня проблема:

Код: Выделить всё
Public Function GetSessionInformation(ByRef nSessionID As Long)
    Dim RetVal As Long
    Dim lpbuffer As Long
    Dim Count As Long

    RetVal = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, nSessionID, WTSInitialProgram, lpbuffer, Count)
    If RetVal Then
        GetSessionInformation = GetStringFromLP(lpbuffer)
        WTSFreeMemory lpbuffer
    End If

End Function


Private Function GetStringFromLP(ByVal StrPtr As Long) As String
   Dim b As Byte
   Dim tempStr As String
   Dim bufferStr As String
   Dim Done As Boolean

   Done = False
   Do
      ' Get the byte/character that StrPtr is pointing to.
      CopyMemory b, ByVal StrPtr, 1
      If b = 0 Then  ' If you've found a null character, then you're done.
         Done = True
      Else
         tempStr = Chr$(b)  ' Get the character for the byte's value
         bufferStr = bufferStr & tempStr 'Add it to the string
               
         StrPtr = StrPtr + 1  ' Increment the pointer to next byte/char
      End If
   Loop Until Done
   GetStringFromLP = bufferStr
End Function


Мой поиск пока не дал результатов.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Куда уходит память?! WTSQuerySessionInformation

Сообщение Jack Ferre » 30.03.2015 (Пн) 20:33

Как объявлена WTSFreeMemory?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Куда уходит память?! WTSQuerySessionInformation

Сообщение iGrok » 31.03.2015 (Вт) 2:44

http://support.microsoft.com/en-us/kb/970910
Не оно?

Ну и вообще там достаточно много аналогичных проблем вылезает:
https://www.google.ru/search?q=wtsiniti ... emory+leak
label:
cli
jmp label

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Куда уходит память?! WTSQuerySessionInformation

Сообщение sosed213 » 31.03.2015 (Вт) 5:42

Jack Ferre
Код: Выделить всё
Private Declare Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Long)



iGrok
Спасибо, я думаю что это как раз оно. т.к. на терминальном сервере SP2. Значит нужно обновляться до SP3.


Мой вопрос исчерпан.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 33

    TopList