C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование NetSessionDel  (Прочитано 919 раз)
Sasha
Участник


Сказали спасибо: +13/-0
Offline

Сообщений: 413


Использование NetSessionDel
« : 08 Ноябрь 2014, 20:42:56 »

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

 Код сам вот:

Код
//---------------------------------------------------------------------------
 
 
#include
#include
#include
#include
#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;
 
}
//---------------------------------------------------------------------------
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.095 секунд. Запросов: 19.