Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

подключение по локалке   Найти похожие ветки 

 
Mischka   (2002-10-31 10:35) [0]

Мастера! Вопрос на три копейки: как определить (программно), с каких адресов к моей машине сейчас подключены юзверы и кто? Т.е. определить текущие сессии, к каким ресурсам идет подключение...


 
ALexe   (2002-10-31 10:48) [1]

не тестировал =о) "кто висит на моей (или не моей) машине"

#define STRICT
#include
#include
#include
#include

void UserEnum()
{
BOOL keepGoing = TRUE ;
DWORD entriesRead, totalEntries ;
USER_INFO_2 * pInfo = NULL ;
DWORD resumeHandle = 0 ; // must be 0 to start with
char nameBuf[ UNLEN + 1 ] ; // constants defined in LMCONS.H
char commentBuf[ MAXCOMMENTSZ + 1 ] ;
WCHAR serverName[ 100 ] ;
lstrcpyW( serverName, L"\\\\PDC" ) ; //L"" ) ;
while ( keepGoing )
{
NET_API_STATUS ret = NetUserEnum(
serverName, //NULL,
2,
0, //FILTER_NORMAL_ACCOUNT,
(LPBYTE *)&pInfo, // Important: ADDRESS of POINTER
sizeof( USER_INFO_2 ) * 100, // requested buffer size; it may not
actually allocate this much
&entriesRead,
&totalEntries,
&resumeHandle ) ;

keepGoing = ( ret == ERROR_MORE_DATA ) ;

if ( ret == 0 || ret == ERROR_MORE_DATA )
{
DWORD i ;
for ( i = 0 ; i < entriesRead ; i++ )
{
// Note that strings in the INFO structures
// will ALWAYS be Unicode, regardless of
// your settings! Even though they"re declared
// as LPTSTR, they"re always LPWSTR.
// I"m compiling for non-Unicode, so I
// convert them to ANSI strings...
// Check for NULL pointers in the INFO structure
LPWSTR pName = (LPWSTR)pInfo[ i ].usri2_name ;
LPWSTR pComm = (LPWSTR)pInfo[ i ].usri2_comment ;
if ( pName == NULL )
{
lstrcpy( nameBuf, "(no name!)" ) ;
}
else if ( lstrlenW( pName ) == 0 )
{
lstrcpy( nameBuf, "(empty name!)" ) ;
}
else
{
WideCharToMultiByte( CP_ACP, 0,
pName, -1,
nameBuf, UNLEN,
NULL, NULL ) ;
}
if ( pComm == NULL )
{
lstrcpy( commentBuf, "(no comment!)" ) ;
}
else if ( lstrlenW( pComm ) == 0 )
{
lstrcpy( commentBuf, "(empty comment!)" ) ;
}
else
{
WideCharToMultiByte( CP_ACP, 0,
pComm, -1,
commentBuf, MAXCOMMENTSZ,
NULL, NULL ) ;
}
cout << nameBuf << ": " << commentBuf << endl ;
}
}
else
{
cout << "NetUserEnum error " << ret << endl ;
}

if ( pInfo )
{
NetApiBufferFree( pInfo ) ;
pInfo = NULL ;
}
}
}
//****************************************************************************/
/


 
Mischka   (2002-10-31 10:59) [2]

А на дельфе то же самое нельзя ли сделать? У меня вечные проблемы с переводом :( Или обязательно нужно импортировать функции из netapi32.dll?


 
ALexe   (2002-10-31 13:47) [3]

не могу - у меня просто кусок этот был - на Си я не пишу, к сожалению .. =о))


 
rastochnik   (2002-10-31 15:43) [4]

http://www.delphi.xonix.ru/subscribe/?id=1

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netuserenum.asp


 
Mischka   (2002-11-01 14:23) [5]

Я уже нарыл точно такой же код на Delphi. Что-то там исправить надо было по мелочи и добавить. А так, у меня работает прекрасно. Но все равно спасибо.


type
{$EXTERNALSYM NET_API_STATUS}
NET_API_STATUS = DWORD;

function NetSessionEnum (servername: LPWSTR; UncClientName: LPWSTR;
username: LPWSTR; level: DWORD; var bufptr: Pointer; prefmaxlen: DWORD;
var entriesread: DWORD; var totalentries: DWORD;
resume_handle: PDWORD): NET_API_STATUS; stdcall;

const
netapi32lib = "netapi32.dll";

function NetSessionEnum; external netapi32lib name "NetSessionEnum";

