Здравствуйте! Ребята помогите доделать код! Я сделал код, который выводит количество подключённых пользователей к моему компьютеру, а также список этих пользователей. Но не могу додумать как сделать очистку этих подключённых пользователей принудительно. Для этих целей я использую функцию 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;
}
//---------------------------------------------------------------------------