网上流传的几乎所有的代码均试过,自己也编了一些,不知道为何在WIN98下如何在本地共享局域网其他机器的盘符,缺什么吗?也问过,有人告诉我,需要有远程控制的权限等等,但又不知道如何下手!郁闷!!!好心人们帮帮我吧!问题:如何在本地共享局域网其他机器的盘符
环境:WIN98----WIN98
代码如下(网上流传的):
unit Sharing;{ Sharing 98 v2.0 freeware}
interface
uses Sysutils {其中包含一些意外错误的代码和其他的小功能};
Type
Share_Info50 = Packed Record
shi50_netname : Array[0..12] of Char; {13}
shi50_type : Byte;
shi50_flags : Word;
shi50_re : PChar;
shi50_path : PChar;
shi50_rw_password : Array[0..8] of Char; {9}
shi50_ro_password : Array[0..8] of Char;
End;
Const
NERR_Success = 0; { Success – 没有发生错误 }
NERR_BASE = 2100; {资源类型常量}
STYPE_DISKTREE = 0; {共享目录}
STYPE_PRINTQ = 1; {共享打印机} {属性标记常量}
SHI50F_RDONLY = 1; { 只读共享}
SHI50F_FULL = 2; { 开放所有权限的共享}
SHI50F_DEPENDSON = (SHI50F_RDONLY or SHI50F_FULL); {根据用户口令访问}{下面两者的关系是OR, 例如: flags := (SHI50F_RDONLY OR SHI50F_SYSTEM
) }
SHI50F_PERSIST = 256; {系统启动时建立}
SHI50F_SYSTEM = 512; {共享不可见} {
ShareResource: 在指定机器上共享指定资源.
参数:
ServerName= 需要共享资源的机器的名字,如果是 Nil 则表示本机
FilePath = 需要共享的资源的目录. (字母都应大写);
NetName = 共享资源的网络名称(别名),最长12个字母
Re = 备注,可以为空
ShareType = 资源类别,参见常量设定.
Flags = 共享标记,参见常量设定.
RWPass = 读/写权限的口令,可以为空
ROPass = 只读权限的口令,可以为空 例如: ShareResource(Nil, ‘C:\\TEMP‘, ‘TESTING‘, ‘My Comment‘, STYPE_DIS
KTREE, SHI50F_RDONLY, ‘‘,‘MYPASS‘);
这里需要将本机的 C:\\TEMP共享为‘TESTING‘,备注是 ‘My Comment‘。
访问权限是只读(Read Only), 只读权限口令是 ‘MYPASS‘. 没有全权访问口令 }function ShareResource(ServerName : PChar; FilePath : PChar;
NetName : PChar; Re : PChar;
ShareType : Byte; Flags : Word;
RWPass : PChar; ROPass : PChar ) : Integer;
{ DeleteShare: 在指定机器上删除指定的已经共享的资源.
参数:
ServerName=需要共享资源的机器的名字,如果是 Nil 则表示本机.
NetName =共享资源的网络名称(别名),最长12个字母 例如: DeleteShare(Nil, ‘TESTING‘);
这个操作将本机上的名为‘TESTING‘的共享资源取消共享
function DeleteShare(ServerName : PChar; NetName : PChar) : Integer; { GetShareInfo: 取得指定机器上指定的共享资源的信息
参数:
ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机;
NetName =共享资源的网络名称(别名),最长12个字母;
ShareStruct = Share_Info50.共享资源的信息将添入到此结构中去; 例如:
var MyShareStruct : Share_Info50;
GetShareInfo(Nil, ‘TESTING‘, MyShareStruct); 这个操作将本机上的名为‘TESTING‘的共享资源的信息填入 MyShareStruct结
构中去}
function GetShareInfo(ServerName : PChar; NetName : PChar; Var ShareStruct : Share_Info50) : Integer;{ SetShareInfo: 设置指定机器上指定的共享资源的信息.
参数:
ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机;
NetName =共享资源的网络名称(别名),最长12个字母;
ShareStruct =需要设置的共享资源信息; 例如: SetShareInfo(Nil, ‘TESTING‘, MyShareStruct);
此操作将MyShareStruct描述的共享信息写入到共享资源‘TESTING‘中}
function SetShareInfo(ServerName : PChar; NetName : PChar; ShareStruct
: Share_Info50) : Integer; {以下部分来自 SVRAPI.h 希望了解详细情况的读者请参考win32.hlp}
function NetShareAdd(ServerName : PChar; ShareLevel : SmallInt; Buffer
: Pointer; Size : Word) : Integer; StdCall;
function NetShareDel(ServerName : PChar; NetName : PChar; Reserved : Word) : Integer; StdCall;
function NetShareGetInfo(ServerName : PChar; NetName : PChar; ShareLevel : SmallInt; Buffer : Pointer; Size : Word; Var Used : Word) : Integer; StdCall;
function NetShareSetInfo(ServerName : PChar; NetName : PChar; ShareLevel : SmallInt; Buffer : Pointer; Size : Word; Reserved : SmallInt) : Integer; StdCall;
function DeleteShare(ServerName : PChar; NetName : PChar) : Integer;
implementation function ShareResource(ServerName : PChar; FilePath : PChar;
NetName : PChar; Re : PChar;
ShareType : Byte; Flags : Word;
RWPass : PChar; ROPass : PChar ) : Integer;
var MyShare : Share_Info50;
PMyShare : ^Share_Info50;
begin
strLcopy(MyShare.shi50_netname,NetName,13);
MyShare.shi50_type := ShareType;
MyShare.shi50_flags := Flags;
MyShare.shi50_re := Re;
MyShare.shi50_path := FilePath;
strLcopy(MyShare.shi50_rw_password,RWPass,9);
strLcopy(MyShare.shi50_ro_password,ROPass,9);
PMyShare := @MyShare;
Result := NetShareAdd(ServerName,50,PMyShare,SizeOf(MyShare));
end; function DeleteShare(ServerName : PChar; NetName : PChar) : Integer;
begin
Result := NetShareDel(ServerName,NetName,0);
end; function GetShareInfo(ServerName : PChar; NetName : PChar; Var ShareStruct : Share_Info50) : Integer;
var PMyShare : ^Share_Info50;
AmountUsed : Word;
Error : Integer;
begin
PMyShare := AllocMem(255);
Error := NetShareGetInfo(ServerName,NetName,50,PMyShare,255,AmountUsed);
If Error = 0 Then
Begin
ShareStruct.shi50_netname := PMyShare.shi50_netname;
ShareStruct.shi50_type := PMyShare.shi50_type;
ShareStruct.shi50_flags := PMyShare.shi50_flags;
ShareStruct.shi50_re := PMyShare.shi50_re;
ShareStruct.shi50_path := PMyShare.shi50_path;
ShareStruct.shi50_rw_password := PMyShare.shi50_rw_password;
ShareStruct.shi50_ro_password := PMyShare.shi50_ro_password;
End;
FreeMem(PMyShare);
Result := Error;
end; function SetShareInfo(ServerName : PChar; NetName : PChar; ShareStruct
: Share_Info50) : Integer;
var PMyShare : ^Share_Info50;
begin
PMyShare := @ShareStruct;
Result := NetShareSetInfo(ServerName,NetName,50,PMyShare,SizeOf(ShareStruct),0);
end; function NetShareAdd; external 'SVRAPI.DLL';
function NetShareDel; external 'SVRAPI.DLL';
function NetShareGetInfo; external 'SVRAPI.DLL';
function NetShareSetInfo; external 'SVRAPI.DLL'; end.
环境:WIN98----WIN98
代码如下(网上流传的):
unit Sharing;{ Sharing 98 v2.0 freeware}
interface
uses Sysutils {其中包含一些意外错误的代码和其他的小功能};
Type
Share_Info50 = Packed Record
shi50_netname : Array[0..12] of Char; {13}
shi50_type : Byte;
shi50_flags : Word;
shi50_re : PChar;
shi50_path : PChar;
shi50_rw_password : Array[0..8] of Char; {9}
shi50_ro_password : Array[0..8] of Char;
End;
Const
NERR_Success = 0; { Success – 没有发生错误 }
NERR_BASE = 2100; {资源类型常量}
STYPE_DISKTREE = 0; {共享目录}
STYPE_PRINTQ = 1; {共享打印机} {属性标记常量}
SHI50F_RDONLY = 1; { 只读共享}
SHI50F_FULL = 2; { 开放所有权限的共享}
SHI50F_DEPENDSON = (SHI50F_RDONLY or SHI50F_FULL); {根据用户口令访问}{下面两者的关系是OR, 例如: flags := (SHI50F_RDONLY OR SHI50F_SYSTEM
) }
SHI50F_PERSIST = 256; {系统启动时建立}
SHI50F_SYSTEM = 512; {共享不可见} {
ShareResource: 在指定机器上共享指定资源.
参数:
ServerName= 需要共享资源的机器的名字,如果是 Nil 则表示本机
FilePath = 需要共享的资源的目录. (字母都应大写);
NetName = 共享资源的网络名称(别名),最长12个字母
Re = 备注,可以为空
ShareType = 资源类别,参见常量设定.
Flags = 共享标记,参见常量设定.
RWPass = 读/写权限的口令,可以为空
ROPass = 只读权限的口令,可以为空 例如: ShareResource(Nil, ‘C:\\TEMP‘, ‘TESTING‘, ‘My Comment‘, STYPE_DIS
KTREE, SHI50F_RDONLY, ‘‘,‘MYPASS‘);
这里需要将本机的 C:\\TEMP共享为‘TESTING‘,备注是 ‘My Comment‘。
访问权限是只读(Read Only), 只读权限口令是 ‘MYPASS‘. 没有全权访问口令 }function ShareResource(ServerName : PChar; FilePath : PChar;
NetName : PChar; Re : PChar;
ShareType : Byte; Flags : Word;
RWPass : PChar; ROPass : PChar ) : Integer;
{ DeleteShare: 在指定机器上删除指定的已经共享的资源.
参数:
ServerName=需要共享资源的机器的名字,如果是 Nil 则表示本机.
NetName =共享资源的网络名称(别名),最长12个字母 例如: DeleteShare(Nil, ‘TESTING‘);
这个操作将本机上的名为‘TESTING‘的共享资源取消共享
function DeleteShare(ServerName : PChar; NetName : PChar) : Integer; { GetShareInfo: 取得指定机器上指定的共享资源的信息
参数:
ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机;
NetName =共享资源的网络名称(别名),最长12个字母;
ShareStruct = Share_Info50.共享资源的信息将添入到此结构中去; 例如:
var MyShareStruct : Share_Info50;
GetShareInfo(Nil, ‘TESTING‘, MyShareStruct); 这个操作将本机上的名为‘TESTING‘的共享资源的信息填入 MyShareStruct结
构中去}
function GetShareInfo(ServerName : PChar; NetName : PChar; Var ShareStruct : Share_Info50) : Integer;{ SetShareInfo: 设置指定机器上指定的共享资源的信息.
参数:
ServerName =共享资源存在的机器的名字,如果是 Nil 则表示本机;
NetName =共享资源的网络名称(别名),最长12个字母;
ShareStruct =需要设置的共享资源信息; 例如: SetShareInfo(Nil, ‘TESTING‘, MyShareStruct);
此操作将MyShareStruct描述的共享信息写入到共享资源‘TESTING‘中}
function SetShareInfo(ServerName : PChar; NetName : PChar; ShareStruct
: Share_Info50) : Integer; {以下部分来自 SVRAPI.h 希望了解详细情况的读者请参考win32.hlp}
function NetShareAdd(ServerName : PChar; ShareLevel : SmallInt; Buffer
: Pointer; Size : Word) : Integer; StdCall;
function NetShareDel(ServerName : PChar; NetName : PChar; Reserved : Word) : Integer; StdCall;
function NetShareGetInfo(ServerName : PChar; NetName : PChar; ShareLevel : SmallInt; Buffer : Pointer; Size : Word; Var Used : Word) : Integer; StdCall;
function NetShareSetInfo(ServerName : PChar; NetName : PChar; ShareLevel : SmallInt; Buffer : Pointer; Size : Word; Reserved : SmallInt) : Integer; StdCall;
function DeleteShare(ServerName : PChar; NetName : PChar) : Integer;
implementation function ShareResource(ServerName : PChar; FilePath : PChar;
NetName : PChar; Re : PChar;
ShareType : Byte; Flags : Word;
RWPass : PChar; ROPass : PChar ) : Integer;
var MyShare : Share_Info50;
PMyShare : ^Share_Info50;
begin
strLcopy(MyShare.shi50_netname,NetName,13);
MyShare.shi50_type := ShareType;
MyShare.shi50_flags := Flags;
MyShare.shi50_re := Re;
MyShare.shi50_path := FilePath;
strLcopy(MyShare.shi50_rw_password,RWPass,9);
strLcopy(MyShare.shi50_ro_password,ROPass,9);
PMyShare := @MyShare;
Result := NetShareAdd(ServerName,50,PMyShare,SizeOf(MyShare));
end; function DeleteShare(ServerName : PChar; NetName : PChar) : Integer;
begin
Result := NetShareDel(ServerName,NetName,0);
end; function GetShareInfo(ServerName : PChar; NetName : PChar; Var ShareStruct : Share_Info50) : Integer;
var PMyShare : ^Share_Info50;
AmountUsed : Word;
Error : Integer;
begin
PMyShare := AllocMem(255);
Error := NetShareGetInfo(ServerName,NetName,50,PMyShare,255,AmountUsed);
If Error = 0 Then
Begin
ShareStruct.shi50_netname := PMyShare.shi50_netname;
ShareStruct.shi50_type := PMyShare.shi50_type;
ShareStruct.shi50_flags := PMyShare.shi50_flags;
ShareStruct.shi50_re := PMyShare.shi50_re;
ShareStruct.shi50_path := PMyShare.shi50_path;
ShareStruct.shi50_rw_password := PMyShare.shi50_rw_password;
ShareStruct.shi50_ro_password := PMyShare.shi50_ro_password;
End;
FreeMem(PMyShare);
Result := Error;
end; function SetShareInfo(ServerName : PChar; NetName : PChar; ShareStruct
: Share_Info50) : Integer;
var PMyShare : ^Share_Info50;
begin
PMyShare := @ShareStruct;
Result := NetShareSetInfo(ServerName,NetName,50,PMyShare,SizeOf(ShareStruct),0);
end; function NetShareAdd; external 'SVRAPI.DLL';
function NetShareDel; external 'SVRAPI.DLL';
function NetShareGetInfo; external 'SVRAPI.DLL';
function NetShareSetInfo; external 'SVRAPI.DLL'; end.
因为 这样WindowS还有什么安全性可言??但是 非常规方法是可以的!!例如 我以前曾经搞过一个程序,可一把局域网指定机器的指定盘符共享!!但是,也是有条件的,对方的机器是2K操作系统,有漏洞!!可以,远程溢出!!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Inifiles, ShellApi, ComCtrls, Gauges;type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
NetSource : TNetResource;
Ini_: Tinifile;
ShareLst: TStringList;
i, j: Integer;
Remote_ServerName, Windows_Shell,User,Password,Provider: string;
Const Local_Driver: array[0..11] of string=(('o'),('p'),('q'),('r'),('s'),
('t'),('u'),('v'),('w'),('x'),('y'),('z'));
Con_Status = '正在远程连接%s, 请稍后 ...';
begin
label1.Caption := Con_Status;
Show;
Update;
ShareLst := TStringList.Create;
Ini_ := Tinifile.Create(ExtractfilePath(paramstr(0))+'share.ini');
Remote_ServerName := Ini_.ReadString('Remote','ServerName','');
User := Ini_.ReadString('Remote','User','');
Password := Ini_.ReadString('Remote','Password','');
Provider := Ini_.ReadString('Remote','Provider','');
Windows_Shell := Ini_.ReadString('Local','ShellExecute','Explorer.exe');
Ini_.ReadSection('ShareDirectories',ShareLst);
if (ShareLst.Count=-1) then begin
Application.MessageBox('在线电影未设置路径','提示',16);
Application.Terminate;
exit;
end;
j := 0;
for i:=0 to ShareLst.Count-1 do
begin
label1.Caption := format(Con_Status,[ShareLst.Strings[i]]);
label1.Update;
with NetSource do
begin
try
dwType := RESOURCETYPE_ANY;
lpLocalName := Pchar(Local_Driver[j]+':');
lpRemoteName := Pchar('\\'+Remote_ServerName+'\'+Ini_.ReadString('ShareDirectories',ShareLst.Strings[i],''));
lpProvider := Pchar(Provider);
WNetCancelConnection2(Pchar(Local_Driver[i]+':'), CONNECT_UPDATE_PROFILE, True);
if Ini_.ReadBool('Local','On_Login_ReConnection',False) then
WnetAddConnection2(NetSource, Pchar(Password), Pchar(User), CONNECT_UPDATE_PROFILE)
else WnetAddConnection2(NetSource, Pchar(Password), Pchar(User), 0);
if DirectoryExists(lpLocalName) then
begin
ShellExecute(Handle,'open',Pchar(Windows_shell),
Pchar(lpLocalName),nil,sw_normal);
inc(j);
end;
except
end;
end;
end;
if (J=0) and (i>=0) then
Application.MessageBox('在线电影服务器连接失败!','提示',16);
Application.Terminate;
end;end.
;
;请不要随意修改下面的内容,否则将有可能导致驱动器映射失败
;
;本地计算机设置
[Local]
;Windows Shell程序,该项值为空则取默认值
ShellExecute=Explorer.exe
;下一次登录时是否重连
On_Login_ReConnection=0;远程计算机设置
[Remote]
;服务器名称
ServerName=win2000
;登录的用户名
User=administrator
;登录的密码
Password=
;硬件提供商,可不填
Provider=[ShareDirectories]
;以下为共享文档区,单独映射子目录时请用"\"号隔开
SHARE4=Downloads