Q> Кто по сети или
локально шарится по моей(не моей)машине?
A>
//------------------------------------------------------
// Who.exe (c) 1999 Serge Andyk asvzzz@chat.ru
// 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;
}