Форум » [x]Harbour » Идентификатор сессии » Ответить

Идентификатор сессии

fil: Приветствую ! Как можно узнать идентификатор текущей RDP-сессии ?

Ответов - 37, стр: 1 2 All

Andrey: Andrey пишет: Да, сделал пока так. Работает однако ! НЕ РАБОТАЕТ !!! Если запускать под учёткой пользователя - то НЕ работает ! Если запускать под учёткой администратора, то работает. Блин, опять засада.

Dima: Andrey пишет: Если запускать под учёткой пользователя - то НЕ работает ! ну так зашей L/P админа там где подключение идет в ConnectServer можно зашифровать и в какой то базе держать https://docs.microsoft.com/en-us/windows/win32/wmisdk/swbemlocator-connectserver Можно попробовать поиграть с привилегиями http://scriptcoding.ru/2013/04/12/swbemsecurity/

Andrey: Dima пишет: ну так зашей L/P админа там где подключение идет в ConnectServer В твоём примере нет ConnectServer ! Как это можно добавить ?


Dima: Andrey пишет: В твоём примере нет ConnectServer ! Dima пишет: oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2") а это что ? может пример не тот смотришь ?

Andrey: Dima пишет: а это что ? Где логин и пароль добавить ?

Dima: Andrey пишет: Где логин и пароль добавить ? Ты трезвый вообще ? oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2",логинТУТ,пассТУТ) ведь ссылку на доку же дал

Andrey: Dima пишет: ведь ссылку на доку же дал [pre2]objwbemServices = .ConnectServer( _ [ ByVal strServer ], _ [ ByVal strNamespace ], _ [ ByVal strUser ], _ [ ByVal strPassword ], _ [ ByVal strLocale ], _ [ ByVal strAuthority ], _ [ ByVal iSecurityFlags ], _ [ ByVal objwbemNamedValueSet ] _ )[/pre2] Смутил параметр [ ByVal strNamespace ] Спасибо ! Буду пробовать.

Dima: Andrey пишет: Смутил параметр [ ByVal strNamespace ] strNamespace – задаем пространство имен (например, root\CIMV2), если оно отсутствует, то будет взято пространство по умолчанию (оно прописано в реестре в ветке HKLM\SOFTWARE\Microsoft \WBEM\Scripting\ Default Namespace)

Andrey: Dima пишет: oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2",логинТУТ,пассТУТ) Если логин и пароль неправильны, то прога вылетает с ошибкой. [pre2]Error BASE/1004 Метод не экспортирован: SECURITY_ Args: [1] = U --------------------------------- Stack Trace --------------------------------- Called from SECURITY_(0) Called from WMILOGONSESSION(114) in module: hmgLogonSession.prg Called from MAIN(45) in module: hmgLogonSession.prg [/pre2] Как узнать что логин и пароль подошли на этом сервере ? Если админ поменяет пароль, то прога будет просто вылетать. С админом всегда трудно договориться. Они частенько меняются на фирме.

Dima: Andrey пишет: Как узнать что логин и пароль подошли на этом сервере ? я думаю что примерно так [pre2] BEGIN SEQUENCE WITH {| oErr | Break( oErr ) } oLocator:= win_oleCreateObject( "wbemScripting.SwbemLocator" ) oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2", Login , pass) if !hb_isobject(oWMI) ? "Что то пошло не так :)" ? hb_valtoexp(oWmi) Owmi:=NIL endif Recover // тут тоже можно что то чекануть END SEQUENCE [/pre2]

Andrey: Вообщё хрень получается. Сегодня пример перестал работать. Вот пример - [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo 28-01-2022 * * Copyright 2022 Dima - http://clipper.borda.ru/?32-dima * * Сколько клиентов подключилось к серверу (RDP-сессии) или список логинов RDP-сессий ? * How many clients connected to the server (RDP sessions) or a list of RDP session logins? */ #define _HMG_OUTLOG #include "hmg.ch" REQUEST HB_CODEPAGE_RU1251 ANNOUNCE RDDSYS ///////////////////////////////////////////////////////////////////// PROCEDURE MAIN LOCAL oWMI, objWMI, oTerminal, objItem, Ocosver, elem, cLog SET EPOCH TO ( Year(Date()) - 50 ) SET LANGUAGE TO RUSSIAN SET CODEPAGE TO RUSSIAN SET Date TO GERMAN cLog := ChangeFileExt( Application.ExeName, ".log" ) DELETEFILE(cLog) SET LOGFILE TO &cLog // set filename for debug output to file SET WINDOW MAIN OFF ? REPL("= ",20) + "program Start " + HB_TSTOSTR( hb_DateTime() ) + REPL(" =",20) ? "win_OsIsTSClient()", win_OsIsTSClient() objWMI := WmiService() objWMI:Security_:ImpersonationLevel := 3 objWMI:Security_:AuthenticationLevel := 6 Ocosver:= objWMI:InstancesOf ("Win32_OperatingSystem") for each elem in Ocosver ? elem:name next oTerminal := objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10" ) ? "Number of terminal sessions:",oTerminal:count FOR EACH objItem IN oTerminal ? "objItem:LogonId", objItem:LogonId ? "objItem:StartTime", objItem:StartTime ? objItem:Name // objItem:Name и остальные фишки почему то возвращают NIL next oTerminal := objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10" ) FOR EACH objItem IN oTerminal id := objItem:LogonId userlist := objWMI:ExecQuery("ASSOCIATORS OF {Win32_LogonSession.LogonId="+id+"} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent") ? id For each elem in userlist ? elem:name, elem:Status Next NEXT ? "." ; ? "=== End ===" ShellExecute( 0, "Open", cLog,,, 1 ) RETURN ///////////////////////////////////////////////////////////////////// FUNCTION WMIService( cComp ) Local oWmi ,oLocator hb_default(@cComp,'.') BEGIN SEQUENCE WITH {| oErr | Break( oErr ) } oLocator:= win_oleCreateObject( "wbemScripting.SwbemLocator" ) oWMI := oLocator:ConnectServer(cComp,"ROOT\CIMV2") End SEQUENCE RETURN oWmi [/pre2] Взял твой пример и сделал минимум переделок. Что опять недосмотрел ?

Dima: Andrey пишет: Взял твой пример и сделал минимум переделок Лучше оставь свой пример который работал и сделай в нём тот же минимум переделок. А если чего и забыл то может L/P указать при подключении к серваку в строке oWMI := oLocator:ConnectServer(cComp,"ROOT\CIMV2")

Andrey: Dima пишет: Лучше оставь свой пример который работал и сделай в нём тот же минимум переделок. Тот тоже не работает....

Dima: Может админ увидел твои движняки и кислород перекрыл в виде отключения WMI сервиса :)

Dima: Глянь что возвращает oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2") Если это не объект то печалька и видать админчег что то подкрутил......

Andrey: Это просто цирк а не WMI. Как нет пользователей, то пример работает. Как пользователей больше 2 то пример не работает - возвращает 0 !

Dima: Да уж......



полная версия страницы