achimschoen Ответов: 0

Переменные среды для процесса, запущенного cocreateinstance с помощью CLSCTX_LOCAL_SERVER


Я реализовал системную службу, работающую от имени системного пользователя, которая порождает дочерний процесс, работающий от имени другого пользователя с переменными окружения этого пользователя. Запуск COM-объекта в качестве локального сервера с помощью CoCreateInstance наследует переменные среды от системного пользователя, но не от пользователя дочернего процесса.

Что я уже пробовал:

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);


В этом дочернем процессе я запускаю COM-объекты в качестве локального сервера с помощью Метод cocreateinstance Процесс выполняется как пользователь, определенный на первом шаге, но с переменными среды от системного пользователя.


IUnknown* pUnk = nullptr;

CoCreateInstance(
  clsid, NULL, CLSCTX_LOCAL_SERVER,
  IID_IUnknown, (void**)&pUnk);



Есть ли какой-нибудь способ запустить COM-объект с переменными окружения из дочернего процесса, который был создан на первом шаге?

Я знаю об инструменте dcomcnfg. В своем идентичность вкладка, стандартный вариант Запускающий пользователь заданный. Я бы предположил, что в этом случае будут использоваться переменные окружения из дочернего процесса, но это не так. Изменение параметра на Интерактивный пользователь или Этот пользователь имеет желаемый эффект, но, похоже, нет способа получить переменные окружения из дочернего процесса.

0 Ответов