Как узнать, работает ли DLL в контексте службы Windows? - PullRequest
2 голосов
/ 02 апреля 2012

Я пишу DLL, которая может работать в контексте службы и может быть загружена в стандартный процесс win32.Как я могу определить, работает ли он в контексте службы или в контексте стандартного процесса win32?

1 Ответ

4 голосов
/ 02 апреля 2012

Согласно Изоляция сеанса 0 , представленная в Vista, службы Windows запускаются в сеансе 0. Чтобы определить, выполняется ли процесс в сеансе 0, можно использовать ProcessIdToSessionId функция:

DWORD session_id;
if (ProcessIdToSessionId(GetCurrentProcessId(), &session_id))
{
    std::cout << "session_id=" << session_id << "\n";
}
else
{
    std::cout << "Failed : " << GetLastError() << "\n";
}

В отношении вашего комментария относительно GUI, цитата непосредственно из связанного документа:

Поскольку сеанс 0 больше не является сеансом пользователя, службы, работающие в сеансе 0, не имеют доступа к видеодрайверу. Это означает, что любая попытка службы визуализации графики завершится неудачей.

...