Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 1.936 c
4-1128415767
AngelFire
2005-10-04 12:49
2005.12.04
Перехват ввода


6-1125267910
desam_
2005-08-29 02:25
2005.12.04
PHP и Delphi


14-1131980549
Mozart
2005-11-14 18:02
2005.12.04
Фильм "Архангел" (Надеюсь так прокатит)


2-1132240647
DillerXX
2005-11-17 18:17
2005.12.04
Скажите как узнать Handle консольного приложения


2-1132068213
PAI
2005-11-15 18:23
2005.12.04
Довольно большая программа понемногу, но "подъедает" память.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский