4952 / 2416 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
1

Использование NetSessionDel

07.11.2014, 12:44. Показов 537. Ответов 1
Метки нет (Все метки)

Здравствуйте! Ребята помогите доделать код! Я сделал код, который выводит количество подключённых пользователей к моему компьютеру, а также список этих пользователей. Но не могу додумать как сделать очистку этих подключённых пользователей принудительно. Для этих целей я использую функцию NetSessionDel(). Но при использовании этой функции вылетает ошибка: Протекает наложенное событие ввода/вывода.

Код сам вот:
C++
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
//---------------------------------------------------------------------------
 
 
#include <vcl.h>
#include <assert.h>
#include <windows.h>
#include <lm.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma comment(lib, "Netapi32.lib")
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
   ListView1->Items->Clear();
 
   LPSESSION_INFO_10 pBuf = NULL;
   LPSESSION_INFO_10 pTmpBuf;
   DWORD dwLevel = 10;
   DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
   DWORD dwEntriesRead = 0;
   DWORD dwTotalEntries = 0;
   DWORD dwResumeHandle = 0;
   DWORD i;
   int dwTotalCount = 0;
   LPTSTR pszServerName = NULL;
   LPTSTR pszClientName = NULL;
   LPTSTR pszUserName = NULL;
   NET_API_STATUS nStatus;
 
 
 do // begin do
   {
      nStatus = NetSessionEnum(pszServerName,pszClientName,pszUserName,dwLevel,(LPBYTE*)&pBuf,dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
 
      //ShowMessage(pszServerName);
      if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
      {
         if ((pTmpBuf = pBuf) != NULL)
         {
            //
            // Loop through the entries.
            //
            for (i = 0; i < dwEntriesRead; i++)
            {
               assert(pTmpBuf != NULL);
 
               if (pTmpBuf == NULL)
               {
                  //fprintf(stderr, "An access violation has occurred\n");
                  ShowMessage("Нарушение прав доступа");
                  break;
               }
               //
               // Print the retrieved data.
               //
              ListView1->Items->Add();
              TListItem * Item = ListView1->Items->Item[ListView1->Items->Count-1];
              Item->Caption = pTmpBuf->sesi10_username;
              Item->SubItems->Add(pTmpBuf->sesi10_cname);
              //Item->SubItems->Add(pTmpBuf->sesi10_time);
 
              nStatus = NetSessionDel(pszServerName,pszClientName,pszUserName);
 
              if (nStatus == NERR_Success)
              {
                ShowMessage("Сеанс удален");
              }
              else
              {
               ShowMessage(SysErrorMessage(GetLastError()));
              }
              // ShowMessage(pTmpBuf->sesi10_username);
 
               /*wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi10_cname);
               wprintf(L"\tUser:   %s\n", pTmpBuf->sesi10_username);
               printf("\tActive: %d\n", pTmpBuf->sesi10_time);
               printf("\tIdle:   %d\n", pTmpBuf->sesi10_idle_time); */
 
 
 
               pTmpBuf++;
               dwTotalCount++;
            }
         }
      }
      //
      // Otherwise, indicate a system error.
      //
      else
          ShowMessage(SysErrorMessage(GetLastError()));
         //fprintf(stderr, "A system error has occurred: %d\n", nStatus);
      //
      // Free the allocated memory.
      //
      if (pBuf != NULL)
      {
         NetApiBufferFree(pBuf);
         pBuf = NULL;
      }
   }
   //
   // Continue to call NetSessionEnum while
   //  there are more entries.
   //
   while (nStatus == ERROR_MORE_DATA); // end do
 
   // Check again for an allocated buffer.
   //
   if (pBuf != NULL)
      NetApiBufferFree(pBuf);
      pBuf = NULL;
 
      Label1->Caption = "Общее количество подключившихся: "+ IntToStr(dwTotalCount);
   //ShowMessage("Общее количество подключившихся: " + IntToStr(dwTotalCount));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Label1->Caption = "Общее количество подключившихся: ";
ListView1->ViewStyle = vsReport;
 
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2014, 12:44
Ответы с готовыми решениями:

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между...

Создание и использование своих @NamedQueries. Использование EntityManager
Добрый день! Создавал классы сущностей и сессий через NetBeans генераторы кода. Использование...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении...

Использование строк.Использование структур
Задачка: Дана строка,состоящая из групп нулей и едениц. Найти и вывести на экран группы с нечетным...

1
4952 / 2416 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
20.11.2014, 19:20  [ТС] 2
Продолжая эту тему вот листинг программы вот ссылка http://msdn.microsoft.com/en-u... s.85).aspx.
Переделал под себя вот листинг мой
C++
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
#include <vcl.h>
 
#pragma hdrstop
#pragma argsused
#pragma comment(lib, "Netapi32.lib")
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
#include <lm.h>
int _tmain(int argc, _TCHAR* argv[])
{
   DWORD dwError = 0;
   LPTSTR pszServerName = NULL;
   LPTSTR pszClientName = NULL;
   LPTSTR pszUserName = NULL;
   NET_API_STATUS nStatus;
   //
   // Check command line arguments.
   //
   ShowMessage(IntToStr(argc));
   if (argc > 4)
   {
      ShowMessage("-------------------------------");
      //wprintf(L"Usage: %s [\\\\ServerName] [\\\\ClientName] [UserName]\n", argv[0]);
     // exit(1);
   }
 
   if (argc >= 2)
   {
      pszServerName = argv[1];
      ShowMessage(pszServerName);
    }
   if (argc >= 3)
   {
      pszClientName = argv[2];
      ShowMessage(pszClientName);
   }
   if (argc == 4)
   {
      pszUserName = argv[3];
      ShowMessage(pszUserName);
   }
   //
   // Call the NetSessionDel function to delete the session.
   //
   ShowMessage(IntToStr(argc));
   nStatus = NetSessionDel(pszServerName,pszClientName,pszUserName);
 
 
   //
   // Display the result of the call.
   //
   if (nStatus == NERR_Success)
   {
    ShowMessage(nStatus);
   }
      //fprintf(stderr, "The specified session(s) has been successfully deleted\n");
   else
    {
     ShowMessage(nStatus);
    }// fprintf(stderr, "A system error has occurred: %d\n", nStatus);
 
    return 0;
}
Первый ShowMessage(IntToStr(argc)) выводит мне 1, понятное дело что условие дальше выполнятся не будет. Вопрос почему параметр argc функции int _tmain возвращает 1?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2014, 19:20

Использование функций, использование break
Здравствуйте. Не знал как назвать тему, боялся что, если назову &quot;КАК ЭТО РАБОТАЕТ?&quot; то её удалят....

Использование конструкторов. Перегрузка конструкторов. Использование свойств
Помогите реализовать свойства, позволяющие осуществить проверку на допустимые значения для данных...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг...

Использование if else
Используя if..else, проанализировать и вывести на экран состояния флажков в своей форме анкеты


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.