powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вход и выход из системы удаленной машины.
1 сообщений из 1, страница 1 из 1
Вход и выход из системы удаленной машины.
    #38781251
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер, коллеги!

Помогите куда копать дальше.
Необходимо из машины в локальной сети извлечь информацию о входе и выходе из системы пользователя.
Для этого использую Win32_LogonSession.
Не устраивает то, что этот класс хранит данные только во время работы, после выключения он стирается.
Может есть какие-то журналы в системе по истории входа и выхода?
Или более информативные классы.
Гугление не помогает.

Кусок программы С++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
    hres = pLoc->ConnectServer(
        _bstr_t(L"\\\\178.207.130.146\\root\\cimv2"),
        NULL,                              // User name
        NULL,                              // User password
        NULL,                              // Locale             
        NULL,                              // Security flags
        NULL,                              // Authority        
        NULL,                              // Context object 
        &pSvc                              // IWbemServices proxy
        );
    
    if (FAILED(hres))
    {
        cout << "Could not connect. Error code = 0x" << hex << hres << endl;
        pLoc->Release();     
        CoUninitialize();
        return 1;                // Program has failed.
    }
    
    // Step 6: --------------------------------------------------
    // Set security levels on a WMI connection ------------------

    hres = CoSetProxyBlanket(
       pSvc,                           // Indicates the proxy to set
       RPC_C_AUTHN_DEFAULT,            // RPC_C_AUTHN_xxx
       RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
       COLE_DEFAULT_PRINCIPAL,         // Server principal name 
       RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // RPC_C_AUTHN_LEVEL_xxx 
       RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
       NULL,                           // client identity
       EOAC_NONE                       // proxy capabilities 
    );

    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket. Error code = 0x" << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // Step 7: --------------------------------------------------
    // Use the IWbemServices pointer to make requests of WMI ----
    IEnumWbemClassObject* pEnumerator = NULL;
    IWbemClassObject *pclsObj = NULL;
    ULONG uReturn = 0;


    // Cleanup
    //pEnumerator->Release();


	//++++++++++++++++++++++++++++++++++++++++
	cout << "++++++++++++++++++++++++++++++++" << endl;

    hres = pSvc->ExecQuery(
        bstr_t("WQL"), 
		bstr_t("SELECT * from Win32_LogonSession"),
        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
        NULL,
        &pEnumerator);
    
    if (FAILED(hres))
    {
        cout << "Query for operating system name failed." << " Error code = 0x" << hex << hres << endl;
        pSvc->Release();
        pLoc->Release();
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // Step 8: -------------------------------------------------
    // Secure the enumerator proxy
    hres = CoSetProxyBlanket(
        pEnumerator,                    // Indicates the proxy to set
        RPC_C_AUTHN_DEFAULT,            // RPC_C_AUTHN_xxx
        RPC_C_AUTHZ_DEFAULT,            // RPC_C_AUTHZ_xxx
        COLE_DEFAULT_PRINCIPAL,         // Server principal name 
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // RPC_C_AUTHN_LEVEL_xxx 
        RPC_C_IMP_LEVEL_IMPERSONATE,    // RPC_C_IMP_LEVEL_xxx
        NULL,                           // client identity
        EOAC_NONE                       // proxy capabilities 
        );

    if (FAILED(hres))
    {
        cout << "Could not set proxy blanket on enumerator. Error code = 0x" << hex << hres << endl;
        pEnumerator->Release();
        pSvc->Release();
        pLoc->Release();     
        CoUninitialize();
        return 1;               // Program has failed.
    }

    // Step 9: -------------------------------------------------
    // Get the data from the query in step 7 -------------------
	
    pclsObj = NULL;
    uReturn = 0;

	//pEnumerator->;

    while (pEnumerator)
    {
        HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);

        if(0 == uReturn)
        {
            break;
        }


		/*
		[Provider("CIMWin32")]class Win32_LogonSession : Win32_Session
		{
		  string   AuthenticationPackage;
		  string   Caption;
		  string   Description;
		  datetime InstallDate;
		  string   LogonId;
		  uint32   LogonType;
		  string   Name;
		  datetime StartTime;
		  string   Status;
		};
		*/

        VARIANT vtProp1;
		VARIANT vtProp2;
		VARIANT vtProp3;
		VARIANT vtProp4;
		VARIANT vtProp5;
		VARIANT vtProp6;
		VARIANT vtProp7;
		VARIANT vtProp8;
		VARIANT vtProp9;

		wcout << " ####################### " << endl;
		wcout << " ####################### " << endl;

		hr = pclsObj->Get(L"AuthenticationPackage", 0, &vtProp1, 0, 0);
		wcout << " AuthenticationPackage: " << vtProp1.bstrVal << endl;
		VariantClear(&vtProp1);

		hr = pclsObj->Get(L"Caption", 0, &vtProp2, 0, 0);
		wcout << " Caption: " << vtProp2.cVal << endl;
		VariantClear(&vtProp2);

		hr = pclsObj->Get(L"Description", 0, &vtProp3, 0, 0);
		wcout << " Description: " << vtProp3.cVal << endl;
		VariantClear(&vtProp3);

		hr = pclsObj->Get(L"InstallDate", 0, &vtProp4, 0, 0);
		wcout << " InstallDate: " << vtProp4.uintVal << endl;
		VariantClear(&vtProp4);

		hr = pclsObj->Get(L"LogonId", 0, &vtProp5, 0, 0);
		wcout << " LogonId: " << vtProp5.uintVal << endl;
		VariantClear(&vtProp5);

		hr = pclsObj->Get(L"LogonType", 0, &vtProp6, 0, 0);
		wcout << " LogonType: " << vtProp6.iVal << endl;
		VariantClear(&vtProp6);

		hr = pclsObj->Get(L"Name", 0, &vtProp7, 0, 0);
		wcout << " Name: " << vtProp7.cVal << endl;
		VariantClear(&vtProp7);

		hr = pclsObj->Get(L"StartTime", 0, &vtProp8, 0, 0);
		wcout << " StartTime: " << _wtoi64(vtProp8.bstrVal) << endl;
		VariantClear(&vtProp8);

		hr = pclsObj->Get(L"Status", 0, &vtProp9, 0, 0);
		wcout << " Status: " << vtProp9.iVal << endl;
		VariantClear(&vtProp9);
		
        pclsObj->Release();
        pclsObj = NULL;
    }



    if( pclsObj )
    {
        pclsObj->Release();
    }


	
    // Cleanup
    pEnumerator->Release();



Вывод:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
++++++++++++++++++++++++++++++++
 #######################
 #######################
 AuthenticationPackage: NTLM
 Caption: &#9568;
 Description: &#9568;
 InstallDate: 3435973836
 LogonId: 1528868
 LogonType: 0
 Name: &#9568;
 StartTime: 20141019160054
 Status: -13108
 #######################
 #######################
 AuthenticationPackage: Negotiate
 Caption: &#9568;
 Description: &#9568;
 InstallDate: 3435973836
 LogonId: 1528868
 LogonType: 5
 Name: &#9568;
 StartTime: 20141019160054
 Status: -13108
 #######################
 #######################
 AuthenticationPackage: Negotiate
 Caption: &#9568;
 Description: &#9568;
 InstallDate: 3435973836
 LogonId: 1528868
 LogonType: 5
 Name: &#9568;
 StartTime: 20141019160054
 Status: -13108
 #######################
 #######################
 AuthenticationPackage: NTLM
 Caption: &#9568;
 Description: &#9568;
 InstallDate: 3435973836
 LogonId: 1528868
 LogonType: 2
 Name: &#9568;
 StartTime: 20141019160055
 Status: -13108
 #######################
 #######################
 AuthenticationPackage: NTLM
 Caption: &#9568;
 Description: &#9568;
 InstallDate: 3435973836
 LogonId: 1535524
 LogonType: 3
 Name: &#9568;
 StartTime: 20141019160202
 Status: -13108

...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вход и выход из системы удаленной машины.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]