10.2.4 存取控制.htm
来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 301 行 · 第 1/2 页
HTM
301 行
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>这些函数的宣告完全相同,这样很好。pDACL参数指出您正在加入ACE的DACL。dwACERevision参数应该被设定为ACL_REVISION。dwACEFlags参数则指出将被设定到新ACE的ACE_HEADER之AceFlags成员的值,这被用来指出ACE的继承属性。有关不同的ACE标记,请参阅 <A
style="LINE-HEIGHT: 25px"
href="http://www.acejoy.com/doc/serverside/10.htm#457_1"
target=_new>表10-11</A> 的说明。您不应传递指出稽核类型的标记给dwACEFlags参数。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>dwAccessMask参数指出新ACE的存取遮罩,并说明您拒绝或允许哪些权利给信任成员。最后,您应该传递一个指向SID结构的指标给psidTrustee参数,以指出被拒绝或允许存取的信任成员。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>如果DACL的空间不足,AddAccessDeniedAceEx及AddAccessAllowedAceEx函数会传回FALSE,而GetLastError会传回ERROR_ALLOTTED_SPACE_EXCEEDED。</FONT></P>
<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>对于不支援继承的对象,您可以使用非「Ex」之AddAccess
DeniedAce及AddAccessAllowedAce的简单样式。非「Ex」函数唯一不同的地方是它们不让您为新的ACE设定标记。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>当您认识了AddAccessDeniedAceEx及AddAccessAllowedAceEx后,您可以了解重复地呼叫它们去建立一个新DACL并非了不起的事情。在您建立了新的DACL之后,您可以传递它到SetSecurityInfo或SetNamedSecurityInfo,把它用于现存对象中(在您呼叫这些函数的其中一个后,不要忘记为新的DACL释放内存)。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>您通常会为即将建立的对象建立一个新的DACL。建立一个对象通常需要您指派新的DACL给安全描述项,然后在呼叫「建立」函数之前,指派安全描述项到一个安全属性结构中。以下的程序代码显示如何为新的事件对象建立一个新的DACL。程序代码会建立并初始化了一个带有DACL的安全描述项,然后再使用它去建立一个指定的事件(请注意,这个程序代码使用了先前的CalculateACLSize函数,以计算新DACL的大小)。这个处理程序的两个挑战即是计算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">PSID psidEveryone ; <BR>// 为内建的「Everyone」群组建立一个SID <BR>SID_IDENTIFIER_AUTHORITY sidAuth = SECURITY_WORLD_SID_AUTHORITY; <BR>if (!AllocateAndInitializeSid( &sidAuth, 1, SECURITY_WORLD_RID, <BR> 0, 0, 0, 0, 0, 0, 0, &psidEveryone )){ <BR> // 错误 <BR>} <BR>// 我们建立两个ACEs,两者都使用「Everyone」群组 <BR>PSID psidArray[2]; <BR>psidArray[0] = psidEveryone; <BR>psidArray[1] = psidEveryone; <BR>// 取得新ACL的大小 <BR>ULONG lACLSize = CalculateACLSize(NULL, psidArray, 2, NULL, 0); <BR>if (lACLSize == 0){ <BR> // 错误 <BR>} <BR>// 分配内存给ACL <BR>PACL pDACL = (PACL)HeapAlloc(GetProcessHeap(), 0, lACLSize); <BR>if (pDACL == NULL){ <BR> // 错误 <BR>} <BR>// 初始化ACL <BR>if (!InitializeAcl(pDACL, lACLSize, ACL_REVISION)){ <BR> // 错误 <BR>} <BR>// 确定先将拒绝的ACE加入 <BR>if (!AddAccessDeniedAce(pDACL, ACL_REVISION, <BR> WRITE_OWNER|WRITE_DAC, psidArray[0])){ <BR> // 错误 <BR>} <BR>// 然后加入允许的ACE <BR>if (!AddAccessAllowedAce(pDACL, ACL_REVISION, <BR> STANDARD_RIGHTS_ALL|SPECIFIC_RIGHTS_ALL, psidArray[1])){ <BR> GetLastError();//错误「winerror.h」 <BR>} <BR>// 分配空间给安全描述项 <BR>PSECURITY_DESCRIPTOR pSD = HeapAlloc(GetProcessHeap(), 0, <BR> SECURITY_DESCRIPTOR_MIN_LENGTH); <BR>if (pSD == NULL){ <BR> // 错误 <BR>} <BR>// 我们现在有一个空的安全描述项 <BR>if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)){ <BR> // 错误 <BR>} <BR>// 指派我们的DACL <BR>if (!SetSecurityDescriptorDacl(pSD, TRUE, pDACL, FALSE)){ <BR> // 错误 <BR>} <BR>// 然后从SECURITY_ATTRIBUTES结构指出我们的SD <BR>SECURITY_ATTRIBUTES sa = {0}; <BR>sa.nLength = sizeof(sa); <BR>sa.lpSecurityDescriptor = pSD; <BR>// 传递到CreateEvent <BR>HANDLE hEvent = CreateEvent(&sa, TRUE, FALSE, TEXT("SecureEvent")); <BR>// 清除 <BR>HeapFree(GetProcessHeap(), 0, pSD); <BR>HeapFree(GetProcessHeap(), 0, pDACL); <BR>FreeSid(psidEveryone);</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>一个将ACEs以适当顺序加入的可选择方法是编写一个为您自己安排ACL顺序的函数,以使您在加入ACEs时不须担心它的顺序。然后在您把ACL用于对象前,整理全部的ACL。我将在本章稍后实作这样的函数。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>这个范例不只显示如何在对象建立时使用DACL及安全描述项,也为带有服务的对象阐明了一个重要的技巧。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>本机使用者环境中的服务预设安全性,将会导致例如指定事件及管道的对象被保护,以预防在已登录的使用者安全性环境中执行不被允许的程序。有时候这并非被要求的行为。某些时候您可能想要建立一个拥有NULL
DACL的对象,它允许每个人拥有对所有对象的存取权,但这么做会建立一个安全性漏洞。所有的存取包括调整对象安全性的能力,并且允许任何人改变对象的安全性。改变安全性几乎可以肯定会导致对象停止运作。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>一个控制存取的较好解决办法即是拒绝每个人存取对象的安全性(只允许对象拥有者修改对象的安全性)。在加入拒绝的ACE之后,您可以允许任何信任成员存取对象,因为您知道会优先检查拒绝ACE的内容。在这个实例中,我允许每个人拥有所有存取权。</FONT></P<
p>
<P class=content_page><A
href="http://www.acejoy.com/Html/Article/network/6320061030230615_P3.html">上一页</A> <A
href="http://www.acejoy.com/Html/Article/network/6320061030230615.html">[1]</A> <A
href="http://www.acejoy.com/Html/Article/network/6320061030230615_P2.html">[2]</A> <A
href="http://www.acejoy.com/Html/Article/network/6320061030230615_P3.html">[3]</A> <STRONG><FONT
color=#ff0033>[4]</FONT></STRONG> </P></DIV><BR><BR></TD></TR></TBODY></TABLE>
<TABLE style="CLEAR: both" cellSpacing=0 cellPadding=0 width="97%">
<TBODY>
<TR>
<TD align=right>
<TABLE>
<TBODY>
<TR>
<TD>阅读:<SPAN id=news_hits></SPAN>
<SCRIPT src="10.2.4 存取控制.files/GetHits.htm"
type=text/JavaScript></SCRIPT>
次<BR>录入:<A
href="http://www.acejoy.com/User/Info.Asp?UserName=admin">admin</A><BR><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right>【 <A
href="http://www.acejoy.com/Comment.asp?ChannelID=1&Action=Write&InfoID=63">评论</A>
】 【 <A
href="http://www.acejoy.com/User/SendMail.asp?Title=Windows2000 服务器端应用程序开发设计指南-存取控制(2)"
target=_blank>推荐</A> 】 【 <A href="javascript:window.print()">打印</A>
】 </TD></TR></TBODY></TABLE>
<TABLE style="CLEAR: both" width="97%" align=center>
<TBODY>
<TR>
<TD>上一篇:<A
title="标题:Windows2000 服务器端应用程序开发设计指南-存取控制(1) 作者:Jeffrey Richter Jason D. Clark 更新:2006-10-30 23:03:16 点击:606"
href="http://www.acejoy.com/Html/Article/network/6220061030230316.html">Windows2000
服务器端应用程序开发设计指南-存取控制(1)</A><BR>下一篇:<A
title="标题:Windows2000 服务器端应用程序开发设计指南-存取控制(3) 作者:Jeffrey Richter Jason D. Clark 更新:2006-10-30 23:09:41 点击:353"
href="http://www.acejoy.com/Html/Article/network/6420061030230941.html">Windows2000
服务器端应用程序开发设计指南-存取控制(3)</A> </TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE></DIV></DIV>
<DIV class=mframe>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=tl></TD>
<TD class=tm><SPAN class=tt>相关新闻</SPAN> </TD>
<TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm>
<TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<SCRIPT language=javascript
src="10.2.4 存取控制.files/GetCorrelative.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=tl></TD>
<TD class=tm><SPAN class=tt>本文评论</SPAN> </TD>
<TD class=tr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm>
<P> </P>
<TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<SCRIPT language=javascript
src="10.2.4 存取控制.files/Comment.htm"></SCRIPT>
</TD></TR></TBODY></TABLE></TD>
<TD class=mr></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center>
<TBODY>
<TR>
<TD class=ml></TD>
<TD class=mm></TD>
<TD class=mr></TD></TR></TBODY></TABLE></DIV>
<TABLE id=footer cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR style="LINE-HEIGHT: 130%" align=middle>
<TD height=23> <A
href='javascript:window.external.addFavorite("http://www.acejoy.com","ACE开发者")'><FONT
color=#000000>加入收藏</FONT></A> - <A
href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT
color=#000000>关于本站</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/Help.asp?Action=Copyright" target=_blank><FONT
color=#000000>版权申明</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT
color=#000000>联系站长</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/LinkSite.asp" target=_blank><FONT
color=#000000>友情链接</FONT></A> </TD></TR>
<TR align=middle>
<TD height=23>Copyright© 2004-2006 <A
href="http://www.acejoy.com/">http://www.acejoy.com/</A> .All Rights
Reserved <A href="http://www.miibeian.gov.cn/" target=_blank>京ICP备06055248
</A>
<SCRIPT language=JavaScript src="10.2.4 存取控制.files/stat.htm"
charset=gb2312></SCRIPT>
</TD></TR></TBODY></TABLE>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV>
<DIV></DIV><!--Powered by:CreateLive CMS Version 3.1(www.acejoy.com) CreateDate:2007-3-4 10:50:37--></DIV></DIV></DIV></DIV></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?