📄 9.1.1 信任成员的管理.htm
字号:
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>假如您正在编写一个可能呼叫Net函数的原始模组,您的原始模组及专案必须执行几个步骤。跟大部分Win
32中的API函数不同的是,Net函数不需在Windows.h的标头档中宣告。因此,您必须在模组的一开始就含入Lm.h标头档。同样地,您必须将NetApi32.lib文件加到与专案连结的程序库文件清单中。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>Net函数的其中一个特色是以一致的方式呈现。因为这个原因,才能够在不涵盖API命名集的每个单一函数的情形下,提供了解这些函数之通用规则的内容:</FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">Net函数使用Net+[信任成员类型]+[执行的动作]格式为一贯的命名。例如:NetUserAdd、NetLocalGroupGetInfo以及NetUserSetGroups。<BR
style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">Net函数只支援Unicode字串。假如您的专案以ANSI建立的话,在传递字串到Net函数前必须为每个字串缓冲器制作Unicode副本。(当在编写Windows
2000的服务器软件时,这是另一个经常使用Unicode的原因。)<BR style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">Net函数经由系统及帐户名称来识别信任成员帐户。假设您在远端机器上拥有足够的权限,便可以在远端系统上使用这些函数管理信任成员。<BR
style="LINE-HEIGHT: 25px">
<LI
style="LINE-HEIGHT: 25px">Net函数实作了一组可用来向软件回报信任成员资讯或是被软件用来设定信任成员资讯的结构。因为牵涉到许多结构的部份,所以这个Net函数的特性可能会令人感到困惑,不过了解后会非常合理且有用。<BR
style="LINE-HEIGHT: 25px"> </LI></UL></FONT>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>这里有个例子:假如您使用NetLocalGroupAdd函数(稍后将详细地讨论)来建立本机群组,您可以选择输入及传递一个LOCALGROUP_INFO_0结构的实例,只包含群组名称,或是可让您指定群组名称及注解字串的LOCALGROUP_INFO_1结构。这取决于您,而经由一个称为level参数的传递,Net函数可让您选择要使用的结构。在我们的例子中,LOCALGROUP_INFO_0为level
0结构,而LOCALGROUP_INFO_1则是level 1结构。</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>因为一个单一的函数可以取得或回传一个以上的系统定义结构类型,Net函数定义的类型为PBYTE,并根据您所传递的资讯而适当的转型。假如您传递一个结构给函数,则您应该传递此特定结构的指标,并将它转型为PBYTE。如果Net函数回传一个结构给您,此时函数将会预期为一个PBYTE的指标,您可以在稍后将它转型为适当的结构类型。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>我在这一章谈论到的结构集将以星号(*)代替level标记,以便归纳资讯而不用详细说明每个可用的结构。举例来说,在上一段所提到的两个结构都在LOCALGROUP_INFO_*
结构集中。我将会解释一些经常使用的结构以及包含较少结构成员的一些大结构。所有结构的详细说明皆可在《Platform
SDK》文件中找到。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>表9-1列出为信任成员管理所定义的结构集以及可一起使用的函数。</FONT></P></A><A
style="LINE-HEIGHT: 25px" name=403_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
color=#000000 size=2><FONT style="LINE-HEIGHT: 25px"
face=arial color=#3e80d7 size=2><B
style="LINE-HEIGHT: 25px"> 表9-1 </B></FONT>管理信任成员的结构集</FONT></TD></TR></TBODY></TABLE></CENTER>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE border=1>
<TBODY style="LINE-HEIGHT: 25px">
<TR>
<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>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>GROUP_INFO_*</FONT></TD>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>这些结构为通用或网域群组取得资讯以及设定通用群组资讯,在建立群组及对现存的群组操作时会使用到。
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> 函数: </B></FONT></P>
<P>NetGroupAdd、NetGroupEnum、NetGroupGetInfo、NetGroupSetInfo</P></FONT></TD></TR>
<TR>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>GROUP_USERS_INFO_*</FONT></TD>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>在管理通用或网域群组中的使用者成员时会使用到这些结构,可用来为群组设定或取得使用者资讯。
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> 函数: </B></FONT></P>
<P>NetGroupGetUsers、NetGroupSetUsers、NetUserGetGroups、NetUserSetGroups</P></FONT></TD></TR>
<TR>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>LOCALGROUP_INFO_*</FONT></TD>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>用来为本机群组取得以及设定资讯,不但会被现存的群组使用,在建立新的本机群组时也会用到。
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> 函数: </B></FONT></P>
<P>NetLocalGroupAdd、NetLocalGroupEnum、NetLocalGroupGetInfo、NetLocalGroupSetInfo</P></FONT></TD></TR>
<TR>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>LOCALGROUP_MEMBERS_INFO_*</FONT></TD>
<TD><FONT style="LINE-HEIGHT: 25px" size=2>用来为本机群组设定及取得成员清单。
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> 函数: </B></FONT></P>
<P>NetLocalGroupAddMembers、NetLocalGroupDelMembers、NetLocalGroupGetMembers、NetLocalGroupSetMembers</P></FONT></TD></TR>
<TR>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>LOCALGROUP_USERS_INFO_*</FONT></TD>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>此组结构只包含一个称为LOCALGROUP_
USERS_INFO_0的结构,呼叫NetUserGet-Local
Groups以取得本机群组成员之所有使用者帐户清单时使用。
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e80d7
size=2><B
style="LINE-HEIGHT: 25px"> 函数: </B></FONT></P>
<P>NetUserGetLocalGroups</P></FONT></TD></TR>
<TR>
<TD><FONT style="LINE-HEIGHT: 25px"
size=2>USER_INFO_*</FONT></TD>
<TD><FONT style="LINE-HEIGHT: 25px" size=2>由于Windows
2000使用者帐户联系的大量资讯,此组结构显然包含了最大的结构数量。建立使用者以及为现存使用者帐户取得和设定资讯时会使用到这些结构。
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>函数:</FONT></P>
<P>NetUserAdd、NetUserEnum、NetUserSetInfo、NetUserGetInfo</P></FONT></TD></TR></TBODY></TABLE></CENTER>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>当Net函数将有关信任成员的资讯回传到软件时,它将指派一个缓冲器给您。如前所述,Net函数需要您传递指标位址到转型成PBYTE*
的适当结构类型中。当您用完系统传回的缓冲器后,应该将它传递到NetApiBufferFree,以释放缓冲器。这个函数定义如下:</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">NET_API_STATUS NetApiBufferFree(PVOID pvBuffer);</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在设定信任成员资讯时,Net函数可能会判定软件并没有正确地设定结构成员。在这个情况下,「Set」函数(如NetUserSetInfo)会回传ERROR_INVALID_PARAMETER。为了确定错误的原因,您可以使用函数的错误参数,这个参数会被填入一个事先定义的值,以指出第一个导致错误的结构成员。假如您对这个资讯不感兴趣,可以传递NULL给「Set」函数。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>有了Net函数的常识,您将发现学习这些细节是件轻而易举的事。所以,让我们开始建立信任成员帐户吧!</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7
size=4><B style="LINE-HEIGHT: 25px">建立信任成员帐户<BR
style="LINE-HEIGHT: 25px"> </B></FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>就使用者及群组帐户在系统中控制存取安全物件的角色,以及系统权限的功能来说是类似的。系统可让您交替地指派以及否决使用者和群组帐户的权限。然而,使用者可以利用使用者帐户登入系统,反之,群组帐户却无法以这种方式使用。这种与使用者结合的情形,使得系统必须为使用者帐户维护大量的资讯。</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>网域或通用群组帐户在很多观念及软件上皆与本机群组帐户一样。尽管我从这里开始将讨论本机群组的管理细节,但是在计划性地管理通用群组时,许多观念还是适用的。有关Net
API通用群组功能的完整讨论,请参阅《Platform SDK》文件中字首为「NetGroup」的函数组。</FONT></P>
<HR style="LINE-HEIGHT: 25px">
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>您可以使用NetLocalGroupAdd函数来建立本机群组帐户,其原型如下:</FONT></P>
<DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT
style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">NET_API_STATUS NetLocalGroupAdd( <BR> PCWSTR pstrServername, <BR> DWORD dwLevel, <BR> PBYTE pbBuf, <BR> PDWORD pdwParmErr);</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>第一个参数是您想建立之群组帐户的系统名称。传递NULL给pstrServername表示您希望在本机系统上建立一个群组。dwLevel参数指出您将传递给pbBuf参数作为参考的结构类型。NetLocalGroupAdd使用 </FONT><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A
style="LINE-HEIGHT: 25px"
href="http://www.acejoy.com/doc/serverside/9.htm#403_1"
target=_new>表9-1</A> 中所讨论的LOCALGROUP_INFO_*
结构集。您可以传递0或者1以作为此函数的level值。这两个结构的定义如下:</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 _LOCALGROUP_INFO_0 { <BR> PWSTR lgrpi0_name; <BR>}LOCALGROUP_INFO_0; <BR>typedef struct _LOCALGROUP_INFO_1 { <BR>PWSTR lgrpi0_name; <BR>PWSTR lgrpi0_comment; <BR>}LOCALGROUP_INFO_1;</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>以上两个结构都包含一个群组名称字串的指标,LOCALGROUP_INFO_1结构还包含一个注解字串的附加指标。当您在建立群组时,这两个结构都可以使用。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>最后一个传递给NetLocalGroupAdd的参数是pdwParmErr,是个DWORD的指标。对于不适当的参数,系统传回一个指出在pdwParmErr参考的变数中,不适当的参数值。只有NetLocalGroupAdd的传回值等于ERROR_INVALID_PARAMETER时,传回pdwParmErr的值才有效。表9-2列出这些可能的值。假如您不想要收到这些资讯,可以传递NULL给pdwParmErr。</FONT></P>
<CENTER style="LINE-HEIGHT: 25px">
<TABLE border=0>
<TBODY style="LINE-HEIGHT: 25px">
<TR>
<TD 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -