Как расшарить диск?

Это модуль для Share любого диска или папки как на локальном, так и на удаленном компьютере (если, конечно у Вас права администратора и на компе разрешено удаленное администрирование, для локальной машины это не обязательно... ;-))
Следует отметить, что под NT некоторые процедуры находятся в других DLL...
Функция SetShareOnDisk - ставит шару, RemoveShareFromDisk - снимает ее.
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.
Author: Repairman
Source: Взято из http://forum.sources.ru
ID: 03300
Category:Связь