网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.为VC++应用程序对话框添加透明位.
.C++中堆内存的概念和操作方法入门.
.C++的心得: 这些秘籍你知道吗?.
.PE文件格式详解(4).
.水滴石穿C语言之typedef的问题.
.API之网络函数.
.C++语言的VxD与外界通信的所有接.
.gcc manual page (一).
.References and arrays.
.在DBGrid中实现Copy、Paste功能.
.C++中如何显示/隐藏IE浏览器工具.
.Bjarne:如何对付内存泄漏?.
.进程和线程编程.
.面向对象思想的精辟论述.
.ASP.NET在线用户列表精确版——解.
.2004年计算机等级考试二级C语言试.
.C程序设计例解.
.C++通过WIN32 API获取逻辑磁盘详.
.就c++中的const限定修饰符做一个.
.C语言入门之枚举与位运算(2).

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

发表日期:2008-3-8



  在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
上一篇:如何在快速启动栏创建快捷方式 人气:1164
下一篇:软件接口的历史和未来 人气:564
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