Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Доступ к диску   Найти похожие ветки 

 
Александр1   (2004-08-04 11:49) [0]

Здравствуйте уважаемые мастера!
Как открыть и закрыть общий доступ к диску ли папки?
Если можно пример!
Заранее спасибо!


 
Александр1   (2004-08-04 12:57) [1]

Странно вроде вопрос не очень сложный, а молчёк чё-то???


 
Rouse_ ©   (2004-08-04 15:21) [2]

http://www.delphimaster.ru/articles/netmon/index.html


 
Александр1   (2004-08-04 18:52) [3]

Спасибо обязательно посматрю.


 
Alex Konshin ©   (2004-08-05 09:19) [4]

А права доступа установить?


 
имя   (2004-08-05 10:06) [5]

Удалено модератором


 
Rouse_ ©   (2004-08-05 10:09) [6]

В смысле, чтение - полный доступ, пароль?
В MSDN константы описаны...


 
Александр1   (2004-08-07 18:18) [7]

procedure TForm1.BitBtn3Click(Sender: TObject);
var
 OS:Boolean;
 FLibHandle : THandle;
 Name9x:array [0..12] of Char;
 NameNT:PWChar;
 i:Integer;
 ShareName: String;
begin
 if not IsNT(OS) then Close; //Îïðåäåëÿåì òèï ñèñòåìû

 if lbxShares.Items.Count = 0 then Exit;
 for i:= 0 to lbxShares.Items.Count -1 do
   if lbxShares.Selected[i] then Break;  //Èùåì âûáðàííûé ýëåìåíò
 if not lbxShares.Selected[i] then Exit; //Åñëè íå íàéäåí óõîäèì
 ShareName := lbxShares.Items.Strings[i];

   if OS then begin //Êîä äëÿ NT
   FLibHandle := LoadLibrary("NETAPI32.DLL");
   if FLibHandle = 0 then Exit;
   @NetShareDelNT := GetProcAddress(FLibHandle,"NetShareDel");
   if not Assigned(NetShareDelNT) then //Ïðîâåðêà
   begin
     FreeLibrary(FLibHandle);
     Exit;
   end;
   i:= SizeOf(WideChar)*256;
   GetMem(NameNT,i);  //Âûäåëÿåì ïàìÿòü ïîä ïåðåìåííóþ
   StringToWideChar(ShareName,NameNT,i); //Ïðåîáðàçóåì â PWideChar
   NetShareDelNT(nil,NameNT,0);   //Óäàëÿåì ðåñóðñ
   FreeMem(NameNT);  //Îñâîáîæäàåì ïàìÿòü
 end else begin  //Êîä äëÿ 9õ-Ìå
   FLibHandle := LoadLibrary("SVRAPI.DLL");
   if FLibHandle = 0 then Exit;
   @NetShareDel := GetProcAddress(FLibHandle,"NetShareDel");
   if not Assigned(NetShareDel) then //Ïðîâåðêà
   begin
     FreeLibrary(FLibHandle);
     Exit;
   end;
   FillChar(Name9x, SizeOf(Name9x), #0); //Î÷èùàåì ìàññèâ
   move(ShareName[1],Name9x[0],Length(ShareName)); //Çàïîëíÿåì ìàññèâ
   NetShareDel(nil,@Name9x,0); //Óäàëÿåì ðåñóðñ
 end;
 FreeLibrary(FLibHandle);

end;
Данная процедура отключает сетевой ресурс. Согласно статье
Но она отключает тот ресурс который пользователь выберит мышкой в listBox (lbxShares в данной проге). А как сделать так чтобы к отключаемому ресурсу надо было задавать пут: Например Вводишь к примеру С:\.
Ну я думаю вы меня поняли у меня программа должна автоматически отключать ресурсы какие она захочет, а не пользователь.

 if lbxShares.Items.Count = 0 then Exit;
 for i:= 0 to lbxShares.Items.Count -1 do
   if lbxShares.Selected[i] then Break;  //Èùåì âûáðàííûé ýëåìåíò
 if not lbxShares.Selected[i] then Exit; //Åñëè íå íàéäåí óõîäèì
 ShareName := lbxShares.Items.Strings[i];
Я понимаю, что за выше приведённая  малая часть кода как раз отвечает за то чтобы получить путь к ресурсу по выбору пользователем ресурса в listBox. А как из это сделать, чтобы просто сразу в проге уже задать С:\, я незнаю.
Я понимаю, что это наверное не сложно. Но я пока не программист профессионал и по этому для меня это трудно.
Заранее спасибо за помощь!


 
Rouse_ ©   (2004-08-07 20:30) [8]

if lbxShares.Items.Count = 0 then Exit;
for i:= 0 to lbxShares.Items.Count -1 do
  if lbxShares.Selected[i] then Break;  //Èùåì âûáðàííûé ýëåìåíò
if not lbxShares.Selected[i] then Exit; //Åñëè íå íàéäåí óõîäèì
ShareName := lbxShares.Items.Strings[i];


замени на ShareName := "C:\";


 
Александр1   (2004-08-07 20:49) [9]

Да я так уже пробовал. Если не нажимать перед этим на кнопку обновить, то ничего вообще не происходит. А если обновить перед этим (вывести список ресурсов), то появляется ошибка при нажатии на кнопку удаления ресурсов. Ну всмысле ошибка такая с красным крестиком. Приходися нажимать CTRL+F2, чтобы вернуться к delphi.


 
Александр1   (2004-08-08 05:41) [10]

Чё-то всяко перепробывал не выходит.


 
Александр1   (2004-08-08 18:58) [11]

Люди АУ!


 
Rouse_ ©   (2004-08-09 10:34) [12]

Ну так а что отладчик говорит? Где затык?


 
Александр1   (2004-08-09 11:48) [13]

Rouse_ Я кажется сделал что стало работать. Надо только писать в
ShareName не путь, а имя (то имя которое было задано при создании). Ну разумеется т.к. имя берётся из ListBox, то надо обнавить.
Лучше конечно бы было бы через путь, ну ладно и так сойдёт надеюсь.

 if not IsNT(OS) then Close; //Определяем тип системы

 if lbxShares.Items.Count = 0 then Exit;
 for i:= 0 to lbxShares.Items.Count -1 do
   if lbxShares.Selected[i] then Break;  //Ищем выбранный элемент
{Убрано}  //if not lbxShares.Selected[i] then Exit; //Если не найден уходим
 ShareName := "100"; //lbxShares.Items.Strings[i];

Только вот другая проблема встала. Чё-то всё это дело под Win98  не работает. Это так и есть или же она должна всётаки под 98 похать?
А так вообще большёе спасибо за пример!


 
Rouse_ ©   (2004-08-09 11:54) [14]

Да по идее должна работать...


 
Александр1   (2004-08-09 12:30) [15]

Может умя windows коньчиный. Ну я ещё попробую под Me, сотру 98 и запишу Me.
Она ни выдаёт никаких ошибок, она просто ничего не меняет.


 
Rouse_ ©   (2004-08-09 12:32) [16]

Я вообще не понимаю зачем ты привязыавешся к листбоксу.
Создал ресурс, запомнил его имя и этоже имя передавай функции для удаления... всего делов...


 
Александр1   (2004-08-10 05:46) [17]

> Я вообще не понимаю зачем ты привязыавешся к листбоксу.
> Создал ресурс, запомнил его имя и этоже имя передавай функции
> для удаления... всего делов...


Ну да в принципе можно и так до меня не сразу дошло

Проблема в другом!
То что прога не работает под win 98? Это не так страшно.
А вот почему она не открывает ресурс следующим образом \\P1\C:\TP
Мне та надо так чтобы пользователь входил на диск по сети запускал прогу, вводил там ну скажем грубо говоря пароль, а прога давала доступ к другим дискам, папкам находящимся на этом компе.


 
Vit@ly ©   (2004-08-10 07:51) [18]

> А вот почему она не открывает ресурс следующим образом \\P1\C:\TP


Да потому, что необходимо указывать не \\P1\C:\TP,
а \\PC1\имя ресурса


 
Александр1   (2004-08-17 06:12) [19]

Имя ресурса указывать например C:\ или С: или С ?????


 
Александр1   (2004-08-17 06:28) [20]

И причём здесь PC1, когда у меня имя компа P1?
И чем C:\TP не имя ресурса?
Ничего не понял?


 
Rouse_ ©   (2004-08-17 09:25) [21]

Путь к файлу или папке в сети состоит из:
1. Имени компьютера с предваряющими его двумя обратными слэшами.
2. Имени ресурса
3. Путь к самой папке/файлу.

Как это понимать:
Есть компьютер на нем находится файл по следующему пути: D:\Shares\MyPricol\Demo\TestFolder\TestFile.txt

Имя компьютера - SUPERROOT

К папке D:\Shares\MyPricol\ открыт общий доступ под именем ABCDEMO

Полный сетевой путь к файлу будет выглядеть так:
\\SUPERROOT\ABCDEMO\Demo\TestFolder\TestFile.txt

Также к папке D:\Shares\MyPricol\Demo\TestFolder\ открыт общий доступ под именем ROOTFOLDER

В этом случае если заходим через вторую папку сетевой путь будет выглядеть как: \\SUPERROOT\ROOTFOLDER\TestFile.txt

Оба пути зарные хотя и указывается путь к одному и томуже файлу


 
Александр1   (2004-08-17 19:45) [22]

Спасибо большое за подробное разъяснение. Теперь я понимаю, что имя ресурса скрывает в себе путь к нему.
А можно ли открыть доступ к  ресурсу по сети.
Например на компьютере P1 открыт доступ к ресурсу С (Жесткий диск).
Но по мимо этого диска на компьютере Р1 ещё есть диски D,E,F, но доступ к ним закрыт.
Мы заходим с компьютера P2 на компьютер P1 по сети на диск С, который открыт. Запускаем на нём прогу для открытия ресурсов и она (прога), открывает доступ к остальным дискам находящимся на компьютере Р1.
Программа находится на Р1, а открыта будет на Р2, только с диска С  находящимся на Р1.

Можно ли сделать так? Если можно, то как надо прописывать путь в программе для открытия ресурсов?
Если прописать \\P1\C: - не работает.
Если прописать С:\ -  ведь прога та на P1, но запущена та, с P2 – тоже не работает?


 
Rouse_ ©   (2004-08-17 20:49) [23]

Так сделать нельзя...


 
Александр1   (2004-08-19 18:02) [24]

Rouse_ - Спасибо! Я как раз это выяснить и хотел. Ну нельзя так нельзя ничего не поделаешь!
Ещё раз большое спасибо за помощь!!!


 
Александр1   (2004-08-19 18:06) [25]

Т.е. я так понимаю просто напросто windows не даёт по сети таки права. Типа делать с дисками чё хожь. Ну да понятно. Тогда вирусы наверное совсем обнаглеют?


 
Rouse_ ©   (2004-08-19 20:20) [26]

Верно мыслишь :)



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

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.023 c
1-1097236916
Aleksandr.
2004-10-08 16:01
2004.10.24
Имеет ли функция CopyFile проблемы с многопоточностью и проч.?


4-1095686418
Lord de Mon
2004-09-20 17:20
2004.10.24
Проверка на Stand By


3-1096203236
Vasis
2004-09-26 16:53
2004.10.24
Поле1||Поле2


3-1096365087
MakNik
2004-09-28 13:51
2004.10.24
текст SQL ошибки в приложении


6-1092745571
ИМХО
2004-08-17 16:26
2004.10.24
OnDownloadComplete или не OnDownloadComplete - вот в чем вопрос