CoCreateInstance与CLSCTX_LOCAL_SERVER启动的进程的环境变量

时间:2018-06-04 12:50:16

标签: service system dcom

我已经实现了一个以系统用户身份运行的系统服务,该系统用户正在生成一个子进程,该进程作为另一个用户使用该用户的环境变量运行。

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 userThis user具有预期效果,但似乎没有办法从子进程获取环境变量。

0 个答案:

没有答案