10.1.4 存取控制.htm
来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 526 行 · 第 1/4 页
HTM
526 行
<TABLE cellSpacing=5 cellPadding=0 width="100%" align=center border=0>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE cellSpacing=0 cellPadding=10 align=left border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<DIV class=content id=ArticleBody
style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">
<P class=content>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>ACL_SIZE_INFORMATION结构最常与GetAclInformation一起使用,其定义如下:</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">typedef struct _ACL_SIZE_INFORMATION { <BR> DWORD AceCount; <BR> DWORD AclBytesInUse; <BR> DWORD AclBytesFree; <BR>}ACL_SIZE_INFORMATION;</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>以下的程序代码片段撷取了C:\Test\Text.txt文件之DACL中的ACES数量。</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">PSECURITY_DESCRIPTOR pSD; <BR>PACL pDACL; <BR>ULONG lErr = GetNamedSecurityInfo(TEXT("C:\\Test\\Test.txt"), <BR> SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, <BR> &pDACL, NULL, &pSD); <BR>if (lErr != ERROR_SUCCESS){ <BR> // 错误实例 <BR>} <BR>ACL_SIZE_INFORMATION aclSize = {0}; <BR>if(pDACL != NULL){ <BR> if(!GetAclInformation(pDACL, &aclSize, sizeof(aclSize), <BR> AclSizeInformation)){ <BR> // 错误实例 <BR> } <BR>} <BR>ULONG nAceCount = aclSize.AceCount;</PRE></FONT></DIV>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3
Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>假如C:\Test\Test.txt文件存在FAT磁盘上,或是它没有DACL,系统会在pDACL变数中传回NULL。这就是为什么在呼叫GetAclInformation之前测试NULL是很重要的原因。传递NULL指标值到GetAclInformation中,会导致违规存取的情形。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>拥有DACL中的ACEs数量后,可以使用这个资讯去撷取个别的ACEs。GetAce的呼叫方式如下。</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">BOOL GetAce( <BR> PACL pACL, <BR> DWORD dwACEIndex, <BR> PVOID *pACE);</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>这个函数简单地取得指标,指向ACL、您想要取得ACE以0为基础的索引、以及储存DACL中指向ACE的指标的指标变数位址。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>请注意pace参数是PVOID类型。这是因为一些不同的ACE类型属于DACL,而每个类型都由一种不同的结构表示。GetAce被用来撷取每个类型。然而,ACLs可以包含任何数量的ACEs及任何ACE类型的组合,所以在您用GetAce撷取ACE前,不可能知道ACEs的类型。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>尽管撷取ACE总数及ACE本身是简单的,研读DACL的真正工作变成去认识不同类型的ACEs。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e74d7
size=3><B style="LINE-HEIGHT: 25px">认识ACEs<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>有些不同的ACE类型可以被分割成两个广泛的类型:标准ACEs及对象ACEs。您可以在每一组中找到允许、拒绝存取和稽核存取的ACE类型。每个ACE类型必定会分享共同的属性-即其结构第一个成员为ACE_HEADER类型,定义如下:</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">typedef struct _ACE_HEADER { <BR> BYTE AceType; <BR> BYTE AceFlags; <BR> USHORT AceSize; <BR>}ACE_HEADER;</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>ACE标头对于读取DACL来说是重要的,因为当您从GetAce撷取指向ACE的指标时,在读取ACE的标头前,并不知道ACE的类型或是组成ACE的结构类型。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>如您所猜测的,ACE标头的AceType成员指出了标头代表的ACE类型。表10-10列出了AceType可能的值。这六种ACE类型可在Windows
2000中使用。</FONT></P>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE style="LINE-HEIGHT: 25px" border=0>
<TBODY style="LINE-HEIGHT: 25px">
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px" align=middle><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2><FONT style="LINE-HEIGHT: 25px" face=arial
color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 表10-10 </B></FONT>ACE类型</FONT></TD></TR></TBODY></TABLE></CENTER>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE style="LINE-HEIGHT: 25px" border=1>
<TBODY style="LINE-HEIGHT: 25px">
<TR style="LINE-HEIGHT: 25px">
<TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>ACE类型</FONT> </TH>
<TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>叙述</FONT></TH></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>ACCESS_ALLOWED_ACE_TYPE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>在DACL中使用,指出一组明确地授予给信任成员的存取权利,使用ACCESS_
ALLOWED_ACE结构。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>ACCESS_DENIED_ACE_TYPE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>在DACL中使用,指出一组明确地拒绝给予信任成员的存取权利,使用ACCESS_
DENIED_ACE结构。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SYSTEM_AUDIT_ACE_TYPE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>在SACL(请参阅〈 <A style="LINE-HEIGHT: 25px"
href="http://www.acejoy.com/doc/serverside/10.htm#455_1"
target=_new>稽核及SACL</A> 〉一节)中使用,指出要求一组信任成员时,可能会产生稽核事件的存取权利,使用SYSTEM_AUDIT_ACE结构。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>ACCESS_ALLOWED_OBJECT_ACE_TYPE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>在目录服务对象的DACL中使用,指出一组明确授予代表Active
Directory中某个对象之信任成员的存取权利,使用ACCESS_ALLOWED_OBJECT_ACE结构。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>ACCESS_DENIED_OBJECT_ACE_TYPE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>在目录服务对象的DACL中使用。指出一组明确拒绝给予代表Active
Directory中某个对象之信任成员的存取权利,使用ACCESS_DENIED_OBJECT_ACE结构。</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>SYSTEM_AUDIT_OBJECT_ACE_TYPE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>在目录服务对象的SACL(请参阅〈 <A style="LINE-HEIGHT: 25px"
href="http://www.acejoy.com/doc/serverside/10.htm#455_1"
target=_new>稽核及SACL</A> 〉一节)中使用,指出要求一组信任成员时,可能产生稽核事件的存取权利,使用SYSTEM_AUDIT_OBJECT_
ACE结构。</FONT></TD></TR></TBODY></TABLE></CENTER>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>ACE_HEADE结构的AceFlags成员包含关于ACE的继承及稽核资讯。AceFlag成员将是表10-11中某些值的组合。</FONT></P><A
style="LINE-HEIGHT: 25px" name=457_1>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE style="LINE-HEIGHT: 25px" border=0>
<TBODY style="LINE-HEIGHT: 25px">
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px" align=middle><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2><FONT style="LINE-HEIGHT: 25px" face=arial
color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 表10-11 </B></FONT>ACE_HEADER结构的AceFlags成员的值</FONT></TD></TR></TBODY></TABLE></CENTER>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE style="LINE-HEIGHT: 25px" border=1>
<TBODY style="LINE-HEIGHT: 25px">
<TR style="LINE-HEIGHT: 25px">
<TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>值</FONT> </TH>
<TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>说明</FONT></TH></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px" colSpan=2><FONT
style="LINE-HEIGHT: 25px" size=2>继承标记</FONT></TD></TR>
<TR style="LINE-HEIGHT: 25px">
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
size=2>INHERITED_ACE</FONT></TD>
<TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?