创建文件并设置NTFS权限
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                创建文件并设置NTFS权限
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                ??? 在NTFS文件系統(tǒng)出現(xiàn)后,在Windows系統(tǒng)(2K/XP/Vista..)下的對象,包括文件系統(tǒng),進程、命名管道、打印機、網(wǎng)絡(luò)共享、或是注冊表等等,都可以設(shè)置用戶訪問權(quán)限。
在Windows系統(tǒng)中,其是用一個安全描述符(Security Descriptors)的結(jié)構(gòu)來保存其權(quán)限的設(shè)置信息,簡稱為SD,其在Windows SDK中的結(jié)構(gòu)名是“SECURITY_DESCRIPTOR”,這是包括了安全設(shè)置信息的結(jié)構(gòu)體,其結(jié)構(gòu)體內(nèi)容定義如下:
typedef struct _SECURITY_DESCRIPTOR {? UCHAR? Revision;
? UCHAR? Sbz1;
? SECURITY_DESCRIPTOR_CONTROL? Control;
? PSID? Owner;
? PSID? Group;
? PACL? Sacl;
? PACL? Dacl;
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
一個安全描述符包含以下安全信息:
- 兩個安全標識符(Security identifiers),簡稱為SID,分別是OwnerSid和GroupSid. 所謂SID就是每次當我們創(chuàng)建一個用戶或一個組的時候,系統(tǒng)會分配給改用戶或組一個唯一SID,當你重新安裝系統(tǒng)后,也會得到一個唯一的SID。SID是唯一的,不隨用戶的刪除而分配到另外的用戶使用。
請記住,SID永遠都是唯一的SIF是由計算機名、當前時間、當前用戶態(tài)線程的CPU耗費時間的總和三個參數(shù)決定以保證它的唯一性。
? 例:?? S-1-5-21-1763234323-3212657521-1234321321-500 - 一個DACL(Discretionary Access Control List),其指出了允許和拒絕某用戶或用戶組的存取控制列表。 當一個進程需要訪問安全對象,系統(tǒng)就會檢查DACL來決定進程的訪問權(quán)。如果一個對象沒有DACL,那么就是說這個對象是任何人都可以擁有完全的訪問權(quán)限。
 - 一個SACL(System Access Control List),其指出了在該對象上的一組存取方式(如,讀、寫、運行等)的存取控制權(quán)限細節(jié)的列表。
 - 還有其自身的一些控制位。SECURITY_DESCRIPTOR_CONTROL
 
??? DACL和SACL構(gòu)成了整個存取控制列表Access Control List,簡稱ACL,ACL中的每一項,我們叫做ACE(Access Control Entry),ACL中的每一個ACE。
??? ACL結(jié)構(gòu)體的內(nèi)容如下:
?
typedef struct _ACL {??? BYTE? AclRevision;
??? BYTE? Sbz1;
??? WORD?? AclSize;
??? WORD?? AceCount;
??? WORD?? Sbz2;
} ACL;
typedef ACL *PACL;
?
void CreateFileForSA(TCHAR *strFile) {SECURITY_ATTRIBUTES sa; //和文件有關(guān)的安全結(jié)構(gòu)SECURITY_DESCRIPTOR sd; //聲明一個SDBYTE aclBuffer[1024];PACL pacl=(PACL)&aclBuffer; //聲明一個ACL,長度是1024BYTE sidBuffer[100];PSID psid=(PSID) &sidBuffer; //聲明一個SID,長度是100DWORD sidBufferSize = 100;TCHAR domainBuffer[80];DWORD domainBufferSize = 80;SID_NAME_USE snu;HANDLE file;//初始化一個SDInitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);//初始化一個ACLInitializeAcl(pacl, 1024, ACL_REVISION);//查找一個用戶exchen,并取該用戶的SIDLookupAccountName(0, _T("exchen"), psid,&sidBufferSize, domainBuffer,&domainBufferSize, &snu);//設(shè)置該用戶的Access-Allowed的ACE,其權(quán)限為“所有權(quán)限”AddAccessAllowedAce(pacl, ACL_REVISION, GENERIC_ALL, psid);//把ACL設(shè)置到SD中SetSecurityDescriptorDacl(&sd, TRUE, pacl, FALSE);//把SD放到文件安全結(jié)構(gòu)SA中sa.nLength = sizeof(SECURITY_ATTRIBUTES);sa.bInheritHandle = FALSE;sa.lpSecurityDescriptor = &sd;//創(chuàng)建文件file = CreateFile(strFile, 0, 0, &sa, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);CloseHandle(file);//CreateDirectory(_T("D:\\testfile"),&sa); }
 ?
總結(jié)
以上是生活随笔為你收集整理的创建文件并设置NTFS权限的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: SVN下载谷歌上的代码
 - 下一篇: Vector的简单使用