21. FAQ o Win API

Q> Кто по сети или локально шарится по моей(не моей)машине?
A> 
//------------------------------------------------------
// Who.exe (c) 1999 Serge Andyk  
// Usage "who [server]". Show all local and network users
// on specified server and some additional information.
// Freeware.You can use and modify this source code
// as you wish.
//-------------------------------------------------------

#include <windows.h>
#include <lm.h>
#include <stdio.h>
#pragma hdrstop

#pragma comment( lib, "netapi32.lib" )

#define MAXLEN 256

 SESSION_INFO_502 *buf, *cur;
 WKSTA_USER_INFO_1 *bufw, *curw;
 FILE_INFO_3 *buff,*curf;

 DWORD read, total, resumeh, rc, i;
//-----------------------------------------------------------
void PrintError( DWORD err )
{
 char msgbuf[4096];

 FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  msgbuf, sizeof( msgbuf ), NULL );
 printf( "Error %d: %s\n", err, msgbuf );
}
//-------------------------------------------------------

void PrintLocalUsers(LPWSTR server)
{
 resumeh = 0;
 do
 {
  bufw = NULL;

  rc = NetWkstaUserEnum(
   (LPTSTR)server,
   1,
   (LPBYTE*) &bufw,
   2048,
   &read,
   &total,
   &resumeh );

  if ( rc != ERROR_MORE_DATA && rc != ERROR_SUCCESS )
   break;

{
  for ( i = 0, curw = bufw; i < read; ++ i, ++ curw )
  {
   printf( "%-12S %-15S %-12S \n",
    curw->wkui1_username, curw->wkui1_logon_domain,
    curw->wkui1_logon_server
    );

  }
}
  if ( bufw != NULL )
  NetApiBufferFree( bufw );

 } while ( rc == ERROR_MORE_DATA );

 if ( rc != ERROR_SUCCESS )  PrintError( rc );
}
//-------------------------------------------------------
void PrintNetUsers(LPWSTR server)
{
 resumeh = 0;
 do
 {
  buf = NULL;

  rc = NetSessionEnum(
   (LPTSTR) server,
   NULL,
   NULL,
   502,
   (LPBYTE*)&buf,
   2048,
   &read,
   &total,
   &resumeh );

  if ( rc != ERROR_MORE_DATA && rc != ERROR_SUCCESS )
   break;
{
  for ( i = 0, cur = buf; i < read; ++ i, ++ cur )
  {
   printf( "%-12S %-12S %-27S %-22S\n",
    cur->sesi502_username, cur->sesi502_cname, cur->sesi502_transport,
    cur->sesi502_cltype_name
    );
  }
}

  if ( buf != NULL )
   NetApiBufferFree( buf );

 } while ( rc == ERROR_MORE_DATA );

 if ( rc != ERROR_SUCCESS )  PrintError( rc );
}
//-------------------------------------------------------
void PrintNetFiles(LPWSTR server)
{

 resumeh = 0;
 do
 {
  buff = NULL;

  rc=NetFileEnum(
   (char *) server,
   NULL,
   NULL,
   3,
      (BYTE**)&buff,
   2048,
   &read,
   &total,
   &resumeh );


  if ( rc != ERROR_MORE_DATA && rc != ERROR_SUCCESS )
   break;


  for ( i = 0, curf = buff; i < read; ++ i, ++ curf )
  {
   printf( "%-12S %-15S  \n",
    curf->fi3_username, curf->fi3_pathname
    );

  }
  if ( buff != NULL )
  NetApiBufferFree( buff );

 } while ( rc == ERROR_MORE_DATA );

  if ( rc != ERROR_SUCCESS ) PrintError( rc );

}
//-------------------------------------------------------
int main( int argc, char *argv[] )
{

 WCHAR server[MAXLEN];

 if ( argc == 1 )
 {
  wcscpy(server,L"");
 }
 else
 if ( argc == 2 )
 {
  mbstowcs( server, argv[1],MAXLEN);
 }
 else
        {
 printf("Usage - who [server]");
 exit(1);
 }

 printf("\nLocal users:\n");
 PrintLocalUsers(server);
 printf("\nNet users:\n");
 PrintNetUsers(server);
 printf("\nFiles(Pipes)\n");
 PrintNetFiles(server); 

 return 0;
}

2000(c)

Электронные Книги по компьютерным программам
На правах рекламы:
Регистрация. | Забыли пароль?
Логин
Пароль
Запомнить меня