И, по ходу дела, еще один вопрос:
Функция ПолучитьСостояниеСессии () // текущей сессии терминального сервера
lRet = Запросить ( 8 ); // WTSConnectState
Если lRet <> 0 Тогда
Session_Connection_State = DX.NumGet ( pBuffer, 0, "l" ); // Pointer to an INT variable that contains a value from the WTS_CONNECTSTATE_CLASS enumeration type to indicate the session's current connection state.
DX.WTSFreeMemory ( ppBuffer );
Иначе
Session_Connection_State = -1;
КонецЕсли;
Возврат Session_Connection_State;
КонецФункции
Во всех примерах, что я нашел в интернете, так и делается: DX.WTSFreeMemory ( ppBuffer )
Но мне кажется, что должно быть: DX.WTSFreeMemory ( pBuffer )
Документация MSDN (
http://msdn.microsoft.com/en-us/library/aa383834%28VS.85%29.aspx ) говорит:
Цитата: void WTSFreeMemory(
__in PVOID pMemory
);
pMemory [in]
Pointer to the memory to free.
Но ppBuffer - указатель на область памяти, в которую функция WTSQuerySessionInformationA возвращает указатель на выделенную функцией память (т.е. указатель на указатель), в к-й находится результат запроса (
http://msdn.microsoft.com/en-us/library/aa383838%28VS.85%29.aspx ):
Цитата: ppBuffer [out]
A pointer to a variable that receives a pointer to the requested information. The format and contents of the data depend on the information class specified in the WTSInfoClass parameter. To free the returned buffer, call the WTSFreeMemory function.
Все вроде бы работает, но почему так?