PSessionInfo502 = ^TSessionInfo502;
{$EXTERNALSYM _SESSION_INFO_502}
_SESSION_INFO_502 = record
sesi502_cname: LPWSTR; // client name (no backslashes)
sesi502_username: LPWSTR;
sesi502_num_opens: DWORD;
sesi502_time: DWORD;
sesi502_idle_time: DWORD;
sesi502_user_flags: DWORD;
sesi502_cltype_name: LPWSTR;
sesi502_transport: LPWSTR;
end;
TSessionInfo502 = _SESSION_INFO_502;
{$EXTERNALSYM SESSION_INFO_502}
SESSION_INFO_502 = _SESSION_INFO_502;


procedure TfrmMain.PrintNetUsers;
type
PSessionInfo502 = ^TSessionInfo502;
var curw : PSessionInfo502;
bufw : Pointer;
rc, read, total, resumeh : Cardinal;
I : Integer;
LI : TListItem;
begin
lvNet.Items.Clear();
resumeh := 0;
repeat
bufw := nil;
rc := NetSessionEnum(
LPWSTR(FServerName), nil, nil, 502,
bufw, 2048, read, total,
@resumeh);
if (rc <> ERROR_MORE_DATA) AND (rc <> ERROR_SUCCESS) then
Break;
curw := PSessionInfo502(bufw);
for I:=0 to Pred(read) do begin
LI := lvNet.Items.Add();
LI.Caption := curw^.sesi502_username;
LI.SubItems.Add(curw^.sesi502_cname);
LI.SubItems.Add(curw^.sesi502_transport);
LI.SubItems.Add(curw^.sesi502_cltype_name);
Inc(curw);
end;
if bufw <> nil then
NetApiBufferFree(Pointer(bufw));

until rc <> ERROR_MORE_DATA;
if (rc <> ERROR_SUCCESS) then
RaiseLastWin32Error;
end;


 
CrazyRoger   (2002-11-06 23:16) [6]

Это конечно прекрасно, но под 98-й отказывается работать - Файл Проект.ЕХЕ связан с отсутствующим компонентом Netapi32.dll:NetSessionEnum. Короче, как я понял такая ДЛЛ-ка есть, но функция в Windows98 отсутствует. Если можно дайте плиз этот же пример, но адаптированый под 9Х.
Спасибо.


 
Сахаров Сергей   (2002-11-07 12:24) [7]

Вот описание требований к функции NetSessionEnum из MSDN:

Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Lmshare.h (Windows NT/2000/XP) or Svrapi.h (Windows 95/98/Me); include Lm.h (Windows NT/2000/XP).
Library: Use Netapi32.lib (Windows NT/2000/XP) or Svrapi.lib (Windows 95/98/Me).

Соответственно под 9х эту функцию надо искать в svrapi.dll.

Также указано что:
Windows NT/2000/XP: The parameter order is as follows.
NET_API_STATUS NetSessionEnum(
LPWSTR servername,
LPWSTR UncClientName,
LPWSTR username,
DWORD level,
LPBYTE *bufptr,
DWORD prefmaxlen,
LPDWORD entriesread,
LPDWORD totalentries,
LPDWORD resume_handle
);

Windows 95/98/Me: The calling application must use the cbBuffer parameter to specify the size, in bytes, of the information buffer pointed to by the pbBuffer parameter. (The cbBuffer parameter replaces the Windows NT/Windows 2000/Windows XP prefmaxlen parameter.) Neither a user name parameter nor a resume handle parameter is available on this platform. Therefore, the parameter list is as follows.

extern API_FUNCTION
NetSessionEnum(
const char FAR * pszServer,
short sLevel,
char FAR * pbBuffer,
unsigned short cbBuffer,
unsigned short FAR * pcEntriesRead,
unsigned short FAR * pcTotalAvail
);




 
Mischka   (2002-11-13 07:02) [8]

9x, как я понял, вообще не хочет нормально с сетью работать. Лучше писать под NT, все равно это единственная линейка Windows, которая выживет



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-37038
Brat-2
2003-01-01 19:52
2003.01.13
Ошибка EOF(file)


1-37192
ed30
2002-12-30 18:41
2003.01.13
Потоки


1-37089
Bishop
2002-12-28 07:49
2003.01.13
StringGrid


4-37438
serd_hhc
2002-10-27 09:42
2003.01.13
Как узнать адресс строки в чужом приложении?


1-37065
Dmitriy2001
2003-01-02 23:06
2003.01.13
Подскажите пожалуйста, как в компоненте TreeView задать Node





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский