Как извлечь информацию о конкретном открытии ресурса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 29.01.2019 (Вт) 15:29

Здравствуйте!
Мне нужно получить сведения, какие именно расшаренные ресурсы на локальной машине открываются удаленно в LAN. «files opened remotely on server». Иными словами, - имеется Server, на нем расшарены ресурсы, например: Installs, Clips, Films, Porn&Girls, Music, Books, Pictures, Foto, Games и т.д. К серверу подключился User1, User2 и User3. Каждый из них куда-то влез и «шарит» соответствующую папку. Мне нужно получить информацию о том, кто и что конкретно шарит? Какую папку открыл и т.д.? Покопавшись в инете, нашел вроде как подходящую функцию NetFileGetInfo Она заполняет структуру FILE_INFO_3 или FILE_INFO_2 в зависимости от параметра Level этой функции. Как я понимаю, мне нужно получить сведение полей: fi3_username, fi3_pathname и еще неплохо бы получить fi3_permissions в структуре FILE_INFO_3. Проблема в том, что мне не хватает знаний грамотно ее воспользоваться, а в инете нет ни одного примера, хотя бы самого захудалого на VB. К сожалению, только теория и то очень скудная. :cry: Буду очень благодарен за любую помощь в данном отношении.
Набросал небольшой черновичек...
Код: Выделить всё
Private Declare Function NetFileGetInfo Lib "Netapi32" _
  (ByVal servername As Long, _
   ByVal fileid As Long, _
   ByVal level As Long, _
   ByRef bufptr As Any) As Long

Где: servername = 0& - локальная машина
fileid = 0& - идентификатор файла открытого ресурса, ставлю в данном случае «0».
level = 3 – уровень данных. В данном случае нужно FILE_INFO_3
bufptr – Указатель на адрес буфера, который получает информацию.

Далее сопутствующая информация...

Код: Выделить всё
Private Declare Sub MoveMemory Lib "kernel32.dll" _
  Alias "RtlMoveMemory" ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)

Private Const NERR_SUCCESS As Long = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_ACCESS_DENIED = 5&
Private Const ERROR_INVALID_LEVEL = 124&
Private Const ERROR_NOT_ENOUGH_MEMORY = 8

Private Type FILE_INFO_3
   fi3_id As Long
   fi3_permissions As Long
   fi3_num_locks As Long
   fi3_pathname As Long
   fi3_username As Long
End Type

Dim fi3 As FILE_INFO_3
Dim bufptr As Long


Далее вроде так...

Success = NetFileGetInfo(0&, 0&, 3, bufptr)
...и далее уже извлечь из памяти по адресу указателя bufptr. Правильно???
Типа: MoveMemory(ByVal fi3, ByVal bufptr, Len(fi3)) С работой с памятью я не силён...
Но Success все время равен - ERROR_FILE_NOT_FOUND. Даже когда ресурсы открываются удаленно.
Помогите, пожалуйста, разобраться. Как правильно описать параметр bufptr и получить FILE_INFO_3 ??? :roll:

ВСЕ! Начинайте бить... :cheese:
Последний раз редактировалось Vova_2581 30.01.2019 (Ср) 12:03, всего редактировалось 1 раз.

Teranas
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Teranas » 29.01.2019 (Вт) 16:21

Чтобы бить, надо понимать за что, а я ничего не понял. :alien:

Код: Выделить всё
Declare Function NetFileEnum lib "netapi32" (ByVal lptstr As String, ByVal lptstr As String, ByVal lptstr As String, ByVal dword As Long, ByVal pbyte As String, ByVal dword As Long, ByRef pdword As Long, ByRef pdword As Long, ByRef pdword As Long) As Long
Declare Function NetFileGetInfo lib "netapi32" (ByVal lptstr As String, ByVal dword As Long, ByVal dword As Long, ByVal pbyte As String) As Long
Declare Function NetGetAnyDCName lib "NETAPI32" (ByVal servername As String, ByVal domainname As String, ByVal bufptr As String) As Long
Declare Function NetGetDCName lib "NETAPI32" (ByVal servername As String, ByVal domainname As String, ByVal bufptr As String) As Long
Declare Function NetGetDisplayInformationIndex lib "NETAPI32" (ByVal servername As String, ByVal level As Long, ByVal Prefix As String, ByRef index As Long) As Long


А с чтением строк по указателю, нужно смотреть в каком формате строка и конвертировать в нужную.
С уважением, Андрей.

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 30.01.2019 (Ср) 11:39

Так декларирование функций... с этим проблем нет, проблема в том, что нигде нет ни одного более-менее внятного примера, только одна теория и какие-то черновые наброски (куски оторванного кода). Вот функции с префиксом WNet описаны с примерами гораздо лучше, а просто с префиксом Net почему-то рассказано мало, примеров особо никаких. Поэтому, нужно решить описанную мною задачу, не знаю, как конкретно это сделать?

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 30.01.2019 (Ср) 12:02

Teranas писал(а):...я ничего не понял.

Имеется локальная машина, назовем ее Server, на ней открыта папка (папки) с общим доступом, например SuperGirls. В момент X времени к этой машине по сети LAN подключился пользователь User1 и очень сильно возжелал увидеть содержимое папки SuperGirls на Server, неожиданно для себя самого и совершенно случайно он открыл эту папку на Server по сети. Строгий администратор локальной машины Server в момент времени X запустил программу... (которую и нужно сделать), которая показала ему информацию следующего содержания:

Opened remotely on server
User: User1
Path: D:\SuperGirls
Permissions: READ
Time: 10:32:35

kill user [Yes/No] ??? _

Teranas
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Teranas » 31.01.2019 (Чт) 17:14

Vova_2581

Приветствую!

Порылся в своих завалах и ничего не нашёл.
Хотя думал есть всё. :wink:
В тырнете нащупал исходники на делфях и с++.
Думаю, тебе придётся опираться на них.
С уважением, Андрей.

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 01.02.2019 (Пт) 0:00

Teranas писал(а):
Приветствую!

Порылся в своих завалах и ничего не нашёл.
В тырнете нащупал исходники на делфях и с++.


Здравия желаю!

Так вот и я о том же!.. НИХТ-где ни фига нет! :scratch: А С++ и Делфи я не знаю. :?: Поэтому нужна помощь...
Иначе - Хитлер капут! :alien:
Есть, правда, другие варианты... "чесать ухо левой пяткой"... и поэтому мне они не очень нравятся. :(

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 01.02.2019 (Пт) 0:59

Погодите ка!... Кажется я кое-что нашел, только через другой поисковик... :bounce: Завтра на работе проверю все, а потом отпишусь здесь о результатах. Надеюсь, то что надо.

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 03.02.2019 (Вс) 1:56

Итак, все проверил, есть результат, но!.. начну с анекдота...
Вот все говорят Гугл... Гугл... а Гугл-то уже не тот, что был вчера! Не так давно, в некотором царстве, тридесятом государстве жил… короче... искал я в инете одну хрень. Хрень продавалась и интернет-магазине, а где и по чем... нужно было найти. Запузырил я, значит, поиск в этом самом Google.com и нашел аж целых пару(!) штук ссылок! Говорю, значит, бате: «короче... это... дифициТА, стало быть, вАще нигде нету!!!». А он меня спрашивает: «А ты короче... это... через что искал-то, добрый молодец???». «Через Хугл!», - с гордостью ответил я, и нос к верху задрал, пытаясь изобразить умный вид. Он ухмыльнулся так, и за комп засел. Через пару минут зовет меня... «Смотри, салага, и учись уму разуму!», - говорит мне и пальцем в экран тычет, а другой рукой подзатыльник выписывает. Гляжу, значит, и ничЁ понять не могу. Ту хрень, что я искал 2 часа в Хугл и ни хрена толком не нашел, тута вдруг аж 12 742 796 859 ссылок нарисовалось!! Я глаза, значит, вылупил... а батя мне: «Эх, ты... Вася!». Он то считал меня ГИПЕР(!!!)хакером, а тут сделал... как пацана из детского сада – отделение Ясли! Пришлось мне краснеть и по углам прятаться. :oops: А батя мой еще неделю с растопыренными пальцами ходил, и подзатыльники мне выписывал. Ну а потом я узнал, что Гугл, нынче, это фуфло в натуре! А пользовался он поисковиком DuckDuckGo.com. Отаки дела, малята!

Так вот, и в этот раз та же история по ходу... В Гугле найти не мог, а в DuckDuckGo.com первая(!) же ссылка! Только искал я уже другую функцию, то есть – NetFileEnum, поскольку мне то нужно перечисление не одного пользователя, а столько, сколько подключится. И я нашел пример кода VB от Рэнди Берч (Randy Birch) сайта VBnet... За что ему большое спасибо и низкий поклон! Но и тут не все гладко, как мне надо. Пришлось опять, в который раз уже, биться в истерике и плакать в подушку... :cry: Эксперименты показали, что параметр fi3_username в структуре FILE_INFO_3 возвращает имя НЕ подключенного пользователя, а ЛОКАЛЬНОГО пользователя! То есть, иными словами: с помощью этой функции я смогу узнать, что кто-то юзает папку D:\SuperGirls на Server, но кто это делает, узнать не получится, поскольку fi3_username вернет имя локального пользователя! Не знаю, поняли вы или нет??? Говоря еще проще: на свой комп Server вы зашли под именем Admin, к вам подключился User1 и вздручил у вас на компе папку с общим доступом SuperGirls у вас на диске D:\. Так вот функция покажет следующее...

Opened remotely on server
User: Admin
Path: D:\SuperGirls
Permissions: READ

... вместо User1 будет Admin ...словно вы сами у себя эту самую папку дрючите! Может я чего-то недоперепонял, то поправьте, пожалуйста. Что-то тут явно не так.
Чтобы вы не мучались... выкладываю исходник кода от Randy Birch в готовом проекте... Попробуйте открыть у себя общий доступ какой-нибудь папки, открыть ее, и потом зайти сами к себе по сети – программа все покажет. Результат будет одинаковый, что вы сами к себе зайдете... что через другой комп в сети – по фиг.
Может нужно что-то в коде перенедоправить и тогда все получится??? :scratch:
Вложения
NetFileEnum.rar
(2.6 Кб) Скачиваний: 25

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 04.02.2019 (Пн) 11:44

Немного модифицировал код... Если sServer присвоить указатель на пустую строку с нулевым символом = vbNullString, то можно избавиться от лишней ненужной информации, то есть \PIPE\... уже не появляется и не учитывается счетчиком подключений. Но все равно вопрос остается открытым: как узнать КТО именно юзает расшаренную папку?? :roll:
Вложения
NetFileEnum improved.rar
(2.88 Кб) Скачиваний: 20

Teranas
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Teranas » 04.02.2019 (Пн) 15:52

Возможно больше подойдёт, но я не уверен.

Код: Выделить всё
Type NETRESOURCE
        dwScope As Long
        dwType As Long
        dwDisplayType As Long
        dwUsage As Long
        lpLocalName As String
        lpRemoteName As String
        lpComment As String
        lpProvider As String
End Type

Const CONNECT_UPDATE_PROFILE = &H1

Declare Function WNetAddConnection Lib "mpr" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
Declare Function WNetAddConnection2 Lib "mpr" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Long
Declare Function WNetCancelConnection Lib "mpr" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As Long
Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
Declare Function WNetGetConnection Lib "mpr" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, cbRemoteName As Long) As Long
Declare Function WNetOpenEnum Lib "mpr" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long
Declare Function WNetEnumResource Lib "mpr" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
Declare Function WNetCloseEnum Lib "mpr" Alias "WNetCloseEnum" (ByVal hEnum As Long) As Long

Declare Function WNetGetUser Lib "mpr" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
Declare Function WNetConnectionDialog Lib "mpr" Alias "WNetConnectionDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long
Declare Function WNetDisconnectDialog Lib "mpr" Alias "WNetDisconnectDialog" (ByVal hwnd As Long, ByVal dwType As Long) As Long

С уважением, Андрей.

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 04.02.2019 (Пн) 17:55

Структуру NETRESOURCE как раз используют функции с префиксом WNet - это близко, но все же не то. Все эти функции работают именно с подключенными ресурсами, а именно, например, - сетевой диск или сетевая папка. То есть, это когда ты конкретно заходишь на чей-то комп, открываешь папку и делаешь ее у себя на компе дополнительным сетевым ресурсом - в Проводнике появляется еще один диск с пометкой, к примеру: SuperGirls на "Server" (Z:)

Мне нужно получать информацию о том, КТО юзает расшаренную у меня папку БЕЗ(!) подключения ее к удаленному компу в качестве дополнительного сетевого ресурса. Вот как это замутить, пока не ясно. :(

Teranas
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Teranas » 04.02.2019 (Пн) 19:21

Посмотри ещё тут, может что понравится.

Ещё есть отличная программа с мядалями, можно запустить монитор API и посмотреть какие функции она использует.
http://sharealarm.nsauditor.com/
Вложения
Network.7z
(12.28 Кб) Скачиваний: 20
001.7z
(2.52 Кб) Скачиваний: 20
С уважением, Андрей.

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 05.02.2019 (Вт) 10:38

Хорошо, спасибо, я посмотрю...

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 06.02.2019 (Ср) 12:06

В общем, те классы, что вы мне прислали тоже немного не то... В декларациях те же функции WNet, Net и много другое, но мимо... :(
Там почти везде имеется ввиду, что либо User уже известен, либо предоставляются методы получения его локального имя, а тут вся фишка в том, что User как раз и неизвестен!
Network.cls
Network.jpg
Network.jpg (231.57 Кб) Просмотров: 1285

И второй класс 001... Кстати, в нем куда-то оторвалась "шапка" :scratch: , пришлось подправить немного, чтобы заработал...
001.jpg
001.jpg (227.04 Кб) Просмотров: 1285

Мне так кажется, что нужно все-таки копать в сторону WinSock ??? Посмотрите, пожалуйста, может у вас что-то есть в этом направлении. :roll:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14147
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение alibek » 06.02.2019 (Ср) 12:43

Vova_2581 писал(а):Там почти везде Мне так кажется, что нужно все-таки копать в сторону WinSock ???

Сокет просто отправляет и принимает байты (данные).
Что ты с ним собираешься делать, если не разобрался с готовыми библиотеками Windows Network?
Lasciate ogni speranza, voi ch'entrate.

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 06.02.2019 (Ср) 20:07

alibek писал(а):Сокет просто отправляет и принимает байты (данные). Что ты с ним собираешься делать?

Ну, это было чисто мое предположение...
alibek писал(а):...если не разобрался с готовыми библиотеками Windows Network?

Так вы загадками не говорите. Где именно то, что может спасти "гиганта мысли и отца русской демократии"??? :roll:

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 08.02.2019 (Пт) 11:38

Ммммда... видно тема непростая? :drunken:
Teranas
Спасибо Вам, что пытались помочь! Попробую еще "поковырять", но если не выйдет, придется закинуть, а жаль. :(

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 381
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Don Leno » 18.02.2019 (Пн) 19:47

Мне так кажется, что нужно все-таки копать в сторону WinSock ???


По моему это будет правильно и проще, тем более примеров работы с winsock в нете пруд пруди!(Если нужен простой пример книга Стива Брауна - VB6.Учебный курс [ссылка на книгу - http://soft-lenta.ru/index.php?newsid=1146387441]).

Если твой код может определять в какой папке лазит пользователь то, все просто:
1. Пишешь клиентскую программу (по Winsock), которая будет отправлять Серверу что в данный момент пользователь Компа №1 лазит в папке SuperGirl.
2. Пишешь серверную программу (по Winsock), которая будет получать сообщения и выводить их тебе в удобном виде!

Самое интересное я запустил виртуальную машину и через обычный проводник зашел в расшареную папку Share, которая по сети доступна от виртуальной машины. Твой первый исходник у меня сработал, но он мне не показал папку в которую я зашел! В итоге разобрался он показывает какое то другое подключение, а мою шару он просто в упор не видит!(ниже фото) А второй напрочь отказался и показал 0 подключений!
Вложения
NetWork.jpg
NetWork.jpg (36.54 Кб) Просмотров: 1100

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 19.02.2019 (Вт) 11:04

Don Leno
Спасибо за книгу! Обязательно скачаю, посмотрю...

Насчет клиент-серверной программы по Winsock – но ведь это будет совершенно иной подход. Я знаю, что можно как-то и без этого. К тому же продвинутый пользователь Компа №1 может просто вырубить клиента Winsock на своей машине, и спокойно себе дрючить папку SuperGirl тайком от сурового взора администрации. :(

Самое интересное я запустил виртуальную машину и через обычный проводник зашел в расшареную папку Share


С виртуальными машинами, видимо, этот код не срабатывает как надо. В первом коде, о котором Вы говорите, просто НЕ отключено отображение работы межпроцессорной службы srvsvc – она отображается всегда! А во втором коде отображение просто выключено. Я писал раньше, как это было сделано.
Vova_2581 писал(а):Немного модифицировал код... Если sServer присвоить указатель на пустую строку с нулевым символом = vbNullString, то можно избавиться от лишней ненужной информации, то есть \PIPE\... уже не появляется и не учитывается счетчиком подключений.


А о том, как проверить работу кода у самого себя, я тоже писал раньше...

(цитата)
Попробуйте открыть у себя общий доступ к какой-нибудь папке, открыть ее, НЕ через Проводник, а через «Сетевое окружение» -> «Сеть»... и потом зайти сами к себе по сети – программа все сразу покажет.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 381
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Don Leno » 19.02.2019 (Вт) 18:41

Все заработало, спс за пояснение. Зашел в Api Guid поискал и наткнулся на Апи NetUserGetInfo может она даст необходимый результат, ведь само название говорит за себя, нежели NetFileGetInfo. Вот пример из самого Api Guid(у меня он не работает. ):

НЕ ЗАБУДЬ ИЗМЕНИТЬ ИМЯ В СТРОКЕ НА СВОЕ
Код: Выделить всё
bUsername = "Administrator" & vbNullChar


Код: Выделить всё
Const NERR_Success = 0
Private Const NERR_BASE = 2100
Private Const NERR_InvalidComputer = (NERR_BASE + 251)
Private Const NERR_UseNotFound = (NERR_BASE + 150)
Const CP_ACP = 0
Private Type USER_INFO_3
    usri3_name As Long
    usri3_password As Long
    usri3_password_age As Long
    usri3_priv As Long
    usri3_home_dir As Long
    usri3_comment As Long
    usri3_flags As Long
    usri3_script_path As Long
    usri3_auth_flags As Long
    usri3_full_name As Long
    usri3_usr_comment As Long
    usri3_parms As Long
    usri3_workstations As Long
    usri3_last_logon As Long
    usri3_last_logoff As Long
    usri3_acct_expires As Long
    usri3_max_storage As Long
    usri3_units_per_week As Long
    usri3_logon_hours As Byte
    usri3_bad_pw_count As Long
    usri3_num_logons As Long
    usri3_logon_server As String
    usri3_country_code As Long
    usri3_code_page As Long
    usri3_user_id As Long
    usri3_primary_group_id As Long
    usri3_profile As Long
    usri3_home_dir_drive As Long
    usri3_password_expired As Long
End Type
Private Declare Function NetUserGetInfo Lib "netapi32" (lpServer As Any, UserName As Byte, ByVal Level As Long, lpBuffer As Long) As Long
Private Declare Function NetApiBufferFree Lib "netapi32" (ByVal Buffer As Long) As Long
Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)
Private Declare Function lstrlenW Lib "kernel32" (lpString As Any) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, lpWideCharStr As Any, ByVal cchWideChar As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
' Returns an ANSI string from a pointer to a Unicode string.
Public Function GetStrFromPtrW(lpszW As Long) As String
    Dim sRtn As String
    sRtn = String$(lstrlenW(ByVal lpszW) * 2, 0)   ' 2 bytes/char
    ' WideCharToMultiByte also returns Unicode string length
    Call WideCharToMultiByte(CP_ACP, 0, ByVal lpszW, -1, ByVal sRtn, Len(sRtn), 0, 0)
    GetStrFromPtrW = GetStrFromBufferA(sRtn)
End Function
' Returns the string before first null char encountered (if any) from an ANSII string.
Public Function GetStrFromBufferA(sz As String) As String
    If InStr(sz, vbNullChar) Then
        GetStrFromBufferA = Left$(sz, InStr(sz, vbNullChar) - 1)
    Else
        ' If sz had no null char, the Left$ function
        ' above would return a zero length string ("").
        GetStrFromBufferA = sz
    End If
End Function
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim lpBuf As Long
    Dim ui3 As USER_INFO_3
    ' replace "Administrator" with a valid NT username
    Dim bServer() As Byte, bUsername() As Byte
    bServer = "" & vbNullChar
    bUsername = "Administrator" & vbNullChar
    If (NetUserGetInfo(bServer(0), bUsername(0), 3, lpBuf) = NERR_Success) Then
        Call MoveMemory(ui3, ByVal lpBuf, Len(ui3))
        MsgBox GetStrFromPtrW(ui3.usri3_name)
        MsgBox GetStrFromPtrW(ui3.usri3_comment)
        Call NetApiBufferFree(ByVal lpBuf)
    End If
End Sub


И вот еще погуглил и на китайском чтоли нашел по vb6 пример для твоей апи http://www.vbstation.net/spec/S2_8.htm Гугл переводчик на отлично справился по крайней мере читабельно! В самом низу качни исходник!

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 20.02.2019 (Ср) 14:04

Пытаюсь качнуть исходник "японамать", но почему-то получаю Forbidden - сайт говорит, типа, исходник только для какого-то Байдена. :roll: А кто это? Я его даже не знаю. :D Чего-то не выходит качнуть. :cry:

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 20.02.2019 (Ср) 14:44

Там, вроде как, регистрироваться надо, чтобы скачать этот самый исходник, но чтобы зарегистрироваться нужно знать японский. :albino: ...и японскую клавиатуру. :rabbit:
Дайте мне кто-нибудь пистолет... :tongue:

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 381
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Don Leno » 20.02.2019 (Ср) 15:59

Ниже исходник как и обещал!
Вложения
netfile.rar
(10 Кб) Скачиваний: 18

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 21.02.2019 (Чт) 10:58

Спасибо. Немного позже гляну... напишу ответ...

Vova_2581
Бывалый
Бывалый
 
Сообщения: 236
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Vova_2581 » 22.02.2019 (Пт) 11:59

Мне кажется, это видео все расскажет само за себя...
NetFileEnum Video Demonstration.avi
И сам исходник...
Вложения
NetFileEnum modified.rar
(3.21 Кб) Скачиваний: 21

NashRus
Постоялец
Постоялец
 
Сообщения: 381
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение NashRus » 22.02.2019 (Пт) 14:19

как эти юзеры своих компов попадают к тебе на комп?
не под твоей ли учетной записью?

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 381
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Don Leno » 22.02.2019 (Пт) 20:40

NetFileEnum Video Demonstration.avi
Я так и не смог загрузить видео.
Но сам исходник вполне рабочий! Я проверял на своем компе, жаль сети нет чтоб проверить. Так ты исправил проблему или нет? Смог получить имя юзера??

Если же нет то предлагаю не пытаться получить имя пользователя, а например IP компа подключенного к тебе в данный момент или что-то подобное. То есть не зацикливаться на имени юзера, авось чего и выйдет?

Про IP компьютера
Раз ты имеешь доступ в свою сеть, где и находятся наши пользователи то:
1.Скорее всего лучше составить список их IP адресов
2.Как то узнать какие IP подключены к тебе сейчас
3.Сверить текущие IP со списком IP твоей сети
4. Найти потенциальных клиентов)))

Я еще позже покапаю и если найду чего отпишусь!

P.S. Не забудь отписать если получилось, ведь в нете не ты один ищешь подобные исходники!

NashRus
Постоялец
Постоялец
 
Сообщения: 381
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение NashRus » 22.02.2019 (Пт) 20:55

смотри глазами на ответ.
много текста, это усложняет.
вопрос прочитай еще раз.
ответишь на него, удовлетворишься.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 381
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение Don Leno » 23.02.2019 (Сб) 4:40

Nashrus ты эт про что сейчас? Про какой вопрос идет речь? На какой ответ в теме мне смотреть? Конкретизируйте!

Проблема ведь с получением имени пользователя просматривающего расшареный ресурс! Я и предлагаю варианты. Мне тем более самому интересна эта тема.

NashRus
Постоялец
Постоялец
 
Сообщения: 381
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Как извлечь информацию о конкретном открытии ресурса

Сообщение NashRus » 23.02.2019 (Сб) 12:28

у тебя юзеры подключаются, скорее всего, под твоим именем, иначе как им попасть на твой комп без домена.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList