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

Вниз

NetShareEnum vs WNetEnumResource and some more... (inside)   Найти похожие ветки 

 
Fellomena   (2002-01-08 10:27) [0]

Всем привет !

Вчера появилась необходимость в своей программе смотреть какие папки (ресурсы) открыты на моём компе
(а так же смотреть кто подключён к моему компу в данный момент) .
Для нахождения необходимых ф-ий сделала дамп NETWATCH.EXE и выяснилось, что он при работе с сетью использует следующие
ф-ии:

Imports from SVRAPI.dll
(hint = 0010) NetShareDel
(hint = 0007) NetConnectionEnum
(hint = 000D) NetSessionEnum
(hint = 0009) NetFileEnum
(hint = 000B) NetServerGetInfo
(hint = 0011) NetShareEnum
(hint = 000C) NetSessionDel
(hint = 0008) NetFileClose2
(hint = 000A) NetSecurityGetInfo

угу...
мне, как я поняла, для определения расшаренных папок на моём компе нужна ф-ия NetShareEnum...
полезла я в SDK, а он мне говорит, что ф-ия устарела и использовать надо WNetEnumResource - что-то она мне
не приглянулась (первым параметром надо передавать handle возвращаемый WNETOPENENUM).
Так вот... я покапалась, порыскала да и нашла декларацию NetShareEnum.
Вот пример кода:

//...
function NetShareEnum(const pszServer: PChar; sLevel: SmallInt; pbBuffer: Pointer;
cbBuffer: Word; var pcEntriesRead: Word; var pcTotalAvail: Word): integer; stdcall; external "svrapi.dll";

type
TShareInfo50 = packed record
shi50_netname: array[0..112] of Char;
shi50_type: Byte;
shi50_flags: Word;
shi50_remark: PChar;
shi50_path: PChar;
shi50_rw_password: array[0..112] of Char;
shi50_ro_password: array[0..112] of Char;
end;

type
TFileInfo1 = packed record
fi1_id: Word;
fi1_permissions: Word;
fi1_num_locks: Word;
fi50_pathname: PChar;
fi50_username: PChar;
end;

var
Form1: TForm1;

implementation

procedure TForm1.Button2Click(Sender: TObject);
var
info: TShareInfo50;
//info: TFileInfo1;
var1, var2: Word;
begin
FillChar(info.shi50_rw_password, sizeof(info.shi50_rw_password), 0);
FillChar(info.shi50_ro_password, sizeof(info.shi50_ro_password), 0);
NetShareEnum(0, 50, @info, SizeOf(info), var1, var2); {если вместо 50 поставить 1, то надо использовать структуру TFileInfo1}

Memo1.Lines.Add(info.shi50_netname);
//Memo1.Lines.Add(info.shi50_remark);
//Memo1.Lines.Add(IntToStr(info.shi50_type));
//Memo1.Lines.Add(String(info.shi50_remark));
Memo1.Lines.Add(info.shi50_rw_password);
Memo1.Lines.Add(info.shi50_ro_password);
ShowMessage(IntToStr(var2)+" "+IntToStr(var1));

{
Memo1.Lines.Add((info.fi50_username));
Memo1.Lines.Add(IntToStr(info.fi1_permissions));
Memo1.Lines.Add(IntToStr(info.fi1_num_locks));
Memo1.Lines.Add(IntToStr(info.fi1_id));
//Memo1.Lines.Add(String(info.fi50_pathname));
}
end;


Так вот... попробуйте сами этот код.
У меня почему-то выводится только имя расшаренного ресурса, и, почему-то, пароль на полный доступ !
И показывается только один ресурс, не смотря на то, что в системе их больше.
Мне кажется, что проблемы в размерах массивов используемых при декларации структуры, но what"s the fuck with them ?

Вопрос: как получить инфу о всех расшаренных папках ? Это же не ТрамПарамNext !!!
И ещё: последнии два параметра ф-ии, as far as I understand, var1 - это кол-во ресурсов, о которых удалось получить инфу,
а var2 - общее кол-во найденных расшаренных ресурсов, но это лично мне так кажется, т.к. описания этих параметров у меня
нет и подбирала я их только по смыслу передаваемых параметров.
Почему не выводит Memo1.Lines.Add(String(info.fi50_pathname)); и Memo1.Lines.Add(String(info.shi50_remark)); ??? - ошибку выдаёт 8(

Всем спасибо за помощь !


 
Fellomena   (2002-01-09 12:19) [1]

Ну что же вы, монстры, не отвечаете ?
С нетерпением жду ответов от:
Digitman-а, Юрия Зотова, Алексея Петрова, Dimka Maslov-а, Mbo, Alx2... и всех кто в этом вопросе компетентен 8)


 
Русский   (2002-01-09 12:44) [2]

Мыль, кину компонент TEnumNetwork; похоже, то, что тебе надобно :)))


 
Fellomena   (2002-01-09 12:54) [3]

2 Русский: принципиально не использую сторонних компонент без очень сильной необходимости.
Ручки есть, головка есть, SDK тоже есть - остальное приходяще ;)
API - сила 8)
Но если у компонента исходнички имеются - давай.


 
Русский   (2002-01-09 14:16) [4]

Компонент - с исходниками, использует WNet - функции.
Можно например получить список всех шаренных папок на данном компе (если знаешь его имя), ну чё кидать???


 
Fellomena   (2002-01-09 14:28) [5]

Русский: угу, мыль <a href="mailto:164142@mail.ru">Fellomena</a>
Спасибо a lot 8)


 
LSDDance   (2002-01-15 22:41) [6]

Короче, все читать мне лень, но... srvapi - отличный способ получить свои расшаренные ресурсы (netapi32 для NT), а так же добавлять/изменять их програмно из 9х виндов. и они ни грамма не устарели, винда ими и пользуется... тока лажа состоит в том, что прототипы и данные получаемые в ответ в НТ и 9х различаются для этих функций... полный, но мегаглючный порт в Дельфи есть на JEDI. Я для себя делал свой собственный, работающий где угодно...


 
Fellomena   (2002-01-16 13:14) [7]

2 LSDDance:
так вот лучше не отвечать, не прочитав всё 8)
про srvapi я прерасно знаю и не раз им пользовалась для NetShareAdd NetShareDel и т.д., в данном случае вопрос конкретный, по алгоритму, а не по реализации.


 
VuDZ   (2002-01-16 13:31) [8]

2Fellomena
С++ вариант
пости из SDK.
только что проверил. Если что не ясно, мыль

void main( int argc, TCHAR *lpszArgv[ ])
{
PSHARE_INFO_502 BufPtr,p;
NET_API_STATUS res;
LPTSTR lpszServer = new TCHAR[256];
DWORD er=0,tr=0,resume=0, i;

wcscpy(lpszServer, L"\\\\daxer");

//
// Print a report header.
//
printf("Share: Local Path: Uses: Descriptor:\n");
printf("---------------------------------------------------------------------\n");
//
// Call the NetShareEnum function; specify level 502.
//
do // begin do
{
res = NetShareEnum ((char*)lpszServer, 502, (LPBYTE *) &BufPtr, -1, &er, &tr, &resume);
//
// If the call succeeds,
//
if(res == ERROR_SUCCESS || res == ERROR_MORE_DATA)
{
p=BufPtr;
//
// Loop through the entries;
// print retrieved data.
//
for(i=1;i<=er;i++)
{
printf("%-20S%-30S%-8u",p->shi502_netname, p->shi502_path, p->shi502_current_uses);
//
// Validate the value of the
// shi502_security_descriptor member.
//
if (IsValidSecurityDescriptor(p->shi502_security_descriptor))
printf("Yes\n");
else
printf("No\n");
p++;
}
//
// Free the allocated buffer.
//
NetApiBufferFree(BufPtr);
}
else
printf("Error: %ld\n",res);
}
// Continue to call NetShareEnum while
// there are more entries.
//
while (res==ERROR_MORE_DATA); // end do
getch();
return;
}


 
Fellomena   (2002-01-18 13:32) [9]

2 VuDZ:
угу, спасибА - всё вроде понятно.
Только вот я в своём SDK такого не нашла 8( У меня в нём вообще примеров нет почти - он что у меня резанный ?
(этот SDK у меня ещё толи с C++ 5-ого Борлондовского, толи с Delphi5)


 
VuDZ   (2002-01-18 18:32) [10]

2Fellomena - у меня за ноябрь 2001 года FullSDK ~ 300 метров...
если что интерисует пиши (хотя всё что лично мне последнее время надо - winnt.h + winuser.h + ещё пара файлов)


 
cypher   (2002-02-11 22:52) [11]

Тут конечено все круто.
Определили мы какой файл и кто открыл на чтение\запись... а как определить имя ресурса? В структуре возвращаемой NetFileEnum есть поле netname... но есть оно тока для Win9x... а как быть с NT ????


 
Dimk   (2002-02-12 02:18) [12]

Я похожий примерчик видел в делфевых доках.
Смотри файл Win32.hlp. Я кстати все время им пользуюсь
и там ( в каталоге с хелпами ) много кстати всяких маздайских хелпов - по winsock например.

А вообще скажите МУЖИКИ разве не приятно сидеть в конфе где есть такие женщины?


 
cypher   (2002-02-16 16:04) [13]

Народ! Ну как для файлов, возвращаемый NetFileEnum определить соответсвующий sharename в НТ ???? В 9x понятнов FILE_INFO_50 содержит поле sharename, а как быть в NT??? Вся работа стоит из-за этой ерунды! =(


 
J'JF   (2002-04-17 08:26) [14]

Класс! Но как заставить все это работать под W2K? Кто уже делал такое (NetSessionEnum, NetFileEnum, Net*) - отзовитьесь! Поделитесь опытом, плз!



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

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

Наверх





Память: 0.49 MB
Время: 0.008 c
1-77479
greenrul
2002-06-06 21:21
2002.06.24
Как распечатать HTML файл?


14-77598
Wadim
2002-05-22 00:35
2002.06.24
Как удалить инициализацию программ?


3-77305
Chainik
2002-05-29 14:26
2002.06.24
выборка по дате


6-77520
Иван
2002-04-05 11:16
2002.06.24
Уважаемые господа, у меня мольба о помощи


7-77642
KLM
2001-12-17 06:33
2002.06.24
Резидентные программы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский