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

Вниз

Расшаривание папки!   Найти похожие ветки 

 
serko ©   (2005-11-09 23:28) [0]

Нашел вот такую статью, с помощью которой можна расшарить папку в сети:

unit Share;
//(c)2002 <Repairman> repairman@uzel.ru
interface
type
 TPassw = string[8];
 TNetName = string[12];

function SetShareOnDisk(HostName: string; //имя компьютера
 LocalPath: string; //папка которую надо открыть для доступа
 NetName: TNetName; //имя расшаренной папки в сети
 Remark: string; //комментарий, видимый в сети
 Access: word; //доступ
 RO_Passw: TPassw; //пароль на чтение
 RW_Passw: TPassw //пароль на полный доступ
 ): boolean;

function RemoveShareFromDisk(HostName: string; //имя компьютера
 NetName: string; //сетевое имя папки которую надо закрыть
 LocalPath: string //локальный путь папки
 ): boolean;
var
 ShareResult: word;
//-------------------------------------------------------------------------------------------
implementation
uses SysUtils, Windows, ShlObj;

function NetShareAdd(ServerName: PChar; //указатель на имя компьютера, например "\\Server"#0, если свой, то можно nil
 Level: Word; //уровень структуры Share_info, здесь 50
 PShareInfo: PChar; //указатель на структуру Share_Info
 ParmErr: DWord) //указатель на ???
 : dword; stdcall; external "svrapi.dll"; //svrapi для Win9X, NetApi32 для NT

function NetShareDel(ServerName: PChar;
 NetName: PChar;
 Reserved: DWord): dword; stdcall; external "svrapi.dll";

type
 _share_info_50 = record //структура Share уровня 50
   NetName: array[1..13] of char; //Как будет называться диск в сети
   SType: byte; //тип =0 (STYPE_DISKTREE) - шарить диски
   Flags: word; //флаги $0191,$0192,$0193....(доступ из сети)
   Remark: PChar; //указатель на комментарий, видимый из сети
   Path: PChar; //указатель на имя ресурса, например "c:\"#0
   RW_Password: array[1..9] of char; //пароль для полного доступа, если не нужен =#0
   RO_Password: array[1..9] of char; //пароль для доступа на чтение, если не нужен =#0
 end;
//----------------------------

function SetShareOnDisk(HostName, LocalPath: string; NetName: TNetName; Remark: string;
 Access: word; RO_Passw, RW_Passw: TPassw): boolean;
var ShareInfo: _Share_Info_50;
begin
 Result := false;
 StrPCopy(@ShareInfo.NetName, NetName);
 ShareInfo.SType := 0;
 ShareInfo.Flags := Access;
 ShareInfo.Remark := PChar(Remark);
 ShareInfo.Path := PChar(LocalPath);
 StrPCopy(@ShareInfo.RO_Password, RO_Passw);
 StrPCopy(@ShareInfo.RW_Password, RW_Passw);
 ShareResult := NetShareAdd(PChar(HostName), 50, @ShareInfo, $0000002A); //вызываем Share
 if ShareResult <> 0 then Exit; //расшарить неудалось
 SHChangeNotify(SHCNE_NETSHARE, SHCNF_PATH, PChar(LocalPath), nil); //сказать шеллу об изменениях
 Result := true;
end;
//----------------------------

function RemoveShareFromDisk(HostName, NetName, LocalPath: string): boolean;
begin
 Result := false;
 ShareResult := NetShareDel(PChar(HostName), PChar(NetName), 0); //удалить шару
 if ShareResult <> 0 then Exit;
 SHChangeNotify(SHCNE_NETUNSHARE, SHCNF_PATH, PChar(LocalPath), nil); //сказать шеллу об изменениях
 Result := true;
end;
//----------------------------
end.

<\code>

