10.2.3 存取控制.htm

来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 461 行 · 第 1/3 页

HTM
461
字号
            size=2>建立DACL时,您通常会跟随以下的步骤:</FONT></P><FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
            <OL style="LINE-HEIGHT: 25px">
              <LI style="LINE-HEIGHT: 25px">收集您为DACL建立ACEs之信任成员的SIDs。 
              <LI style="LINE-HEIGHT: 25px">经由SIDs使用的大小及您使用的ACE结构大小来计算新DACL的大小。 
              <LI style="LINE-HEIGHT: 25px">为DACL分配内存。 
              <LI style="LINE-HEIGHT: 25px">初始化DACL。 
              <LI 
              style="LINE-HEIGHT: 25px">使用SIDs将ACEs加入DACL,注意在加入允许存取ACEs之前,先加入拒绝存取ACEs。 
              </LI></OL></FONT>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>对于现存的对象,您将会使用到「SetSecurity」函数的其中一个,以把新的DACL应用于对象。对大部分的新对象来说,在呼叫一个建立函数时(如CreateEvent或CreateFile),您也被要求建立及初始化安全描述项及传递一个安全属性结构。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>建立DACL最复杂的部分是计算它的大小,CalculateACLSize范例应用程序显示了其方法。使用这个函数,您会传递一个指向SIDs的指标阵列,它被用来计算新DACL所需的大小。我也包含了一个指向现存DACL的选择性指标,若为NULL,它会被忽视,若不是NULL,则会把ACEs的大小加入现存的DACL,然后把现存DACL建立的新DACL大小给您。我马上会谈论到更多,但是现在,请察看CalculateACLSize函数的内容。</FONT></P>
            <DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT 
            style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">ULONG CalculateACLSize( PACL pACLOld, PSID* ppSidArray, int nNumSids,&nbsp;&nbsp;<BR> PACE_UNION* ppACEs, int nNumACEs ){ <BR> ULONG lACLSize = 0; <BR> try{ <BR>&nbsp;&nbsp;// 假如我们包括一个现存的ACL,那么找出它的大小 <BR>&nbsp;&nbsp;if (pACLOld != NULL){ <BR>&nbsp;&nbsp; ACL_SIZE_INFORMATION aclSize; <BR>&nbsp;&nbsp; if(!GetAclInformation(pACLOld, &amp;aclSize, sizeof(aclSize), <BR>&nbsp;&nbsp;&nbsp;&nbsp;AclSizeInformation)){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;goto leave; <BR>&nbsp;&nbsp; } <BR>&nbsp;&nbsp; lACLSize = aclSize.AclBytesInUse; <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;if (ppSidArray != NULL){ <BR>&nbsp;&nbsp; // 逐步浏览每个SID <BR>&nbsp;&nbsp; while (nNumSids--){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;// 假如SID无效,那么就跳出 <BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!IsValidSid(ppSidArray[nNumSids])){ <BR>&nbsp;&nbsp;&nbsp;&nbsp; lACLSize = 0; <BR>&nbsp;&nbsp;&nbsp;&nbsp; goto leave; <BR>&nbsp;&nbsp;&nbsp;&nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp;// 取得SID的长度 <BR>&nbsp;&nbsp;&nbsp;&nbsp;lACLSize += GetLengthSid(ppSidArray[nNumSids]); <BR>&nbsp;&nbsp;&nbsp;&nbsp;// 加入ACE结构大小,减去 <BR>&nbsp;&nbsp;&nbsp;&nbsp;// SidStart成员的大小 <BR>&nbsp;&nbsp;&nbsp;&nbsp;lACLSize += sizeof(ACCESS_ALLOWED_ACE)- <BR>&nbsp;&nbsp;&nbsp;&nbsp; sizeof(((ACCESS_ALLOWED_ACE*)0)-&gt;SidStart); <BR>&nbsp;&nbsp; } <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;if (ppACEs != NULL){ <BR>&nbsp;&nbsp; // 逐步浏览每个ACE <BR>&nbsp;&nbsp; while (nNumACEs--){ <BR>&nbsp;&nbsp;&nbsp;&nbsp;// 取得SIDs长度 <BR>&nbsp;&nbsp;&nbsp;&nbsp;lACLSize += ppACEs[nNumACEs]-&gt;aceHeader.AceSize; <BR>&nbsp;&nbsp; } <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;// 加入ACL结构本身 <BR>&nbsp;&nbsp;lACLSize += sizeof(ACL); <BR> leave:; <BR> }catch(...){ <BR>&nbsp;&nbsp;// 例外意味着我们这个函数失败 <BR>&nbsp;&nbsp;lACLSize = 0; <BR> } <BR> return (lACLSize); <BR>}</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>CalculateACLSize函数使用了ACCESS_ALLOWED_ACE结构的大小,它为所有标准的ACE类型工作。假如该函数包含了对象ACE类型,将无法正确地计算ACL大小。为了要正确地计算大小,请将这个函数中所提的ACCESS_ALLOWED_ACE完全取代成对象ACE结构,例如ACCESS_ALLOWED_OBJECT_ACE。关于对象ACEs的讨论,请参阅本章稍早的〈&nbsp;<A 
            style="LINE-HEIGHT: 25px" 
            href="http://www.acejoy.com/doc/serverside/10.htm#521_1" 
            target=_new>对象ACEs</A>&nbsp;〉一节。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>当您使用如CalculateACLSize的函数时,找出建立一个新的ACL所需要的内存总数是件简单的任务。您应该使用从函数传回的值,用new、HeapAlloc或malloc配置器(Allocator)去分配内存。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>在您拥有新ACL的内存后,应该使用InitializeAcl初始化ACL:</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 InitializeAcl( <BR> PACL pACL, <BR> DWORD dwAclLength, <BR> DWORD dwAclRevision);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>InitializeAcl是个非常简单的函数,它设定了ACL及ACL修订结构中的缓冲器长度。您应该传递ACL_REVISION给dwAclRevision参数。ACL也可以有ACL_REVISION_DS的修订,它指出ACL包含对象ACEs。然而,您不必明确地设定这个修订部份,因为当您把对象ACEs加入ACL时,系统就会更新ACL的修订内容。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>在呼叫InitializeAcl后,您的内存缓冲器会包含一个空的ACL,而没有ACEs。假如您想要从现存ACL中移除所有ACEs,也可以使用InitializeAcl。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>现在您准备开始把ACEs加入空的ACL中。假定您已经正确地计算已完成的ACL大小,则加入ACEs的方法应该和为拒绝存取ACEs重复呼叫AddAccessDeniedAceEx一样简单,接着可以为您的所有允许存取ACEs呼叫AddAccessAllowedAceEx。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>AddAccessDeniedAceEx及AddAccessAllowedAceEx会建立适当类型的ACEs并把它们加入DACL的尾端(假定伴随着ACE的DACL还有空间)。</FONT></P< 
            p>
            <P class=content_page><A 
            href="http://www.acejoy.com/Html/Article/network/6320061030230615_P2.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;<STRONG><FONT 
            color=#ff0033>[3]</FONT></STRONG>&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/6320061030230615_P4.html">[4]</A>&nbsp;&nbsp;<A 
            href="http://www.acejoy.com/Html/Article/network/6320061030230615_P4.html">下一页</A></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.3 存取控制.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.3 存取控制.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.3 存取控制.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.3 存取控制.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 + -
显示快捷键?