标签:
调用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 6); 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; 16} SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2;
addShare.cpp
1 // 说明: 2 // FAT 系统调用此函数,shi502_permissions参数无效。有且仅有共享权限为最高权限。 3 // NTFS 系统调用此函数,请修改shi502_permissions参数,可使用如下权限: 4 // ACCESS_READ, ACCESS_WRITE, ACCESS_CREATE, ACCESS_EXEC 5 // ACCESS_DELETE, ACCESS_ATRIB, ACCESS_PERM, ACCESS_ALL 6 BOOL addShare(LPTSTR lpShareName, LPTSTR lpShareDir) 7 { 8 NET_API_STATUS res; 9 SHARE_INFO_502 p; 10 11 p.shi502_netname = lpShareName; //共享名 12 p.shi502_type = STYPE_DISKTREE; 13 p.shi502_remark = NULL; 14 p.shi502_permissions = ACCESS_ALL; 15 p.shi502_max_uses = SHI_USES_UNLIMITED; //最大链接数 16 p.shi502_current_uses = 0; 17 p.shi502_path = lpShareDir; //需要共享的路径 18 p.shi502_passwd = NULL; 19 p.shi502_reserved = 0; 20 p.shi502_security_descriptor = NULL; 21 22 res = NetShareAdd(NULL, 502, (LPBYTE)&p, NULL); 23 24 if (NERR_Success == res) 25 { 26 printf("Share created.\n"); 27 } 28 else 29 { 30 printf("NetShareAdd error: %u\n", res); 31 } 32 return (res==NERR_Success); 33 }
delShare.cpp
1 BOOL delShare(LPTSTR lpShareName) 2 { 3 NET_API_STATUS res; 4 5 res = NetShareDel(NULL, (LMSTR)lpShareName, 0); 6 if (NERR_Success == res) 7 { 8 printf("NetShareDel ok.\n"); 9 } 10 else 11 { 12 printf("NetShareDel error: %u\n", res); 13 if (ERROR_ACCESS_DENIED == res) 14 { 15 printf("The user does not have access to the requested information.\n"); 16 } 17 if (NERR_NetNameNotFound == res) 18 { 19 printf("The share name does not exist.\n"); 20 } 21 } 22 return (res==NERR_Success); 23 }
windows all version - 实现指定路径共享
标签:
原文地址:http://www.cnblogs.com/zhiyewang/p/5209037.html