关于NetShareCheck和NetShareAdd的使用方法

    很多人都对 NetShareCheck和NetShareAdd在VC里的使用感到很困惑,按照定义传入参数后,返回值始终是错误的,最常见的就是ret=123,parm_err=8,最近我在做一个小工具时也碰到这两个函数的问题, 一开始查阅了很多资料后都找不到一个所以然的说明,因为NetShareAdd在dephi 中或VB中都没有这些问题,而只有在VC这个比较面向底层的开发工具中才会出现,坛子上搜索的信息也一直没有解决好,起初让人很郁闷。尤其是NetShareCheck这个检查是否共享的函数,很多人都说这个函数是不行的,建议采用NetShareEnum来枚举本机共享,再从共享列表中找出是不是有我们要检查的共享设置,而对于NetShareAdd,一些人采用的方法是直接在注册表中加入共享的方式来解决,不过我就是不信。

    代用的方法是可行,但是我还是想搞懂这两个函数的用法,经过查阅多方资料后终于找到了答案,其实问题就在unicode!NetShareCheck和NetShareAdd函数中,字符串参数都是采用unicode编码的,我们在查看参数定义时往往忽略了这一点,找到这个问题的根源,总是也就迎刃而解,只要把传入参数中的字符串信息转换成unicode就可以了。下面写一下这个两个函数的用例吧:

 

#include  < atlconv.h >   // 转换unicode 时要用到宏的头文件

BOOL Share(
char   *  pShareName, char   *  pSharePath)
{
    USES_CONVERSION;

    SHARE_INFO_502   si502;   
    NET_API_STATUS   nas;   
    LPWSTR pwShareName
=A2W(pShareName);  //转换成unicode 字符串
    LPWSTR pwSharePath=A2W(pSharePath);

          si502.shi502_netname   
=   (LPTSTR)pwShareName;   
          si502.shi502_type   
=   STYPE_DISKTREE;   
          si502.shi502_remark   
=   NULL;   
          si502.shi502_permissions   
=   0;   
          si502.shi502_max_uses   
=   SHI_USES_UNLIMITED;   
          si502.shi502_current_uses   
=   0;   
          si502.shi502_path   
=   (LPTSTR)pwSharePath;   
          si502.shi502_passwd   
=   NULL;   
          si502.shi502_reserved   
=   0;   
          si502.shi502_security_descriptor   
=   NULL   
    
          nas   
=   NetShareAdd(   
                  NULL,                   
//   share   is   on   local   machine   
                  502,                         //   info-level   
                  (LPBYTE)&si502,   //   info-buffer   
                  NULL                         //   don't   bother   with   parm   
                  );     

          
return (nas==0);
}


BOOL Check(
char   *  pSharePath)
{
    USES_CONVERSION;

    NET_API_STATUS nas;

    LPWSTR pwSharePath
=A2W(pSharePath);

    nas
=NetShareCheck(NULL,(LPTSTR)pwSharePath,NULL);

    
return (nas==0);    
}

 

用了这个转换之后,这个两个函数就很好用了,我把我自己的使用心得写出来,希望对大家都有所帮助。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值