调用API函数NetShareAdd()将文件夹设置为共享,调用此函数后如果不做其他设置,网络用户是无法访问共享文件夹的,因为此文件夹在NTFS分区中,同时受到NTFS文件系统的访问控制,因此还需要第2步;
调用DOS命令cacls,赋予Guest用户组读写权限;
如果要取消文件共享,直接调用API函数NetShareDel()

对于FAT32分区中文件夹,cacls命令是不起作用的,这个命令专用于NTFS格式下的文件和文件夹。也就是说上面这种解决方法的第步不能用了,那么现在只能使用NetShareAdd()函数添加文件共享。调用此函数后如果不做其他设置,网络用户可以访问共享文件夹,但拥有完全控制权限(这是默认的共享权限设置),而在实际项目中我们希望能够编程控制读写权限。在NTFS分区中,我们还有NTFS文件系统的访问控制功能罩着,在FAT32分区中就只能依赖于操作系统文件夹共享自身的权限设置功能了。

1NET_API_STATUS NetShareAdd(
2_In_ LPWSTR servername,
3_In_ DWORD level,
4_In_ LPBYTE buf,
5_Out_ LPDWORD parm_err
);
7typedef struct _SHARE_INFO_2 {
8LPWSTR shi2_netname;
9DWORD shi2_type;
10LPWSTR shi2_remark;
11DWORD shi2_permissions;
12DWORD shi2_max_uses;
13DWORD shi2_current_uses;
14LPWSTR shi2_path;
15LPWSTR shi2_passwd;
} SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;

addShare.cpp

 // 说明:
// FAT 系统调用此函数,shi502_permissions参数无效。有且仅有共享权限为最高权限。
// NTFS 系统调用此函数,请修改shi502_permissions参数,可使用如下权限:
// ACCESS_READ, ACCESS_WRITE, ACCESS_CREATE, ACCESS_EXEC
// ACCESS_DELETE, ACCESS_ATRIB, ACCESS_PERM, ACCESS_ALL
BOOL addShare(LPTSTR lpShareName, LPTSTR lpShareDir)
{
NET_API_STATUS res;
SHARE_INFO_502 p; p.shi502_netname = lpShareName; //共享名
p.shi502_type = STYPE_DISKTREE;
p.shi502_remark = NULL;
p.shi502_permissions = ACCESS_ALL;
p.shi502_max_uses = SHI_USES_UNLIMITED; //最大链接数
p.shi502_current_uses = ;
p.shi502_path = lpShareDir; //需要共享的路径
p.shi502_passwd = NULL;
p.shi502_reserved = ;
p.shi502_security_descriptor = NULL; res = NetShareAdd(NULL, , (LPBYTE)&p, NULL); if (NERR_Success == res)
{
printf("Share created.\n");
}
else
{
printf("NetShareAdd error: %u\n", res);
}
return (res==NERR_Success);
}

delShare.cpp

 BOOL delShare(LPTSTR lpShareName)
{
NET_API_STATUS res; res = NetShareDel(NULL, (LMSTR)lpShareName, );
if (NERR_Success == res)
{
printf("NetShareDel ok.\n");
}
else
{
printf("NetShareDel error: %u\n", res);
if (ERROR_ACCESS_DENIED == res)
{
printf("The user does not have access to the requested information.\n");
}
if (NERR_NetNameNotFound == res)
{
printf("The share name does not exist.\n");
}
}
return (res==NERR_Success);
}

windows all version - 实现指定路径共享的更多相关文章

  1. windows上python上传下载文件到linux服务器指定路径【转】

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

  2. Windows 定时删除指定路径下N天前的日志文件

    Windows 定时删除指定路径下N天前的日志文件 Windows 下bat脚本文件的内容为 1. 删除指定路径下5天前的所有文件 @echo off set SrcDir=E:\WORK\Git s ...

  3. 在java程序中访问windows有用户名和密码保护的共享目录

    在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0)  编辑  收藏 --> Jav ...

  4. mysql 开发进阶篇系列 30 数据库二进制包(安装指定路径,目录介绍)

    一. 指定路径 在上一篇里,二进制包解压后,全部放入在/usr/local/mysql目录下,在安装时指定了基础目录和数据目录, --basedir=/usr/local/mysql --datadi ...

  5. java监控指定路径下文件及文件夹变化

    之前用jdk7的WatchService API(java.nio.file包)来做目录下的子文件监控,后改为使用commons-io包.主要有下面几点不同:1. WatchService是采用扫描式 ...

  6. 利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  7. 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)

    原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml): <Window x:Class="SVG2Image.Ma ...

  8. Windows系统中CreateFileMapping实现的共享内存及用法

    在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模 ...

  9. 初识TypeScript:查找指定路径下的文件按类型生成json

    如果开发过node.js的话应该对js(javascript)非常熟悉,TypeScript(以下简称ts)是js的超集. 下面是ts的官网: https://www.tslang.cn/ 1.环境配 ...

随机推荐

  1. MYSQL C API : mysql_real_escape_string 二进制数据存储

    #include <iostream> #include <string> #include <string.h> #include <mysql.h> ...

  2. vmware workstation LINUX磁盘扩容

    1.edit virtual machine settings -> 选中硬盘->右侧utilities->expand(虚拟机不能存在镜像),输入要扩容到的大小 2.扩容之后进入系 ...

  3. Soket编程

    基本概念 lIP地址 每台联网的电脑都有一个唯一的IP地址. 长度32位,分为四段,每段8位,用十进制数字表示,每段范围 0 ~ 255 特殊IP:127.0.0.1 用户本地网卡测试 版本:V4(3 ...

  4. input元素垂直居中

    chrome,firefox,safari, ie9+ 会根据高度自动居中文字: IE9- 以下用这段代码垂直居中: input[type="text"] { line-heigh ...

  5. NHibernate系列文章十二:Load/Get方法

    摘要 NHibernate提供两个方法按主键值查找对象:Load/Get. 1. Load/Get方法的区别 Load: Load方法可以对查询进行优化. Load方法实际得到一proxy对象,并不立 ...

  6. python调用jar包类

    #!/usr/bin/python2.7#coding:utf8import sysimport jpypeimport os.path phone_num = sys.argv[1]#jarpath ...

  7. [Reship]如何回复审稿人意见

    ================================= This article came from here:http://blog.renren.com/GetEntry.do?id= ...

  8. session基础

    1.每个页面都必须开启session_start()后才能在每个页面里面使用session. 2.session_start()初始化session,第一次访问会生成一个唯一会话ID保存在客户端(是基 ...

  9. eclipse颜色 字体

    字体 之前也想过搜个字体,但是看了别人的推荐也没什么太大感觉.今天我自己选择了一款字体,发现看着单词中的i等瘦型的字母会比较费力,现在我知道自己想要什么样的字体了.网上推荐Inconsolata.pf ...

  10. 邮件江湖群狼环伺 U-Mail邮件系统防狼有术

    小时候听过一首儿歌<小兔子乖乖>,里面说到有条恶狼,常常冒充小兔子的“妈妈”,要求小兔 子开门,但小兔子谨守妈妈的训诫,就是不开门,直到辨别出妈妈在窗外的声音,才打开房门.如果我们将一些似 ...