1

是什么导致命令提示符无法识别 WBAdmin 程序?

在非提升的命令提示符下,我能够使用 WBAdmin。当我启动提升的命令提示符时,它也可以工作。

在我的程序中,我通过使用 LogonUser 函数获得了一个用户令牌,并从中获取了链接令牌,并具有提升的访问权限。使用 CreateProcessAsUser,我尝试生成具有提升状态的命令提示符。在该命令提示符下,我无法启动 WBAdmin 程序。它说命令未被识别。

C:\Windows\system32>wbadmin 获取状态

'wbadmin' 不是内部或外部命令、可运行程序或批处理文件。

我将我的程序作为服务启动,它在我当前的桌面上启动了一个 cmd 窗口。我还注意到环境设置与我当前登录的帐户不同。

区别在于:

在 CreateProcessAsUser 命令提示符下

APPDATA=C:\Windows\system32\config\systemprofile\AppData\Roaming

LOCALAPPDATA=C:\Windows\system32\config\systemprofile\AppData\Local

TEMP=C:\Windows\TEMP

TMP=C:\Windows\TEMP

USERPROFILE=C:\Users\Default

在使用 Windows 登录屏幕登录的普通用户中

APPDATA=C:\Users\\AppData\Roaming

LOCALAPPDATA=C:\Users\pta\AppData\Local

TEMP=C:\Users\\AppData\Local\Temp

TMP=C:\Users\\AppData\Local\Temp

USERPROFILE=C:\用户\

CreateProcessAsUser 命令提示符缺少以下变量

HOMEDRIVE - HOMEPATH - 登录服务器 - PATHTEXT - USERDOMAIN

这是否意味着用户配置文件未正确加载?我使用以下行以用户身份登录:

LogonUser('username', 'domain', 'password', LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hUserToken);
4

2 回答 2

0
  • 什么操作系统?
  • 在我的 windows 8 64 位机器上,我可以从 32 位 CMD 提示符复制您的结果。
  • 在 64 位 CMD 提示符下工作正常。
  • %windir%\SysWOW64\cmd.exe 是 32 位 CMD.exe
  • %windir%\System32\cmd.exe 是 64 位 CMD.exe
于 2013-09-17T15:05:20.433 回答
0

它不起作用的原因是,因为程序启动了 32 位 CMD.exe。程序本身是 32 位的,因此默认情况下它将启动 32 位进程。这就是 Windows 将我重定向到存在 32 位 CMD.exe 的 Syswow64 文件夹的原因。

要禁用此重定向,我使用了此功能。 http://msdn.microsoft.com/en-us/library/aa365743%28VS.85%29.aspx

于 2013-09-25T14:41:53.697 回答