On Sun, Jul 1, 2018 at 8:06 AM, Marcos Douglas B. Santos <m...@delfire.net> wrote: > On Sat, Jun 30, 2018 at 9:13 PM, R0b0t1 <r03...@gmail.com> wrote: >> Anyway - does TTimer use the WM_TIMER message? That is the type tied >> to the GUI. Even if you need to use WM_TIMER for some reason you can, >> as services should be run in "session 0" and should have access to a >> GUI. The latter is, I think, a compatibility option you can enable. > > I didn't understand this "session 0"... is it a something related to > Lazarus or Windows? >
It is something related to Windows, and the reason services can not use the GUI. A session is started for each terminal services instance. A session contains multiple window stations, each of which contains at least one desktop, one of which accepts keyboard/mouse input. One terminal services instance exists by default, and it is the "local session," i.e. the one that consumes physical keyboard and mouse input and outputs to the screen. It used to be that this local session was the one that ran services in addition to logged in user programs. This made it easier than it should have been to exploit service processes, so they made session 0 noninteractive and now the console logs in to session 1. One exploit was particularly bad. You can forcibly register WM_TIMER callbacks for an application and have that callback run in that processes' thread. As long as services were running in the same desktop you could trivially run code as SYSTEM. More information at https://blogs.technet.microsoft.com/askperf/2007/04/27/application-compatibility-session-0-isolation/ but it is not a lot. There is a better MSDN article I could not find. Cheers, R0b0t1 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal