c ++ - Hvordan opdager, om en DLL kører i forbindelse med en windows service?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver en DLL, der kan køre i forbindelse med en service og kan indlæses i en standard win32-proces. Hvordan kan jeg opdage, om det kører i forbindelse med en tjeneste eller i forbindelse med en standard win32-proces?

Bedste reference


Ifølge Session 0 Isolation, introduceret i Vista, løber Windows Services i session 0. For at afgøre, om processen udføres i session 0, kan du bruge ProcessIdToSessionId-funktionen: [2] [3]


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


I forhold til din kommentar vedrørende GUI, skal du citere direkte fra det linkede dokument:



  Fordi Session 0 ikke længere er en brugersession, har tjenester, der kører i Session 0, ikke adgang til videodriveren. Det betyder, at ethvert forsøg på en tjeneste til at gøre grafikken fejler.