Так вот пишу так SetShareOnDisk("\\Serega"#0, "C:\Temp", "Temp", "Шара",
 1, #0,#0)

Может я не так пишу? Подправьте меня!


 
Плохиш ©   (2005-11-10 00:54) [1]

И чему равно ShareResult, партизан фигов?


 
serko ©   (2005-11-10 01:08) [2]

ShareResult равно 124!


 
Плохиш ©   (2005-11-10 01:21) [3]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stgmgmt/fs/netshareadd.asp

ERROR_INVALID_LEVEL


 
serko ©   (2005-11-10 22:42) [4]


> ShareInfo.SType := 0;


Какой надо тип поставить чтобы шарить папки (0 это шара на диски)?

Если не сложно напишите заполненную функцию SetShareOnDisk() для любой папки! Плиииизззззз


 
CHES ©   (2005-11-11 11:37) [5]

А ссылку которую дал Плохиш © читал ?
Не будет твой модуль работать в XP

След. пример добавит шару "D:\Temp" на локальном компьютере.


...
implementation
...

function NetShareAdd(ServerName: PChar;
 Level: Word;
 PShareInfo: PChar;
 ParmErr: DWord): dword; stdcall; external
  "NetApi32.dll";

...

procedure TForm1.Button1Click(Sender: TObject);
const
 STYPE_DISKTREE = $0;
 STYPE_PRINTQ = $1;
 STYPE_DEVICE = $2;
 STYPE_IPC = $3;

 ACCESS_NONE = $0;
 ACCESS_READ = $1;
 ACCESS_WRITE = $2;
 ACCESS_CREATE = $4;
 ACCESS_EXEC = $8;
 ACCESS_DELETE = $10;
 ACCESS_ATRIB = $20;
 ACCESS_PERM = $40;
 ACCESS_FINDFIRST = $80;
 ACCESS_GROUP = $8000;
 ACCESS_ALL = (ACCESS_READ or ACCESS_WRITE or     ACCESS_CREATE or ACCESS_EXEC or
   ACCESS_DELETE or ACCESS_ATRIB or ACCESS_PERM or     ACCESS_FINDFIRST);
type
 _SHARE_INFO_2 = record
   shi2_netname: LPWSTR;
   shi2_type: DWORD;
   shi2_remark: LPWSTR;
   shi2_permissions: DWORD;
   shi2_max_uses: DWORD;
   shi2_current_uses: DWORD;
   shi2_path: LPWSTR;
   shi2_passwd: LPWSTR;
 end;
var
 shi: _SHARE_INFO_2;
 res: DWORD;
 err: Cardinal;
begin
 err := 0;
 with shi do
 begin
   shi2_netname := "TestShare";
   shi2_type := STYPE_DISKTREE;
   shi2_remark := "My Test Share";
   shi2_permissions := ACCESS_READ;
   shi2_max_uses := 10;
   shi2_current_uses := 0;
   shi2_path := "D:\Temp";
   shi2_passwd := nil;
 end;
 res := NetShareAdd(nil, 2, @shi, err);
 if res <> 0 then
   ShowMessage(SysErrorMessage(GetLastError))
 else SHChangeNotify(SHCNE_NETSHARE, SHCNF_PATH,                       PChar(shi.shi2_path), nil);
end;


 
serko ©   (2005-11-11 15:11) [6]


> Не будет твой модуль работать в XP


Так не прикол!  А как сделать шоб заработал на любой ОС?


> След. пример добавит шару "D:\Temp" на локальном компьютере.


Он тоже на ХР не работает!


 
CHES ©   (2005-11-11 15:47) [7]

>> Так не прикол!  А как сделать шоб заработал на >> любой ОС?

Похоже придется определять под какой ОС запущена программа и открывать шару в зависимости от этого.

>> Он тоже на ХР не работает!

Проверено под Win 2000 SP4.
Блин, действительно партизан.
Какую ошибку выдает?
Если ничего не пишет, то зайди через сетевое окружение на свой компьютер и посмотри. Должна быть там.


 
serko ©   (2005-11-11 20:13) [8]


> Блин, действительно партизан.

Почему?
> Если ничего не пишет, то зайди через сетевое окружение на
> свой компьютер и посмотри. Должна быть там.


Так есть, но полного доступа нет, хотя ставил уже ACCESS_ALL


> Похоже придется определять под какой ОС запущена программа
> и открывать шару в зависимости от этого.


А как это сделать?


 
serko ©   (2005-11-15 17:53) [9]


> > Если ничего не пишет, то зайди через сетевое окружение
> на
> > свой компьютер и посмотри. Должна быть там.
>
>
> Так есть, но полного доступа нет, хотя ставил уже ACCESS_ALL


Сорри! Все работает, токо на расшариваемой папке сразу не появляется своеобразная "рука" и почему то всегда (при разных shi2_permissions) делается полный доступ!
А как сделать чтобы можна было токо считывать и запретить изменение папки.

Пожалуйста помогите!


 
serko ©   (2005-11-16 22:23) [10]

Ну как сделать доступ токо на чтение?


 
serko ©   (2005-11-17 13:22) [11]

Ув. модератор переместите мою тему  в раздел Media, ато в Начинающих я немогу дождаться ответа казалось бы на простенький вопрос!



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

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

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1131948554
Ega23
2005-11-14 09:09
2005.12.04
С днем рождения! 14 ноября


2-1132227371
ramzes13
2005-11-17 14:36
2005.12.04
Как заменить Enter в ListBoxe


6-1124310306
nes
2005-08-18 00:25
2005.12.04
TClient/Server-socket, dynamic ip


1-1131272986
maxXP
2005-11-06 13:29
2005.12.04
Эмкляция щелчка мыши


2-1132380298
Al_Ba
2005-11-19 09:04
2005.12.04
Подскажите кто знает в чем дело. Не пойму с TStream