我已经实现了一个以系统用户身份运行的系统服务,该系统用户正在生成一个子进程,该进程作为另一个用户使用该用户的环境变量运行。
HANDLE hToken = NULL;
LogonUser(
L"username", L"domain", L"password",
LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,
&hToken); {
void* lpEnvironment = NULL;
CreateEnvironmentBlock(&lpEnvironment, hToken, TRUE);
CreateProcessAsUser(
hToken, procname, cmdline,
NULL, NULL, FALSE,
CREATE_NO_WINDOW | NORMAL_PRIORITY_CLASS |CREATE_UNICODE_ENVIRONMENT,
lpEnvironment, NULL, &startupInfo, &procInfo);
在这个子进程中,我正在使用CoCreateInstance
作为本地服务器启动COM对象。该过程按照用户在第一步中定义的方式运行,但使用来自系统用户的环境变量。
IUnknown* pUnk = nullptr;
CoCreateInstance(
clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IUnknown, (void**)&pUnk);
有没有办法可以使用第一步中创建的子进程的环境变量启动COM对象。
我知道dcomcnfg工具。在其identity
标签中,设置了标准选项The launching user
。我假设在这种情况下将使用来自子进程的环境变量,但它们不是。将选项更改为Interactive user
或This user
具有预期效果,但似乎没有办法从子进程获取环境变量。