请教一下关于LogonUser()的问题。

ghost_117 2004-04-05 07:30:53
我想用LogonUser()获取一个特定用户的句柄,我按照MSDN上的sample,写了如下程序:
LPTSTR USER("test");
LPTSTR PASS("test");
if (LogonUser
(USER,".",PASS,LOGON32_LOGON_BATCH,LOGON32_PROVIDER_DEFAULT,&user))
{
cout<<"successful!!"<<endl;

}
else
{
cout<<GetLastError()<<endl;
}
结果出错,错误号是1385。test是在本地机器上的用户。
我不明白为什么会出现登陆错误。用户名和密码都无误。是不是域名填错了呢?
还请高手指教。感激不尽。
...全文
135 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghost_117 2004-04-13
明白了,谢谢各位。
我再试一试。
回复
xstring 2004-04-12
LogonUser
ImpersonateLogonUser
CreateProcess
RevertToSelf

这是不用CreateProcessAsUser的流程

记住最后关闭该关闭的HANDLE
回复
fzd999 2004-04-08
是的,拥有系统管理员的Token并不足够,还要利用这个Token打开你当前进程的权限才可以执行一些特权操作。

不过看了你的代码,你并不需要提升什么权限,出现问题的原因是你的CreateProcessAsUser函数。听了我的结论你可能会有点泄气,其实你只要在LogonUser之后直接执行CreateProcess就可以了,根本不需要用CreateProcessAsUser,用了反而会导致权限错误。
回复
ghost_117 2004-04-06
可以再说的详细一点吗?我是newbie,没有完全弄明白,是提升创建新进程的进程的权限吗?具体该怎么做,多谢了。
回复
fzd999 2004-04-06
进一步提升你的进程的权限
UpdateProcessPrivilege
回复
ghost_117 2004-04-06
这里是代码:
HANDLE user;
LPTSTR USER("test");
LPTSTR PASS("test");
if (LogonUser(USER,".",PASS,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&user))
{
cout<<"successful!!"<<endl;

}
else
{
cout<<GetLastError()<<endl;
}


//create process;
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// Start the child process.
if( !CreateProcessAsUser( user,
NULL, // No module name (use command line).
"e://simon/test/sample.exe", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
cout<<"CreateProcess failed."<<endl;
cout<<GetLastError()<<endl;
}
回复
ghost_117 2004-04-05
不过,还有一个问题,就是在获得了user的句柄之后,我用获得的句柄来执行
CreateProcessAsUser()时,提示权限不够。我获得的是administrator的user句柄。
为什么呢?还望高手不吝赐教。
回复
ghost_117 2004-04-05
谢谢啦。
回复
fzd999 2004-04-05
dwLogonType, 参数设置错误,你设的 LOGON32_LOGON_BATCH 代表是登陆批处理服务器,显然是错误的。如果是Win2000Pro,应该用LOGON32_LOGON_INTERACTIVE,这种登陆方式允许进程和系统进行交互,类似于GINA的行为。
回复
发动态
发帖子
硬件/系统
创建于2007-09-28

2589

社区成员

VC/MFC 硬件/系统
申请成为版主
社区公告
暂无公告