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标记,请参阅&nbsp;<A 
            style="LINE-HEIGHT: 25px" 
            href="http://www.acejoy.com/doc/serverside/10.htm#457_1" 
            target=_new>表10-11</A>&nbsp;的说明。您不应传递指出稽核类型的标记给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 ;&nbsp;&nbsp;<BR>// 为内建的「Everyone」群组建立一个SID <BR>SID_IDENTIFIER_AUTHORITY sidAuth = SECURITY_WORLD_SID_AUTHORITY; <BR>if (!AllocateAndInitializeSid( &amp;sidAuth, 1, SECURITY_WORLD_RID, <BR> 0, 0, 0, 0, 0, 0, 0, &amp;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(&amp;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>&nbsp;&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/6320061030230615.html">[1]</A>&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/6320061030230615_P2.html">[2]</A>&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/6320061030230615_P3.html">[3]</A>&nbsp;<STRONG><FONT 
            color=#ff0033>[4]</FONT></STRONG>&nbsp;</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&amp;Action=Write&amp;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)&#13;&#10;作者:Jeffrey Richter Jason D. Clark&#13;&#10;更新:2006-10-30 23:03:16&#13;&#10;点击:606" 
            href="http://www.acejoy.com/Html/Article/network/6220061030230316.html">Windows2000 
            服务器端应用程序开发设计指南-存取控制(1)</A><BR>下一篇:<A 
            title="标题:Windows2000 服务器端应用程序开发设计指南-存取控制(3)&#13;&#10;作者:Jeffrey Richter Jason D. Clark&#13;&#10;更新:2006-10-30 23:09:41&#13;&#10;点击: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>&nbsp;</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>&nbsp;<A 
      href='javascript:window.external.addFavorite("http://www.acejoy.com","ACE开发者")'><FONT 
      color=#000000>加入收藏</FONT></A>&nbsp;- &nbsp;<A 
      href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT 
      color=#000000>关于本站</FONT></A>&nbsp;- &nbsp;<A class=Bottom 
      href="http://www.acejoy.com/Help.asp?Action=Copyright" target=_blank><FONT 
      color=#000000>版权申明</FONT></A>&nbsp;- &nbsp;<A class=Bottom 
      href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT 
      color=#000000>联系站长</FONT></A>&nbsp;- &nbsp;<A class=Bottom 
      href="http://www.acejoy.com/LinkSite.asp" target=_blank><FONT 
      color=#000000>友情链接</FONT></A>&nbsp;&nbsp; </TD></TR>
  <TR align=middle>
    <TD height=23>Copyright&copy; 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 + -
显示快捷键?