• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
在WIN2000与98中创建共享文件夹
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
在WIN2000与98中创建共享文件夹
软件发布 在WIN2000与98中创建共享文件夹
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> Delphi教程 >> 在WIN2000与98中创建共享文件夹

在WIN2000与98中创建共享文件夹

添加时间: 2006-2-26 9:48:18  作者: Delphi教程  阅读次数:57   来源: http://www.d9soft.com

       

  在去年写的‘使用SQLSERVER的扩展存储过程实现远程备份与恢复一文中许多人都提到如何在程序中创建共享文件夹的问题,我当时因为工作忙,只看到了留言没有及时去回复,对读者造成的不便深感抱歉。在此文中,我就把如何在WIN2000与WIN98中创建共享文件夹的代码一一列出(包括相关的一系列网络函数等),以慰大家。

  unit PubLib;

  interface
 
  uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ComCtrls, ToolWin, Db, ADODB, DBCtrls, StdCtrls,Math,dbgrids,
  Buttons, ExtCtrls,clipbrd,Registry, variants;
  const
  NTlib = 'NETAPI32.DLL';
  MElib = 'SVRAPI.DLL';
  {共享类型}
  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 ;

  type
  NET_API_STATUS = DWORD;
  //纪录类型声明,注意参数类型的正确对应,最好别看 delphi 的帮助,引起误导
  TSHARE_INFO_502 = record
  shi502_netname: PWideChar;
  shi502_type: DWORD;
  shi502_remark: 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;
  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;

  //*****网络函数*****
  function IsWinNT: Boolean; //判断是否NT系统
  function GetPDCName: string; //取得主域控制器名称
  function GetDomainName: AnsiString; //获取域名
  //建立、删除共享文件夹
  //for win2000,winnt
  function AppendShareResource(ServerName,FilePath,NetName, Remark : string): Integer;

  function DeleteShareResource(ServerName: string; NetName: string): Integer;
  //for win98
  function AddShareResource (ServerName : PChar; FilePath : PChar;
  NetName : PChar; Remark : PChar ) : Integer;
  function DelShareResource(ServerName: string; NetName: string): Integer;

  implementation

  function IsWinNT: Boolean;
  var
  VersionInfo: TOSVersionInfo;
  begin
  VersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  Result := GetVersionEx(VersionInfo);
  if Result then
  Result := VersionInfo.dwPlatformID = VER_PLATFORM_WIN32_NT;
  end;

  function GetPDCName: string;
  var
  pDomain : PWideChar;
  LibHandle : THandle;
  begin
  Result := '';
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create('Unable to map library: ' + NTlib);
  try
  @NTNetGetDCName := GetProcAddress(Libhandle, 'NetGetDCName');
  @NTNetApiBufferFree := GetProcAddress(Libhandle, 'NetApiBufferFree');
  try
  if NTNetGetDCName(nil, nil, pDomain) = 0 then
  Result := WideCharToString(pDomain);
  finally
  NTNetApiBufferFree(pDomain);
  end;
  finally
  FreeLibrary(Libhandle);

  end;
  end;

  function GetDomainName: AnsiString;
  type
  WKSTA_INFO_100 = record
  wki100_platform_id: Integer;
  wki100_computername: PWideChar;
  wki100_langroup: PWideChar;
  wki100_ver_major: Integer;
  wki100_ver_minor: Integer;
  end;

  WKSTA_USER_INFO_1 = record
  wkui1_username: PChar;
  wkui1_logon_domain: PChar;
  wkui1_logon_server: PChar;
  wkui1_oth_domains: PChar;
  end;
  type
  //Win9X ANSI prototypes from RADMIN32.DLL and RLOCAL32.DLL

  TWin95_NetUserGetInfo = function(ServerName, UserName: PChar; Level: DWORD; var
  BfrPtr: Pointer): Integer;
  stdcall;
  TWin95_NetApiBufferFree = function(BufPtr: Pointer): Integer;
  stdcall;
  TWin95_NetWkstaUserGetInfo = function(Reserved: PChar; Level: Integer; var
  BufPtr: Pointer): Integer;
  stdcall;

  //WinNT UNICODE equivalents from NETAPI32.DLL

  TWinNT_NetWkstaGetInfo = function(ServerName: PWideChar; level: Integer; var
  BufPtr: Pointer): Integer;
  stdcall;
  TWinNT_NetApiBufferFree = function(BufPtr: Pointer): Integer;
  stdcall;

  var

  Win95_NetUserGetInfo: TWin95_NetUserGetInfo;
  Win95_NetWkstaUserGetInfo: TWin95_NetWkstaUserGetInfo;
  Win95_NetApiBufferFree: TWin95_NetApiBufferFree;

  WinNT_NetWkstaGetInfo: TWinNT_NetWkstaGetInfo;
  WinNT_NetApiBufferFree: TWinNT_NetApiBufferFree;

  WSNT: ^WKSTA_INFO_100;
  WS95: ^WKSTA_USER_INFO_1;

  EC: DWORD;
  hNETAPI: THandle;
  begin
  try

  Result := '';

  if IsWinNT then
  begin
  hNETAPI := LoadLibrary('NETAPI32.DLL');
  if hNETAPI <> 0 then
  begin @WinNT_NetWkstaGetInfo := GetProcAddress(hNETAPI, 'NetWkstaGetInfo');
  @WinNT_NetApiBufferFree := GetProcAddress(hNETAPI, 'NetApiBufferFree');

  EC := WinNT_NetWkstaGetInfo(nil, 100, Pointer(WSNT));
  if EC = 0 then
  begin
  Result := WideCharToString(WSNT^.wki100_langroup);
  WinNT_NetApiBufferFree(Pointer(WSNT));
  end;
  end;
  end
  else
  begin
  hNETAPI := LoadLibrary('RADMIN32.DLL');
  if hNETAPI <> 0 then

 begin @Win95_NetApiBufferFree := GetProcAddress(hNETAPI, 'NetApiBufferFree');
  @Win95_NetUserGetInfo := GetProcAddress(hNETAPI, 'NetUserGetInfoA');

  EC := Win95_NetWkstaUserGetInfo(nil, 1, Pointer(WS95));
  if EC = 0 then
  begin
  Result := WS95^.wkui1_logon_domain;
  Win95_NetApiBufferFree(Pointer(WS95));
  end;
  end;
  end;

  finally
  if hNETAPI <> 0 then
  FreeLibrary(hNETAPI);
  end;
  end;

  function AppendShareResource(ServerName,FilePath,NetName, Remark : string): Integer;
   var
  hInfo: TSHARE_INFO_502;
  parm_err:PDWORD;
  _FilePath,_NetName, _Remark : PWideChar ;
  _ServerName : Pchar ;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create('Unable to map library: ' + NTlib);
  try
  @NTNetShareAdd := GetProcAddress(Libhandle, 'NetShareAdd');
  GetMem(_ServerName,255) ; //分配内存
  GetMem(_FilePath,255);
  GetMem(_NetName,255);
  GetMem(_Remark,255);
  StringToWideChar(FilePath,_FilePath,255); //字符串转换,一定要转换正确
  StringToWideChar(NetName,_NetName,255);
  StringToWideChar(Remark,_Remark,255);
  strpcopy(_ServerName,ServerName);

  //开始创建结构
  with ShInfo do
  begin
  shi502_netname := _NetName;
  shi502_type := STYPE_DISKTREE ;
  shi502_remark := _Remark ;
  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 := NTNetShareAdd(_ServerName, 502, @ShInfo, parm_err);
  finally // 别忘了释放内存
  FreeMem(_ServerName,255);
  FreeMem(_FilePath,255);
  FreeMem(_NetName,255);
  FreeMem(_Remark,255);
  end;
  finally
  FreeLibrary(Libhandle);
  end;
  end;

  function DeleteShareResource(ServerName: string; NetName: string): Integer;
  var
  _ServerName : Pchar ;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create('Unable to map library: ' + NTlib);
  try
  @NTNetShareDel := GetProcAddress(Libhandle, 'NetShareDel');
  GetMem(_ServerName,255) ; //分配内存

  strpcopy(_ServerName,ServerName);
  try
  Result := NTNetShareDel(_ServerName, NetName,0);
  finally
  FreeMem(_ServerName,255);
 end;
  finally
  FreeLibrary(Libhandle);
  end;
  end;

  function AddShareResource (ServerName : PChar; FilePath : PChar;
  NetName : PChar; Remark : PChar ) : Integer;
  var
  MyShare : Share_Info50;
  PMyShare : ^Share_Info50;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create('Unable to map library: ' + MElib);
  try
  @MENetShareAdd := GetProcAddress(Libhandle, 'NetShareDel');
  strLcopy(MyShare.shi50_netname,NetName,13);
  MyShare.shi50_type := 0;
  MyShare.shi50_flags := 0;
  MyShare.shi50_remark := Remark;
  MyShare.shi50_path := FilePath;
  {MyShare.shi50_rw_password := nil ;
  MyShare.shi50_ro_password :=nil ;}
  PMyShare := @MyShare;
  Result := MENetShareAdd(ServerName,50,PMyShare,SizeOf(MyShare));
  finally
  FreeLibrary(Libhandle);
  end;
  end;

  function DelShareResource(ServerName: string; NetName: string): Integer;
  var
  _ServerName : Pchar ;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create('Unable to map library: ' + MElib);
  try
  @NTNetShareDel := GetProcAddress(Libhandle, 'NetShareDel');
  GetMem(_ServerName,255) ; //分配内存
  strpcopy(_ServerName,ServerName);
  try
  Result := NTNetShareDel(_ServerName, NetName,0);
   finally
  FreeMem(_ServerName,255);
  end;
  finally
  FreeLibrary(Libhandle);
  end;
  end;

 

上下文章:

 

上一篇文章: 使用Delphi创建IIS虚拟目录 下一篇文章: Delphi 与FORTRAN语言的混合编程

相关文章:

  • 新蠕虫伪装成文件夹图标,让你防不胜防
  • Vista找不到Config文件夹的解决办法
  • 创建企业级Internet邮件服务器(一)
  • 创建企业级Internet邮件服务器(二)
  • 创建企业级Internet邮件服务器(三)

相关软件:

  • HideDir 隐藏文件夹 2.40
  • E-神加密文件夹 080808 金装版
  • E-神加密文件夹 2005 Build 050920 豪华版
  • E-钻文件夹加密大师 6.5
  • 高强度文件夹加密大师 8000 II3
  • 方竹游戏共享大师 V1.70

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • Delphi的两个实用技巧(1)播放Flash
  • Delphi的两个实用技巧(2)巧用Wind...
  • delphi实例编程之--制作可随处拖放...
  • 关于VisiBroker For Delphi的使用...
  • 关于VisiBroker For Delphi的使用...
  • 关于VisiBroker For Delphi的使用...
  • 在线播放器DIY
  • Delphi让你发送Flash电子邮件
  • 在窗口标题区添加按钮
  • 用Delphi 6编程实现自动标注汉语拼...

Delphi教程阅读排行

  • Delphi7从入门到精通之历数Delphi...
  • Delphi的两个实用技巧(1)播放Flash
  • Delphi7从入门到精通之认识Delphi...
  • delphi实例编程之--制作可随处拖放...
  • Delphi控件,我们也可以(1)
  • Delphi的两个实用技巧(2)巧用Wind...
  • 在线播放器DIY
  • Delphi控件,我们也可以(2)
  • Spcomm串口控件的例程
  • 用Delphi + DirectX开发简单RPG游...

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有