⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9.2.1 信任成员的管理.htm

📁 Windows2000后台服务程序开发手册
💻 HTM
📖 第 1 页 / 共 4 页
字号:
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Everyone</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出一个所有信任成员皆为暗示性成员的群组。这是一个非常重要的SID,对于在系统中建立安全物件的存取清单是有帮助的。它也就是World 
                  SID或World群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-2-0</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Local SID</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出一个包括所有本地或实际登入系统的使用者群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-3-0</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Creator Owner 
                  SID</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>为某个物件的建立者充当替代符号(Placeholder)。它与可继承的存取控制清单一起使用。您将在第十章找到更多有关此SID的资讯。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-3-1</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Creator Group 
                  SID</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>为某个物件的主要群组建立者充当替代符号。它与可继承的存取控制清单一起使用。您将在第十章找到更多有关此SID的资讯。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-1</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Dialup</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出当使用者帐户经由拨接登入Windows 
                2000系统时,所有使用者帐户自动成为成员的群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-2</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Network</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出当使用者帐户经由网路登入Windows 
                2000系统时,所有使用者帐户自动成为成员的群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-3</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Batch</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出当使用者帐户经由批次登入的方式登入Windows 
                  2000系统时,所有使用者帐户自动成为成员的群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-4</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>Interactive</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出当使用者帐户经由互动式登入Windows 
                2000系统时,所有使用者帐户自动成为成员的群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-6</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Service</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出当使用者帐户以服务的身分登入Windows 
                2000系统时,所有使用者帐户自动成为成员的群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-7</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>AnonymousLogon</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>与无效的会议登入结合。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-9</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>ServerLogon</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>与网域控制站帐户结合。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-10</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Self(或Principal 
                  Self)</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>充当替代符号,并且只适用于存取群组或使用者帐户的清单。当它出现时,指出存取清单申请的信任成员帐户。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-11</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Authenticated 
                  User</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>使用者指出一个所有目前被认证的使用者帐户是暗示性成员的群组。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-13</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>Terminal 
                  Server</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>与登入终端服务器的使用者关联。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" size=2>S-1-5-18</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>LocalSystem</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>这个有许多服务皆在其下执行的特别帐户,存在于所有的Windows 
                  2000系统中。有关更多的资讯,请参阅&nbsp;<A style="LINE-HEIGHT: 25px" 
                  href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_211.xml#" 
                  target=_new>第十一章</A>&nbsp;。</FONT></TD></TR></TBODY></TABLE></CENTER>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您偶尔才会看到这些SIDs。熟悉这些系统内建的信任成员是好的,SID本身的资料结构定义如下:</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 _SID {&nbsp;&nbsp;<BR> BYTE Revision;&nbsp;&nbsp;<BR> BYTE SubAuthorityCount;&nbsp;&nbsp;<BR> SID_IDENTIFIER_AUTHORITY IdentifierAuthority;&nbsp;&nbsp;<BR> DWORD SubAuthority[ANYSIZE_ARRAY];&nbsp;&nbsp;<BR>}SID;</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>这个结构的每个成员现在对您来说应该是熟悉的。ANYSIZE_ARRAY定义为1,主要是表示结构不一定仅以单一的DWORD代表一个次要授权单位以作为结尾。尽管SID结构的本身非常清楚,它是个「不透明的」资料结构,而且应该只使用提供的系统函数来操作。这个不透明特性给予Microsoft开发人员在未来改变SID内部结构的自由。您的软件应该跟随这个规则。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7 
            size=4><B style="LINE-HEIGHT: 25px">建立SIDs<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您通常会为众所周知的信任成员建立SIDs,例如Everyone群组。您会经由查询授权单位及信任成员的值来为讨论中的信任成员建立一个SID,并且将它们传递给AllocateAndInitializeSid函数:</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 AllocateAndInitializeSid(&nbsp;&nbsp;<BR> PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,&nbsp;&nbsp;<BR> BYTE nSubAuthorityCount,&nbsp;&nbsp;<BR> DWORD dwSubAuthority0,&nbsp;&nbsp;<BR> DWORD dwSubAuthority1,&nbsp;&nbsp;<BR> DWORD dwSubAuthority2,&nbsp;&nbsp;<BR> DWORD dwSubAuthority3,&nbsp;&nbsp;<BR> DWORD dwSubAuthority4,&nbsp;&nbsp;<BR> DWORD dwSubAuthority5,&nbsp;&nbsp;<BR> DWORD dwSubAuthority6,&nbsp;&nbsp;<BR> DWORD dwSubAuthority7,&nbsp;&nbsp;<BR> PSID* ppSid);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您应该认识这些参数的用途,值得一提的是,第一个PidentifierAuthority参数,该参数为您正在建立的SID识别授权单位的值。PidentifierAuthority参数是SID_IDENTIFIER_AUTHORITY的类型,被定义为6个位元组的阵列。这看起来有点棘手,但值得庆幸的是《Platform 
            SDK》文件定义了这些有用的SID授权单位。您应该传递表9-6中显示的其中一个值,例如SECURITY_NT_AUTHORITY。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>第二个值得注意的参数为nSubAuthorityCount,指出您为SID请求的次要授权单位数量。尽管系统已经定义这个值SID_MAX_SUB_AUTHORITIE为15,AllocateAndInitializeSid将只会以8或更少的次要授权单位来建立SIDs。</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>不管AllocateAndInitializeSid的限制,还是应该把SIDs当成可为任意大小的情形(即避免静态缓冲器)。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>接下来的八个参数为您新的SID指出次要授权单位。我常想知道为什么Microsoft的开发人员不选择将这些参数合并成为DWORD阵列的单一指标。无论如何,您应该传递给次要授权单位的值和您需要的一样多,并且传递0给剩馀的参数。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>最后一个参数ppSid,值得额外的注意。它被定义为PSID*,是个指向SID指标的指标。和大部分Windows所提供的函数不同,AllocateAndInitializeSid会指派一个缓冲器给您,而非等待您提供一个缓冲器。被指派的内存位址则经由这个参数传回。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>假如AllocateAndInitializeSid传回FALSE,表示您很有可能传递了一个大于8的次要授权单位数量。因为这个函数会指派内存给您,所以另一个失败的原因可能是产生内存不足的情形。假如AllocateAndInitilizeSid执行成功,PSID变数将会包含一个指向新SID的指标。当您完成SID后,应该把它传递给FreeSid,以使系统可以释放SID所使用的内存:</FONT></P>
            <DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT 
            style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">PVOID FreeSid(PSID pSid);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>使用AllocateAndInitializeSid,您不但可以建立众所周知的SIDs,也可以建立一个使您的软件能辨别授权单位及次要授权单位数值的动态SIDs。以下的范例显示了如何使用此函数建立一个代表Everyone群组的SID:</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 BuildEveryoneSid(){&nbsp;&nbsp;<BR> SID_IDENTIFIER_AUTHORITY auth = SECURITY_WORLD_SID_AUTHORITY;&nbsp;&nbsp;<BR> PSID pSID = NULL;&nbsp;&nbsp;<BR> BOOL fSuccess = AllocateAndInitializeSid(&amp;auth, 1,&nbsp;&nbsp;<BR>&nbsp;&nbsp;SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &amp;pSID);&nbsp;&nbsp;<BR> return(fSuccess ? pSID : NULL);&nbsp;&nbsp;<BR>}</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>一旦您完成了此函数传回的SID后,必须将它的指标传递到FreeSid函数。您可以轻易地修改这个函数,并经由改变auth变数的初始值,以及传递不同的RID到AllocateAndInitializeSid,以建立另一个SID。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7 
            size=4><B style="LINE-HEIGHT: 25px">信任成员名称及二进制的SID转换<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>信任成员帐户名称及二进制SIDs之间的转换是您经常需要执行的有用工作,系统提供两个可以执行这些工作的函数,这些函数有令人困惑的名称,所以这是记得哪个是哪个的最佳方式:</FONT></P><FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
            <UL style="LINE-HEIGHT: 25px">
              <LI 
              style="LINE-HEIGHT: 25px">假如您有一个信任成员的帐户名称,但是却需要一个二进制的SID,此时您可以呼叫LookupAccountName。<BR 
              style="LINE-HEIGHT: 25px">  
              <LI 
              style="LINE-HEIGHT: 25px">相反地,假如您有一个二进制的SID,但是却需要一个信任成员的帐户名称时,您可以呼叫LookupAccountSid。<BR 
              style="LINE-HEIGHT: 25px">  </LI></UL></FONT>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>如您所见,这些函数的名称就是您已经拥有的资讯。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e74d7 
            size=3><B style="LINE-HEIGHT: 25px">撷取信任成员的二进制SID<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>LookupAccountName的函数原型如下:</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 LookupAccountName(&nbsp;&nbsp;<BR> PCTSTR pszSystemName,&nbsp;&nbsp;<BR> PCTSTR pszAccountName,&nbsp;&nbsp;<BR> PSID pSid,&nbsp;&nbsp;<BR> PDWORD pcbSid,&nbsp;&nbsp;<BR> PTSTR pszReferencedDomainName,&nbsp;&nbsp;<BR> PDWORD pcbReferencedDomainName,&nbsp;&nbsp;<BR> PSID_NAME_USE peUse);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>PszSystemName参数是系统名称,您想要在这个系统上查询pszAccountName参数中所指定的名称。您可以传递NULL给pszSystemName参数,以指出本地机器。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您应该在内存中传递一个指向足够为pSid参数所需之SID缓冲器指标,以及一个DWORD位址,包含作为pcbSid参数的缓冲器大小。假如您的缓冲器太小,系统将传回失败,而且GetLastError函数会传回ERROR_INSUFFICIENT_ 
            BUFFER。LookupAccountName也将透过pcbSid参数以缓冲器应有的大小填满您提供的DWORD变数。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>PszReferenced网域Name及pcbReferenced网域Name分别为缓冲器接收与帐户相关的网域名称,以及一个指向包含大小的DWORD变数指标。即使是不需要与信任成员相关的网域名称,也不能传递NULL给任何一个值。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您应该传递SID_NAME_USE变数的位址以作为peUse参数。LookupAccount 
            Name将传回一个经由peUse指向变数中的值,它指出已经传回给您的SID类型。表9-9列出这些可能的值。</FONT></P></A><A 
            style="LINE-HEIGHT: 25px" name=431_1></A>
            <CENTER style="LINE-HEIGHT: 25px">
            <TABLE border=0>
              <TBODY style="LINE-HEIGHT: 25px">
              <TR>
                <TD align=middle><FONT style="LINE-HEIGHT: 25px" face=arial 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -