調(diào)用API函數(shù)NetShareAdd()將文件夾設(shè)置為共享,調(diào)用此函數(shù)后如果不做其他設(shè)置,網(wǎng)絡(luò)用戶是無法訪問共享文件夾的,因為此文件夾在NTFS分區(qū)中,同時受到NTFS文件系統(tǒng)的訪問控制,因此還需要第2步;
調(diào)用DOS命令cacls,賦予Guest用戶組讀寫權(quán)限;
如果要取消文件共享,直接調(diào)用API函數(shù)NetShareDel()
對于FAT32分區(qū)中文件夾,cacls命令是不起作用的,這個命令專用于NTFS格式下的文件和文件夾。也就是說上面這種解決方法的第步不能用了,那么現(xiàn)在只能使用NetShareAdd()函數(shù)添加文件共享。調(diào)用此函數(shù)后如果不做其他設(shè)置,網(wǎng)絡(luò)用戶可以訪問共享文件夾,但擁有完全控制權(quán)限(這是默認的共享權(quán)限設(shè)置),而在實際項目中我們希望能夠編程控制讀寫權(quán)限。在NTFS分區(qū)中,我們還有NTFS文件系統(tǒng)的訪問控制功能罩著,在FAT32分區(qū)中就只能依賴于操作系統(tǒng)文件夾共享自身的權(quán)限設(shè)置功能了。
1
NET_API_STATUS NetShareAdd(
2
_In_ LPWSTR servername,
3
_In_ DWORD level,
4
_In_ LPBYTE buf,
5
_Out_ LPDWORD parm_err
6
);
7
typedef struct _SHARE_INFO_2
{
8
LPWSTR shi2_netname;
9
DWORD shi2_type;
10
LPWSTR shi2_remark;
11
DWORD shi2_permissions;
12
DWORD shi2_max_uses;
13
DWORD shi2_current_uses;
14
LPWSTR shi2_path;
15
LPWSTR shi2_passwd;
16
} SHARE_INFO_2, *PSHARE_INFO_2, *LPSHARE_INFO_2; addShare.cpp
1
// 說明:
2
// FAT 系統(tǒng)調(diào)用此函數(shù),shi502_permissions參數(shù)無效。有且僅有共享權(quán)限為最高權(quán)限。
3
// NTFS 系統(tǒng)調(diào)用此函數(shù),請修改shi502_permissions參數(shù),可使用如下權(quán)限:
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; //最大鏈接數(shù)
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
}
34
delShare.cpp