![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как просканировать доступные ресурсы на сетевой машине? [D4, D5, Win95/98, NT4]
wHammer © (2001-11-06 11:43:00)Прошу извинения за уже не раз повторяющийся вопрос. Как, зная сетевой путь к машине в локальной сети, просканировать доступные папки/диски на нем? И как можно узнать read only ресурс или нет?
Kapusto (2001-11-08 15:42:00) [1]имхо для начала сканирования lpRemoteName = \\СетеваяМашина№1
А далее Enumеруем все ресурсы на данной машине
Варинат для извращенца -
Запускаем на выполнение
net view \\СетеваяМашина№1 > result.txt
и далее анализируем этот файл :)
wHammer (2001-11-08 15:03:00) [2]Как я понял в TNetResource нас интересует lpRemoteName, но при сканировании это поле пустое, я смогу добраться, например до \\СетеваяМашина№1\Temp, если укажу nrResource[i].lpRemoteName + "\Temp", но как мне узнать о существовании данной папки?
Kapusto (2001-11-08 12:28:00) [3]Я предлагал использовать код, сканирующий всю сетку, и проверять .lpRemoteName на вхождение \\Сетевая машина№1, если есть, то заносить в список - иначе пропускать...
Либо же, как вариант, протрассировать данный код до момента, когда он найдет в сети данную машину и срисовать, как заполнены в этот момент поля в TNetResource, и в своей проге перед WNetOpenEnum вручную присваивать полям структуры эти значения...
wHammer (2001-11-08 11:27:00) [4]\\СетеваяМашина№1. Здесь, например имеются сетевые папки
a: реально флопи дисковод,
d: реально диск D:,
Temp: реально папка C:\Public\User.
Как мне получить имена:
\\СетеваяМашина№1\a:
\\СетеваяМашина№1\d:
\\СетеваяМашина№1\Temp:
Sorry еще раз, но никак не могу сопоставить TNetResource и эти имена.
Kapusto (2001-11-08 11:11:00) [5]Не понял насчет r/o? или насчет выборочного скана?
wHammer (2001-11-08 11:05:00) [6]to Kapusto © (06.11.01 15:09)
Sorry, не понял.
Kapusto (2001-11-06 15:09:00) [7]Насчет Readonly имхо копать надо в сторону NetShareGetInfo, а насчет определенного компа - ну отфильруй полученный результат или заполняй начальный TNetResource вручную....
wHammer (2001-11-06 14:41:00) [8]Ну да, согласен, совсем старый стал, тем более раньше когда-то с помощью аналогичной процедуры писал программку для отслеживания времени работы в сети пользователей, и не вспомнил сразу, вот пень-то. Кстати, с помощью этой процедуры можно узнать и не только пользователей. Но мне нужно немного не то, нужно на одной, уже известной машине проверить доступные ресурсы и узнать read only они или нет.
Kapusto (2001-11-06 14:27:00) [9]угу :)) Это небольшая разминка для мозгов...
var
dummy: TNetResource;
.....
Scan(dummy, true);
wHammer (2001-11-06 14:12:00) [10]to Kapusto ©
???Sorry, но не получается Scan(nil, true);
wHammer (2001-11-06 12:23:00) [11]Сенкс, попробую!
Kapusto (2001-11-06 12:17:00) [12]Вот код, производящий полный скан сетки на наличие расшареных ресурсов
запускается как Scan(nil, true)
ЗЫ: Знаю, что можно оптимизировать, но лениво...
procedure TfMain.Scan(res: TNetResource; root: boolean);
var
hEnum: cardinal;
nrResource: array[0..1000] of TNetResource;
dwSize: DWORD;
numEntries: DWORD;
i: DWORD;
dwResult: DWORD;
begin
if root = true then
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
0, nil, hEnum)
else
dwResult := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
0, @res, hEnum);
if dwResult = NO_ERROR then
begin
dwSize := SizeOf(nrResource);
numEntries := $0FFFFFFFF;
if WNetEnumResource(hEnum, numEntries, @nrResource, dwSize) = NO_ERROR then
begin
for i := 0 to numEntries - 1 do
begin
if nrResource[i].dwUsage <> RESOURCEUSAGE_CONNECTABLE then
begin
if nrResource[i].dwDisplayType = RESOURCEDISPLAYTYPE_SERVER then
begin
lbResources.Items.Add(nrResource[i].lpRemoteName);
lbResources.Update;
end;
Scan(nrResource[i], false)
end
else
begin
lbResources.Items.Add(nrResource[i].lpRemoteName);
lbResources.Update;
end;
end;
end;
WNetCloseEnum(hEnum);
end;
end;