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

2016-02-19 14:06 6 1 收藏

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

【 tulaoshi.com - 编程语言 】


  在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

来源:http://www.tulaoshi.com/n/20160219/1606170.html

延伸阅读
标签: windows 操作系统
在Windows XP和Windows 2000系统中有一个我不一般不常用,但是功能强大的命令,那就是:syskey命令。 这个命令可以有效地增强你的系统安全性。也许你要说不是进入Windows XP或Windows 2000的时候已经要输入帐户和密码了吗,这样还不安全吗?著名的WIN 2000的输入法漏洞你总该听说过吧,如果你的电脑是多人使用,其他人完全可以通过破...
标签: ASP
  1、如果需要对数据库进行写和更新操作,有时候设置数据库的写权限! 2、对数据库进行更新操作时,最好锁定数据库,以免有其他人同时进行此操作时,发生冲突。 3、为安全起见,应该为数据库设置密码访问,虽然破解比较简单,但是有一层安全权限当然比没有要好一些。 4、为数据库另外设置目录,并为数据起一个特别的名字,尽量是不常见的...
标签: Java JAVA基础
环境: 1、操作系统:Windows 2000 本例使用软件下载地址: 1、jdk1.2.2 http://java.sun.com/products/jdk/1.2/ 2、jakarta-tomcat-4.1.exe http://jakarta.apache.org/builds/tomcat/release/v4.0/ 安装方法: 一、安装JDK 第一步,配置安装jdk1.2.2-win.exe,安装目录为D:\jdk1.2.2 JRE的缺省安装目录为D:\Program Files\Ja...
标签: PHP
MySQL 版本:4.1 环境介绍:主库 192.168.0.205 从库 192.168.0.206 1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加 server-id=1 log-bin=binlog_name 2、主库增加用户,用于从库读取主库日志。 grant replication slave,reload,super on *.* to ’slave’@’192.168.0.206’ identified by ’123456’ 3...
如何在深度win7中创建打印目录?   对于办公族来说,电脑连接着打印机是一件再平常不过的事儿了,特别是做文职的朋友,经常都需要打印文件、打印报告什么的,那么大家平时都是如何打印的呢?若是遇到需要打印很多文件的时候经常都出出现一些失误?而一失误就需要重头再来,造成不必要的浪费,其实,不管是从节约的角度还是从提高工作效...

经验教程

405

收藏

24
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部