关于WINAPI: LogonUser的问题(200分)

  • 主题发起人 主题发起人 kindly
  • 开始时间 开始时间
K

kindly

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现一个功能,就是让程序在执行时用其他用户身份登陆<br>举例来说,当前用户是guest,我想让程序以administrator帐号运行,(知道密码)<br>我查到了logonuser可以实现登陆(我的理解),但是怎么试都不行,MSDN上说如果要<br>logonuser必须有SE_TCB_NAME权限,我加了这个权限还是不行,<br>我的代码如下,请高手指点!<br>procedure AdjustToken;<br>var<br>&nbsp; hdlProcessHandle &nbsp;: Cardinal;<br>&nbsp; hdlTokenHandle &nbsp; &nbsp;: Cardinal;<br>&nbsp; tmpLuid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : Int64;<br>&nbsp; tkp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : TOKEN_PRIVILEGES;<br>&nbsp; tkpNewButIgnored &nbsp;: TOKEN_PRIVILEGES;<br>&nbsp; lBufferNeeded &nbsp; &nbsp; : Cardinal;<br>begin<br>&nbsp; hdlProcessHandle := GetCurrentProcess;<br>&nbsp; OpenProcessToken(hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES or<br>&nbsp; &nbsp; TOKEN_QUERY), hdlTokenHandle);<br><br>&nbsp; // Get the LUID for shutdown privilege.<br>&nbsp; if not LookupPrivilegeValue('', SE_TCB_NAME, tmpLuid) then showmessage('LookupPrivilegeValue');<br><br>&nbsp; tkp.PrivilegeCount := 1; &nbsp; // ' One privilege to set<br>&nbsp; tkp.Privileges[0].Luid := tmpLuid;<br>&nbsp; tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;<br>&nbsp;// &nbsp;Enable the shutdown privilege in the access token of this process.<br><br>&nbsp; if not AdjustTokenPrivileges(hdlTokenHandle, False,<br>&nbsp; &nbsp; tkp, SizeOf(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded) then showmessage('AdjustToken');<br>end;<br><br>procedure LogonAsUser(AUsername,APassword:string);<br>var<br>&nbsp; tkn : Cardinal;<br>begin<br>&nbsp; AdjustToken;<br>&nbsp; writeln(LogonUser(PChar(AUsername),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'soj',<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PChar(APassword),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LOGON32_LOGON_INTERACTIVE,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LOGON32_PROVIDER_DEFAULT,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tkn)); //always be False , why?<br>&nbsp; writeln(ImpersonateLoggedOnUser(tkn)); //always be False, why?<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; LogonAsUser('guest','guest');<br>end;<br><br>运行在w2kp下,总是不能通过,我搞了N天了...:(
 
"没人会吗?"<br>kindly看了看空旷的大厅,失望的走了.
 
我以前也提过这个问题,可是也没有满意的答案。<br>后来我是用了很愚蠢的办法,就是手工在本地安全设置里<br>的本地策略的用户权利指派里,将以操作系统方式操作的权限赋给<br>你所需要的用户如guest,如果你知道“以操作系统方式操作”这个<br>权限的常量的话,那么你就可以通过程序来实现了,而不会向我那<br>么笨了。<br>我们可以交流一下<br>
 
我把msdn又翻了一遍,还是没有结果,所有的文档只提到需要有SE_TCB_NAME权限,<br>但是我用Administrator帐号也不能运行通过阿,有一篇还说不需要设置SE_TCB_NAME,<br>logonuser会自动帮你加,唉,真是搞不定啊,头疼~~~<br><br>高手们,研究一下这个问题吧
 
是不需要设SE_TCB_NAME权限,但是需要我说的“以操作系统方式操作”这个权限,<br>但是我不知道他的常量是什么。<br>我说的方法你试过了没有。
 
我试了一下,是可以的<br>我最近看了许多关于提高权限的贴子<br>有很多都是通过非正常手段的<br>比较有帮助的是lu0的一篇文章&lt;&lt;超越Administrator&gt;&gt;
 
我也在用它时遇到问题
 
没人回答,把分给我吧,我只有可怜的300分拉:~~(
 
你给我150分,我就给你。 :)
 
太狠了吧~~~
 
斑竹,把分还我吧,我看是没指望了,555~~~
 
多人接受答案了。
 
后退
顶部