发信人: yueqs() 
整理人: yueqs(2000-12-05 18:39:45), 站内信件
 | 
 
 
此为本人一本正在编写的书籍的内容,
 已有版权,请勿转载,谢谢!
 ______________________________
 95下的程序,请参考
 
 网络共享目录的设定
 (【问题】
 在局域网环境中共享目录或者共享打印机等是常见的操作,许多日常工作都是依 赖于此的。如果能通过程序完成以往人工繁琐的操作,无疑会方便用户的使用。 
 &【原理】
 在Windows95/97/98中有一个svrapi.dll动态库,基本上所有的设定网络资源共享 的函数都存在于此,我们只要调用这里的函数就能完成我们希望的功能。
 但是要注意的是这个动态库仅仅在Windows95/97/98中有效,在NT下为了保证其安 全性,是通过更复杂的函数调用完成这些操作的,所以这里的方法不适于NT环境 。
 ?【步骤】
 我们将用到的几个函数封装起来以方便使用,此外根据svrapi.h,补充了一些常 量申明,使得调用更加直观。
 
 unit Sharing;
 
 { Sharing 98 v2.0 freeware}
 interface
 uses Sysutils ,ShareErr {其中包含一些意外错误的代码和其他的小功能};
 Type
 Share_Info50 = Packed Record
 shi50_netname : Array[0..12] of Char; {13}
 shi50_type  : Byte;
 shi50_flags   : Word;
 shi50_remark  : 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个字母
     Remark    = 备注,可以为空
     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; Remark : 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 ShareSt ruct : 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 : W ord) : Integer; StdCall;
 function NetShareGetInfo(ServerName : PChar; NetName : PChar; ShareLev el : SmallInt; Buffer : Pointer; Size : Word; Var Used : Word) : Integ er; StdCall;
 function NetShareSetInfo(ServerName : PChar; NetName : PChar; ShareLev el : SmallInt; Buffer : Pointer; Size : Word; Reserved : SmallInt) : I nteger; StdCall;
 
 implementation
 
 function ShareResource(ServerName : PChar; FilePath : PChar;
                        NetName : PChar; Remark : 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_remark := Remark;
   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 ShareSt ruct : Share_Info50) : Integer;
  var PMyShare : ^Share_Info50;
      AmountUsed : Word;
      Error : Integer;
 begin
   PMyShare := AllocMem(255);
   Error := NetShareGetInfo(ServerName,NetName,50,PMyShare,255,AmountUs ed);
   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_remark := PMyShare.shi50_remark;
       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(Shar eStruct),0);
 end;
 
 function NetShareAdd;     external 'SVRAPI.DLL';
 function NetShareDel;     external 'SVRAPI.DLL';
 function NetShareGetInfo; external 'SVRAPI.DLL';
 function NetShareSetInfo; external 'SVRAPI.DLL';
 
 end.
 
 
  -- 1982年宪法赋予中国公民有自由信仰的权利。
 法轮功是修炼,不是宗教,更不是什么“邪教”。
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.78.157.47]
  | 
 
 
 |