如何在WINDOWS2000或XP下用程序动太设置文件夹共享,且只有只读权限或读写权限?
以下代码可以在2000下使用,但只是是完全共享,而不能设置成只读共享?
unit my_share;interface
uses Windows,Sysutils ;
type
//纪录类型声明
TSHARE_INFO_502 = record
shi502_netname: PWideChar;
shi502_type: DWORD;
shi502_re: PWideChar;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: PWideChar;
shi502_passwd: PWideChar;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;
//添加共享
function NetShareAdd(servername:Widestring; level: DWORD;
Buf: PBYTE;var parm_err: PDWORD ): DWORD; stdcall;
//删除共享
function NetShareDel(ServerName:Widestring; NetName: Widestring;
Reserved: DWord): Integer; StdCall;
const
{共享类型}
STYPE_DISKTREE = 0 ;
STYPE_PRINTQ = 1 ;
STYPE_DEVICE = 2 ;
STYPE_IPC = 3 ;
{访问权限}
ACCESS_READ = 0 ;
ACCESS_WRITE = 1 ;
ACCESS_CREATE = 2 ;
ACCESS_EXEC = 3 ;
ACCESS_DELETE = 4 ;
ACCESS_ALL = 7 ;function ShareResource(ServerName,FilePath,NetName, Re : string): Integer;
implementation
function NetShareAdd; external 'netapi32.DLL' name 'NetShareAdd';
function NetShareDel; external 'netapi32.DLL' name 'NetShareDel';
function ShareResource(ServerName,FilePath,NetName, Re : string): Integer;
var
ShInfo: TSHARE_INFO_502;
parm_err:PDWORD;
_FilePath,_NetName, _Re : PWideChar ;
_ServerName : Pchar ;
begin
GetMem(_ServerName,255) ;
GetMem(_FilePath,255);
GetMem(_NetName,255);
GetMem(_Re,255);
StringToWideChar(FilePath,_FilePath,255);
StringToWideChar(NetName,_NetName,255);
StringToWideChar(Re,_Re,255);
strpcopy(_ServerName,ServerName);
with ShInfo do
begin
shi502_netname := _NetName;
shi502_type := STYPE_DISKTREE ;
shi502_re := _Re ;
shi502_max_uses := $FFFFFFFF;
shi502_current_uses := 10;
shi502_path := _FilePath;
shi502_passwd := nil;
shi502_reserved := 0;
shi502_security_descriptor := nil;
shi502_permissions := ACCESS_ALL;
end;
try
Result := NetShareAdd(_ServerName, 502, @ShInfo, parm_err);
Finally
FreeMem(_ServerName,255);
FreeMem(_FilePath,255);
FreeMem(_NetName,255);
FreeMem(_Re,255);
end;
end;
end.
且在XP下没用?
以下代码可以在2000下使用,但只是是完全共享,而不能设置成只读共享?
unit my_share;interface
uses Windows,Sysutils ;
type
//纪录类型声明
TSHARE_INFO_502 = record
shi502_netname: PWideChar;
shi502_type: DWORD;
shi502_re: PWideChar;
shi502_permissions: DWORD;
shi502_max_uses: DWORD;
shi502_current_uses: DWORD;
shi502_path: PWideChar;
shi502_passwd: PWideChar;
shi502_reserved: DWORD;
shi502_security_descriptor: PSECURITY_DESCRIPTOR;
end;
//添加共享
function NetShareAdd(servername:Widestring; level: DWORD;
Buf: PBYTE;var parm_err: PDWORD ): DWORD; stdcall;
//删除共享
function NetShareDel(ServerName:Widestring; NetName: Widestring;
Reserved: DWord): Integer; StdCall;
const
{共享类型}
STYPE_DISKTREE = 0 ;
STYPE_PRINTQ = 1 ;
STYPE_DEVICE = 2 ;
STYPE_IPC = 3 ;
{访问权限}
ACCESS_READ = 0 ;
ACCESS_WRITE = 1 ;
ACCESS_CREATE = 2 ;
ACCESS_EXEC = 3 ;
ACCESS_DELETE = 4 ;
ACCESS_ALL = 7 ;function ShareResource(ServerName,FilePath,NetName, Re : string): Integer;
implementation
function NetShareAdd; external 'netapi32.DLL' name 'NetShareAdd';
function NetShareDel; external 'netapi32.DLL' name 'NetShareDel';
function ShareResource(ServerName,FilePath,NetName, Re : string): Integer;
var
ShInfo: TSHARE_INFO_502;
parm_err:PDWORD;
_FilePath,_NetName, _Re : PWideChar ;
_ServerName : Pchar ;
begin
GetMem(_ServerName,255) ;
GetMem(_FilePath,255);
GetMem(_NetName,255);
GetMem(_Re,255);
StringToWideChar(FilePath,_FilePath,255);
StringToWideChar(NetName,_NetName,255);
StringToWideChar(Re,_Re,255);
strpcopy(_ServerName,ServerName);
with ShInfo do
begin
shi502_netname := _NetName;
shi502_type := STYPE_DISKTREE ;
shi502_re := _Re ;
shi502_max_uses := $FFFFFFFF;
shi502_current_uses := 10;
shi502_path := _FilePath;
shi502_passwd := nil;
shi502_reserved := 0;
shi502_security_descriptor := nil;
shi502_permissions := ACCESS_ALL;
end;
try
Result := NetShareAdd(_ServerName, 502, @ShInfo, parm_err);
Finally
FreeMem(_ServerName,255);
FreeMem(_FilePath,255);
FreeMem(_NetName,255);
FreeMem(_Re,255);
end;
end;
end.
且在XP下没用?
没用啊,结果还是完全共享啊。
没用啊,结果还是完全共享啊。
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=2833645