📄 11.2 使用者环境.htm
字号:
href="http://www.acejoy.com/doc/serverside/11.htm#579-1"
target=_new>TokenMaster范例应用程序</A> 的内容。</FO, NT></FONT></P><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A
style="LINE-HEIGHT: 25px" name=211004></A>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e70d7
size=5><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>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>以下有两种方法:</FONT></P><FONT style="LINE-HEIGHT: 25px" face=arial
color=#000000 size=2>
<UL style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">用新的权杖建立一个新的程序。<BR
style="LINE-HEIGHT: 25px">
<LI style="LINE-HEIGHT: 25px">用您程序中的线程模拟一个权杖。<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=#000000
size=2>使用权杖建立一个程序时,应该呼叫CreateProcessAsUser:</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 CreateProcessAsUser( <BR> HANDLE hToken, <BR> PCTSTR pszApplicationName, <BR> PTSTR pszCommandLine, <BR> PSECURITY_ATTRIBUTES psaProcessAttributes, <BR> PSECURIT, Y_ATTRIBUTES psaThreadAttributes, <BR> BOOL fInheritHandles, <BR> DWORD dwCreationFlags, <BR> PVOID pEnvironment, <BR> PCTSTR pszCurrentDirectory, <BR> PSTARTUPINFO pStartupInfo, <BR> PPROCESS_INFORMATION pProcessInformation);</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>除了第一个hToken参数外,
CreateProcessAsUser与CreateProcess的参数完全相同,它接收使用者环境的主要权杖,新的处理程序将在这个使用者环境下执行(有关CreateProcess的广泛讨论,请参考《Programming
Applications for Microsoft Windows, Fourth
Edition》一书的内容)。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>现在让我们看看它们的差别。假如新的处理程序被建立,则Create
ProcessAsUser会传回TRUE,反之,函数执行失败则传回FALSE。在叁种常见的情形下,CreateProcessAsUser可能会执行失败,而CreateProcess则不会。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在第一个案例中,呼叫处理程序可能没有可执行的文件或可执行之文件目录的存取权。在本机帐户中执行的服务不太可能会碰到这个问题,虽然它的确有可能发生。为了避开这个问题,您必须暂时模拟经由传递到CreateProcessAsUser的相同权杖建立新处理程序的使用者。这种暂时的模拟必需在呼叫CreateProcessAsUser前完成。当然,如果新的使用者没有可执行档或目录的存取权,则函数执行失败。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在第二个案例中,CreateProcessAsUser要求呼叫的程序拥有被授予权杖的SE_ASSIGNPRIMARYTOKEN_NAME及SE_INCREASE_QUOTA_NAME权限。这个规则的例外是案例中传递给CreateProcessAsUser的权杖,它是一个用呼叫程序权杖建立的受限权杖。在这种情况下,不需要SE_ASSIGNPRIMARYTOKEN_NAME权限(使用受限权杖是个非常强大的技巧,本章稍后会讨论一些细节)。这个情形的理由是受限权杖拥有比当前程序还少的系统存取权。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>在第二个案例中,当传递给hToken参数的权杖不是一个主要的权杖时,CreateProcessAsUser会执行失败。假如您持有一个模拟权杖的handle,则您可以呼叫DuplicateTokenEx将它转变成主要的权杖:</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 DuplicateTokenEx( <BR> HANDLE hExistingToken, <BR> DWORD dwDesiredAccess, <BR> PSECURITY_ATTRIBUTES pTokenAttributes, <BR> SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, <BR> TOKEN_TYPE TokenType, <BR> PHANDLE phNewToken);</PRE></FONT></DIV>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>hExistingToken参数是您要复制的权杖。这个权杖可以是主要权杖或是模拟权杖。就新的权杖而言,dwDesiredAccess参数指出您想要的存取权。您应该只要求完成手边工作所需要的权利即可。有关存取权利清单,请参阅 </FONT><FONT
style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A
style="LINE-HEIGHT: 25px"
href="http://www.acejoy.com/doc/serverside/11.htm#591_1"
target=_new>表格11-2</A> 。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>pTokenAttributes参数指出新权杖的安全描述项及其继承属性。不要把这个参数与权杖的预设DACL混淆了-此参数为新的物件设定存取控制(安全描述项及存取控制在 <A
style="LINE-HEIGHT: 25px"
href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_210.xml#"
target=_new>第十章</A> 有详细地讨论)。</FONT></P>
<P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000
size=2>ImpersonationLevel参数指出新权杖的模拟等级,它可以是表格11-3中的任何值。</FONT></P><A
style="LINE-HEIGHT: 25px" name=591-1></A>
<CENTER style="LINE-HEIGHT: 25px">
<P></P>
<P class=content_page><A
href="http://www.acejoy.com/Html/Article/network/6520061102101703.html">上一页</A> <A
href="http://www.acejoy.com/Html/Article/network/6520061102101703.html">[1]</A> <STRONG><FONT
color=#ff0033>[2]</FONT></STRONG> <A
href="http://www.acejoy.com/Html/Article/network/6520061102101703_P3.html">[3]</A> <A
href="http://www.acejoy.com/Html/Article/network/6520061102101703_P4.html">[4]</A> <A
href="http://www.acejoy.com/Html/Article/network/6520061102101703_P5.html">[5]</A> <A
href="http://www.acejoy.com/Html/Article/network/6520061102101703_P3.html">下一页</A></P></DIV><BR><BR></CENTER></FONT></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="11.2 使用者环境.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&Action=Write&InfoID=65">评论</A>
】 【 <A
href="http://www.acejoy.com/User/SendMail.asp?Title=Windows2000 服务器端应用程序开发设计指南-使用者环境"
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 服务器端应用程序开发设计指南-存取控制(3) 作者:Jeffrey Richter Jason D. Clark 更新:2006-10-30 23:09:41 点击:353"
href="http://www.acejoy.com/Html/Article/network/6420061030230941.html">Windows2000
服务器端应用程序开发设计指南-存取控制(3)</A><BR>下一篇:<A
title="标题:Windows2000 服务器端应用程序开发设计指南-安全连接(1) 作者:Jeffrey Richter Jason D. Clark 更新:2006-11-3 18:38:49 点击:719"
href="http://www.acejoy.com/Html/Article/network/6620061103183849.html">Windows2000
服务器端应用程序开发设计指南-安全连接(1)</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="11.2 使用者环境.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> </P>
<TABLE height="100%" cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<SCRIPT language=javascript
src="11.2 使用者环境.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> <A
href='javascript:window.external.addFavorite("http://www.acejoy.com","ACE开发者")'><FONT
color=#000000>加入收藏</FONT></A> - <A
href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT
color=#000000>关于本站</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/Help.asp?Action=Copyright" target=_blank><FONT
color=#000000>版权申明</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/Help.asp?Action=aboutweb" target=_blank><FONT
color=#000000>联系站长</FONT></A> - <A class=Bottom
href="http://www.acejoy.com/LinkSite.asp" target=_blank><FONT
color=#000000>友情链接</FONT></A> </TD></TR>
<TR align=middle>
<TD height=23>Copyright© 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="11.2 使用者环境.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:36--></DIV></DIV></DIV></DIV></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -