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


Сказали спасибо: +5/-1
Offline

Сообщений: 94


Подключенные компьютеры
« : 19 Декабрь 2012, 09:24:47 »

Здравствуйте.
Собственно интересует такая вот вещь. Возможно ли программно узнать кто к тебе подключен. Т.е. есть папка расшаренная на компе и мне хотелось бы узнать кто подключен к ней. Ну и в идеале какой файл открыли или записали.
Можно проделать это программно? в какую сторону копать? может есть пример?
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Подключенные компьютеры
« Ответ #1 : 19 Декабрь 2012, 09:28:04 »

Средствами винды это можно узнать через Панель управления->Администрирование->Управление компьютером->Общие папки->Сеансы.
Покопай это. Может где инфа есть как повторить этот пусть самому.
Записан
Alex87
Участник


Сказали спасибо: +5/-1
Offline

Сообщений: 94


Re: Подключенные компьютеры
« Ответ #2 : 19 Декабрь 2012, 11:08:07 »

ок. Если что найду отпишусь.
Записан
serg76
Участник


Сказали спасибо: +38/-2
Offline

Сообщений: 575


Re: Подключенные компьютеры
« Ответ #3 : 19 Декабрь 2012, 11:55:53 »

ReadDirectoryChangesW
NetSessionEnum
Записан
Alex87
Участник


Сказали спасибо: +5/-1
Offline

Сообщений: 94


Re: Подключенные компьютеры
« Ответ #4 : 27 Декабрь 2012, 11:21:16 »

Код
int _tmain(int argc, _TCHAR* argv[])
{
  LPSESSION_INFO_502 pBuf = NULL;
  LPSESSION_INFO_502 pTmpBuf;
  DWORD dwLevel = 502;
  DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
  DWORD dwEntriesRead = 0;
  DWORD dwTotalEntries = 0;
  DWORD dwResumeHandle = 0;
  DWORD i;
  DWORD dwTotalCount = 0;
  LPTSTR pszServerName = NULL;
  LPTSTR pszClientName = NULL;
  LPTSTR pszUserName = NULL;
  NET_API_STATUS nStatus;
  //
  // Check command line arguments.
  //
 
  //
  // Call the NetSessionEnum function, specifying level 10.
  //
 
  AnsiString q1 =  TimeToStr(Time());
  do // begin do
  {
 printf("\tNow Time: %s\n", q1);
 nStatus = NetSessionEnum(NULL,
  NULL,
  NULL,
  dwLevel,
  (LPBYTE*)&pBuf,
  dwPrefMaxLen,
  &dwEntriesRead,
  &dwTotalEntries,
  &dwResumeHandle);
 
 
 
 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");
 break;
  }
  //
  // Print the retrieved data.
  //
  wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi502_cname);
  wprintf(L"\n\tUser: %s\n", pTmpBuf->sesi502_username);
  wprintf(L"\n\tTransport: %s\n", pTmpBuf->sesi502_transport);
  printf("\tidle-Time:   %d\n", pTmpBuf->sesi502_idle_time);
  wprintf(L"\n\tCltype name: %s\n", pTmpBuf->sesi502_cltype_name);
 
  pTmpBuf++;
              dwTotalCount++;
           }
BYTE outBuffer[5120];
VOID *pBuf1 = (BYTE*)&outBuffer;
FILE_NOTIFY_INFORMATION InfoNotify1;
DWORD InfoNotify;
BOOL ResultReadChange;
DWORD outSize = sizeof(outBuffer);
HANDLE hDir = CreateFile("D:\\Post\\",
 FILE_LIST_DIRECTORY,
 FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
 NULL,
 OPEN_EXISTING,
 FILE_FLAG_BACKUP_SEMANTICS,
 NULL);
ResultReadChange = ReadDirectoryChangesW(hDir,
&outBuffer,
outSize,
TRUE,
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&InfoNotify,
NULL,
NULL);
if ( ResultReadChange )
 { FILE_NOTIFY_INFORMATION* pInfo = (FILE_NOTIFY_INFORMATION*) pBuf1;
 if (pInfo->Action == FILE_ACTION_ADDED ||
 pInfo->Action == FILE_ACTION_REMOVED ||
 pInfo->Action == FILE_ACTION_MODIFIED ||
 (pInfo->Action == FILE_ACTION_RENAMED_OLD_NAME &&
 pInfo->Action == FILE_ACTION_RENAMED_NEW_NAME))
 {
 
char lpFileName[MAX_PATH];
WideCharToMultiByte(CP_ACP,
0,
pInfo->FileName,
pInfo->FileNameLength/2,
lpFileName,
MAX_PATH,
0,
0);
lpFileName[pInfo->FileNameLength/2] = 0;
pInfo += pInfo->NextEntryOffset;
q1 = TimeToStr(Time());
printf("\t open time: %s\n",q1);
printf("\t open: %s \n",lpFileName);
 
}
     }
 
 }
 }
 //ReadDirectoryChangesW
 //
 // If the call succeeds,
 //
 
 
 
     else
        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);
  //
  // Print the final count of sessions enumerated.
  //
  fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount);
  system("pause");
 
return 0;
}
 
за основу взяты примеры выше ссылки. Просто соединил.
но хотелось еще большего. А точнее кто именно записывает файл, если подключений больше чем 1. Может я не увидел чего..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

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