VirtualBox IGuestSession :: ProcessCreate返回0x8000FFFF(E_UNEXPECTED)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VirtualBox IGuestSession :: ProcessCreate返回0x8000FFFF(E_UNEXPECTED)相关的知识,希望对你有一定的参考价值。
所以我试图在主机的guest虚拟机会话中执行一个进程,但是我一直从它获得一个0x8000FFFF(E_UNEXPECTED)HRESULT。由于我收到COM错误而不是VBOX_E_IPRT_ERROR,因此我认为我的SAFEARRAY是问题,而不是实际参数,如果这是有道理的。我对COM不太熟悉,所以可能只是我使用SAFEARRAY错误的情况。无论哪种方式,这是我正在尝试的代码:
SAFEARRAY *args_and_env, *creation_flags;
SAFEARRAYBOUND arrayDim[1];
arrayDim[0].lLbound= 0;
arrayDim[0].cElements= 1;
args_and_env = SafeArrayCreate(VT_LPWSTR,1,arrayDim);
SafeArrayPutElement(args_and_env, 0, L"");
creation_flags = SafeArrayCreate(VT_INT, 1, arrayDim);
int flag = ProcessCreateFlag_None;
SafeArrayPutElement(creation_flags, 0, &flag);
IGuestProcess *proca;
rc = guestSession->ProcessCreate(proc, args_and_env, args_and_env, creation_flags, 0, &proca);
IGuestSession :: ProcessCreate的文档如下:
IGuestProcess IGuestSession::processCreate(
[in] wstring executable,
[in] wstring arguments[],
[in] wstring environmentChanges[],
[in] ProcessCreateFlag flags[],
[in] unsigned long timeoutMS)
功能声明如下:
HRESULT STDMETHODCALLTYPE ProcessCreate(
/* [in] */ BSTR aExecutable,
/* [in] */ SAFEARRAY * aArguments,
/* [in] */ SAFEARRAY * aEnvironmentChanges,
/* [in] */ SAFEARRAY * aFlags,
/* [in] */ ULONG aTimeoutMS,
/* [retval][out] */ IGuestProcess **aGuestProcess)
我也尝试将NULL传递给参数和environmentChanges,因为我不打算使用任何一个,但结果相同。
答案
当我测试我的任务时,我意识到如果您使用没有密码的会话操作系统,则可能出现此问题。您必须设置密码并使用密码创建会话:
BSTR login = ...;
BSTR passsword = ...;
BSTR empty = SysAllocString(L"");
HRESULT rc = guest->CreateSession(login, password, empty, sessionName, &guestSession);
然后创建一个访客进程
以上是关于VirtualBox IGuestSession :: ProcessCreate返回0x8000FFFF(E_UNEXPECTED)的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins / Vagrant / VirtualBox - Virtualbox 以系统用户身份运行?
在VirtualBox中的CentOS 6.3下安装VirtualBox增强包
virtualbox 安装扩展包 VirtualBox Extension Pack