Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];




Вниз

Как просканировать доступные ресурсы на сетевой машине? 


wHammer   (2001-11-06 11:43) [0]

Прошу извинения за уже не раз повторяющийся вопрос. Как, зная сетевой путь к машине в локальной сети, просканировать доступные папки/диски на нем? И как можно узнать read only ресурс или нет?



Kapusto   (2001-11-06 12:17) [1]

Вот код, производящий полный скан сетки на наличие расшареных ресурсов
запускается как 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;



wHammer   (2001-11-06 12:23) [2]

Сенкс, попробую!



wHammer   (2001-11-06 14:12) [3]

to Kapusto ©
??? Sorry, но не получается Scan(nil, true);



Kapusto   (2001-11-06 14:27) [4]

угу :)) Это небольшая разминка для мозгов...
var
dummy: TNetResource;
.....
Scan(dummy, true);



wHammer   (2001-11-06 14:41) [5]

Ну да, согласен, совсем старый стал, тем более раньше когда-то с помощью аналогичной процедуры писал программку для отслеживания времени работы в сети пользователей, и не вспомнил сразу, вот пень-то. Кстати, с помощью этой процедуры можно узнать и не только пользователей. Но мне нужно немного не то, нужно на одной, уже известной машине проверить доступные ресурсы и узнать read only они или нет.



Kapusto   (2001-11-06 15:09) [6]

Насчет Readonly имхо копать надо в сторону NetShareGetInfo, а насчет определенного компа - ну отфильруй полученный результат или заполняй начальный TNetResource вручную....



wHammer   (2001-11-08 11:05) [7]

to Kapusto © (06.11.01 15:09)
Sorry, не понял.



Kapusto   (2001-11-08 11:11) [8]

Не понял насчет r/o? или насчет выборочного скана?



wHammer   (2001-11-08 11:27) [9]

\\СетеваяМашина№1. Здесь, например имеются сетевые папки
a: реально флопи дисковод,
d: реально диск D:,
Temp: реально папка C:\Public\User.
Как мне получить имена:
\\СетеваяМашина№1\a:
\\СетеваяМашина№1\d:
\\СетеваяМашина№1\Temp:

Sorry еще раз, но никак не могу сопоставить TNetResource и эти имена.



Kapusto   (2001-11-08 12:28) [10]

Я предлагал использовать код, сканирующий всю сетку, и проверять .lpRemoteName на вхождение \\Сетевая машина№1, если есть, то заносить в список - иначе пропускать...

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



wHammer   (2001-11-08 15:03) [11]

Как я понял в TNetResource нас интересует lpRemoteName, но при сканировании это поле пустое, я смогу добраться, например до \\СетеваяМашина№1\Temp, если укажу nrResource[i].lpRemoteName + "\Temp", но как мне узнать о существовании данной папки?



Kapusto   (2001-11-08 15:42) [12]

имхо для начала сканирования lpRemoteName = \\СетеваяМашина№1
А далее Enumеруем все ресурсы на данной машине
Варинат для извращенца -
Запускаем на выполнение
net view \\СетеваяМашина№1 > result.txt
и далее анализируем этот файл :)




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.31;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.045 c
1-99947           Kaginava              2002-01-11 23:58  2002.01.31  
как считывать строки из текстового DOS файла


3-99846           Nimnul                2001-12-24 15:26  2002.01.31  
Снова BDE!


7-100073          Serega_2              2001-10-15 11:37  2002.01.31  
Помогите плз програмно прибить досувскую программу.


1-99991           Анатолий              2002-01-14 21:18  2002.01.31  
Выделить маленькие отрезки чисел в большом отрезке чисел?


3-99847           Koks                  2001-12-21 11:44  2002.01.31  
FieldByName