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

📄 11.1 使用者环境.htm

📁 Windows2000后台服务程序开发手册
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  size=2>在呼叫AdjustTokenGroups中要求。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_ADJUST_PRIVILEGES</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>在呼叫AdjustTokenPrivileges中要求。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_ADJUST_SESSIONID</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>要求调整权杖的工作阶段ID以及SE_TCB_NAME权限。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_ASSIGN_PRIMARY</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>在呼叫CreateProcessAsUser中使用权杖时要求。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_DUPLICATE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
size=2>要求复制权杖。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>TOKEN_EXECUTE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>等于STANDARD_RIGHTS_EXECUTE。有关标准权利更进一步的讨论,请参阅&nbsp;<A 
                  style="LINE-HEIGHT: 25px" 
                  href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_210.xml#" 
                  target=_new>第十章</A>&nbsp;。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_IMPERSONATE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>要求与ImpersonateLoggedOnUser一起使用这个权杖。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>TOKEN_QUERY</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>要求读取任何的权杖资讯,除了使用GetTokenInformation读取它的来源外。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_QUERY_SOURCE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>要求使用GetTokenInformation读取权杖的来源。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
size=2>TOKEN_READ</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>结合STANDARD_RIGHTS_READ及TOKEN_QUERY。有关标准权利之更进一步讨论,请参阅&nbsp;<A 
                  style="LINE-HEIGHT: 25px" 
                  href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_210.xml#" 
                  target=_new>第十章</A>&nbsp;。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                size=2>TOKEN_WRITE</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>结合STANDARD_RIGHTS_WRITE、TOKEN_ADJUST_ 
                  PRIVILEGES、TOKEN_ADJUST_GROUPS及TOKEN_ADJUST_DEFAULT。有关标准权利之更进一步讨论,请参阅&nbsp;<A 
                  style="LINE-HEIGHT: 25px" 
                  href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_210.xml#" 
                  target=_new>第十章</A>&nbsp;。</FONT></TD></TR>
              <TR>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>TOKEN_ALL_ACCESS</FONT></TD>
                <TD><FONT style="LINE-HEIGHT: 25px" 
                  size=2>完整的存取权杖,结合了所有的权利。</FONT></TD></TR></TBODY></TABLE></CENTER>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>OpenProcessToken执行失败的可能原因是存取权利不够;然而,假如您的服务在本机帐户使用者环境中执行,或许它对任何程序的权杖皆会拥有足够的存取(有关存取控制之更多资讯,请参阅&nbsp;</FONT><FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A 
            style="LINE-HEIGHT: 25px" 
            href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_210.xml#" 
            target=_new>第十章</A>&nbsp;)。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>权杖物件是一个核心物件,而且跟最核心的物件一样,当您结束使用资源时,应该传递权杖物件的handle到CloseHandle中。</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>当您呼叫OpenProcessToken时收到的handle即是权杖的handle,它会影响该处理程序的使用者环境。调整权杖时所做的任何事,皆会严重且立即影响撷取权杖的处理程序之安全行为。稍后马上会讨论到可对权杖做些什么。有关如何获得处理程序handle的资讯(除了当前的程序外),请参阅《Programming 
            Applications for Microsoft Windows, Fourth Edition (Jeffrey Richter, 
            Microsoft Press, 1999)》一书之第二十二章有关OpenProcess的讨论。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>假如您认为一定也有一个获得线程权杖的方法(假定线程在那时是模拟的),那么您是正确的。您可以使用OpenThreadToken:</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 OpenThreadToken( <BR> HANDLE hThreadHandle, <BR> DWORD dwDesiredAccess, <BR> BOOL fOpenAsSelf, <BR> PHANDLE phTokenHandle);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>注意,OpenThreadToken与OpenProcessToken非常相似,除了第一个参数是线程而非处理程序的handle外,它拥有附加的参数fOpenAsSelf。这个参数向系统指出您想要 
            为谁 开启权杖,让我来做个说明。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>请记住当您呼叫OpenThreadToken时,会要求一个Windows中的安全物件-即权杖。这意味着您可能或不可能拥有物件的存取权。您也应该记住除了处理程序的安全性环境外,也能够在可以被模拟成安全性环境的线程中执行。因为当它为模拟时,撷取自己的权杖handle之线程是非常常见的,系统可根据您的处理程序权杖指出开启一个线程权杖在执行时所需的所有存取检查。假如您想要对程序权杖执行存取检查时,应该传递TRUE给OpenThreadToken的fOpenAsSelf参数。假如您想对您的线程模拟权杖执行存取检查时,应该传递FALSE。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>假如您的线程现在没有模拟,这些参数就没有意义(本章稍后将讨论更多模拟的细节)。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>就像OpenProcessToken一样, 
            OpenThreadToken的phTokenHandle参数会传回要求的权杖handle。假如OpenThreadToken的传回值为TRUE,表示此函数成功;否则函数失败,您可以呼叫GetLastError得到更多资讯。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>假如线程没有模拟时,OpenThreadToken函数将失败而且GetLastError将传回ERROR_NO_TOKEN。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您现在拥有了权杖的handle。您可能会问,可以对它作什么事呢?请继续读下去。</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>表格11-1列出的大部分权杖资讯也可以从权杖中读取,假定呼叫的程序代码拥有对物件的TOKEN_QUERY(或是TOKEN_QUERY_SOURCE)存取权。您应该使用GetTokenInformation函数找出权杖的内容:</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 GetTokenInformation( <BR> HANDLE hTokenHandle, <BR> TOKEN_INFORMATION_CLASS tokenInformationClass, <BR> PVOID pTokenInformation, <BR> DWORD dwTokenInformationLength, <BR> PDWORD pdwReturnLength);</PRE></FONT></DIV>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您应该传递权杖的handle为hTokenHandle参数。 
            tokenInformationClass参数指出您想从权杖获得的资讯,而pTokenInformation参数是指向缓冲器的指标,缓冲器填满要求的资讯。dwTokenInformationLength参数指出您传递的缓冲器长度,而pdwReturnLength参数指向一个收到撷取资讯必需的缓冲器大小的变数。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>依据tokenInformationClass参数,经由pTokenInformation参数指向多种的缓冲器型别。以下的清单叙述您可从权杖中撷取的资讯:资讯类别值及使用的资料类型(TOKEN_INFORMATION_CLASS也与SetTokenInformation函数一起使用,在本章稍后讨论)。</FONT></P><FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2>
            <UL style="LINE-HEIGHT: 25px">
              <LI style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
              face=arial color=#3e80d7 size=2><B 
              style="LINE-HEIGHT: 25px">&nbsp;TokenUser&nbsp;</B></FONT>传回权杖使用者的SID。登入系统时,帐户名称被用来建立权杖的使用者(这个值不与SetTokenInformation一起使用)。<BR 
              style="LINE-HEIGHT: 25px">  
              <DIV style="LINE-HEIGHT: 25px; BACKGROUND-COLOR: #d7d7d7"><FONT 
              style="LINE-HEIGHT: 25px" face=Arial size=3><PRE style="LINE-HEIGHT: 25px">typedef struct _TOKEN_USER { <BR> SID_AND_ATTRIBUTES User; <BR>}TOKEN_USER;</PRE></FONT></DIV>
              <LI style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
              face=arial color=#3e80d7 size=2><B 
              style="LINE-HEIGHT: 25px">&nbsp;TokenDefaultDacl&nbsp;</B></FONT>用来读取或设定权杖的预设DACL。有关预设DACLs之更进一步讨论以及建立DACL的详细讨论,请参阅&nbsp;<A 
              style="LINE-HEIGHT: 25px" 
              href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_210.xml#" 
              target=_new>第十章</A>&nbsp;的内容。在DACL中设定资讯时需要拥有TOKEN_ADJUST_ 
              DEFAULT存取权利。<BR style="LINE-HEIGHT: 25px">  

⌨️ 快捷键说明

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