如何在Win9x/2k下建立共享目录

红纱超短裙

红纱超短裙

2016-02-19 14:06

今天图老师小编要跟大家分享如何在Win9x/2k下建立共享目录,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

  在Windows中建立一个共享目录,通常是使用NetShareAdd函数.但是在Win2k和Win9x下,这个函数分别是包含在Netapi32.dll和Svrapi.dll中.
  那么假如直接在程序中使用Netapi32.lib或Svrapi.lib,在不同的操作系统下运行时会发生找不到xxx函数的输出错误. 解决的办法就是通过GetProcAddress动态获取NetShareAdd.正好ccrun在csdn回答一位网友的问题,顺便写了些代码,在这里贴出来.
  
  注:
  1. 以下代码已在Win2k ADV Server和Win9x SE中通过测试.编译时不需要包含lm.h或Svrapi.h,假如包含的话,会引起数据类型重名的错误.
  2. 请使用Borland C++ Builder编译器.假如您用VC,个别参数需要改动
  
  代码如下:
  
  typedef DWord (WINAPI *NETSHAREADD2K)(LPWSTR, DWORD, LPBYTE, LPDWORD);
  typedef DWORD (WINAPI *NETSHAREADD9X)(const char FAR*, short, const char FAR*, unsigned short);
  NETSHAREADD2K NetShareAdd2k;
  NETSHAREADD9X NetShareAdd9x;
  
  bool bWinNT; // 操作系统标志
  HINSTANCE hDll; // DLL文件句柄
  
  #define NNLEN           80      // 共享名的长度
  #define LM20_NNLEN      12      // LM 2.0 共享名的长度
  #define SHPWLEN         8       // 共享密码的长度
  #define STYPE_DISKTREE  0       // 磁盘共享
  #define SHI50F_FULL     0x0002
  #define NERR_SUCcess    0       // 操作成功
  
  #define NERR_BASE                2100
  #define NERR_DuplicateShare     (NERR_BASE+18)  // 共享名称已经存在
  #define NERR_RedirectedPath     (NERR_BASE+17)  // 重定向资源的操作非法
  #define NERR_UnknownDevDir      (NERR_BASE+16)  // 设备或目录不存在
  
  typedef struct _share_info_50 // 用于Win9x
  {
      char            shi50_netname[LM20_NNLEN+1];  // 共享名
      unsigned char   shi50_type;                   // 
  
       unsigned short  shi50_flags;                  // 
      char FAR *      shi50_remark;                 // ANSI 备注
      char FAR *      shi50_path;                   // 共享的资源,也就是共享的目录
      char            shi50_rw_password[SHPWLEN+1]; // 可读写的密码
      char            shi50_ro_password[SHPWLEN+1]; // 只读密码
  }share_info_50;
  
  typedef struct _SHARE_INFO_2 // 用于Win2k
  {
      LPWSTR  shi2_netname;
      DWORD   shi2_type;
      LPWSTR  shi2_remark;
      DWORD   shi2_permissions;
      DWORD   shi2_max_uses;
      DWORD   shi2_current_uses;
      LPWSTR  shi2_path;
      LPWSTR  shi2_passwd;
  }SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;
  
  //---------------------------------------------------------------------------
  bool __fastcall InitApi() // 根据操作系统的不同,从Dll中获取API
  {
      // 判定系统平台
      OSVERSIONINFO info;
      info.dwOSVersionInfoSize = sizeof(info);
      GetVersionEx(&info);
      bWinNT = (info.dwPlatformId == VER_PLATFORM_WIN32_NT)? true: false;
  
      if(bWinNT)
      {
          hDll = LoadLibrary("Netapi32.dll"); // win2k
          if(hDll)
          {
              NetShareAdd2k = (NETSHAREADD2K)GetProcAddress(hDll, "NetShareAdd");
              return (NetShareAdd2k != NULL);
          }
          else
  
               return false;
     &n
展开更多 50%)
分享

猜你喜欢

如何在Win9x/2k下建立共享目录

编程语言 网络编程
如何在Win9x/2k下建立共享目录

Win9x/ME下Apache+PHP安装配置

PHP
Win9x/ME下Apache+PHP安装配置

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在Win9x/NT下获取硬盘物理序列号

编程语言 网络编程
在Win9x/NT下获取硬盘物理序列号

PHP+Apache在Win9X配置安装

PHP
PHP+Apache在Win9X配置安装

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何在windows9x下访问linux分区

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
如何在windows9x下访问linux分区

应用程序不兼容导致的Win9X死机故障

windows 操作系统
应用程序不兼容导致的Win9X死机故障

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

mysql中文查询时的字符集匹配问题

mysql中文查询时的字符集匹配问题

vba do loop的几个例子

vba do loop的几个例子
下拉加载更多内容 ↓