Search code examples
dllwindows-servicesipcwinsock-lsp

IPC between windows service and LSP DLL


I'm writing a Winsock LSP (Layered Service Provider) DLL that needs to communicate with a windows service.

The communication is done using memory mapped files and events for synchronization. Everything works fine if the application is not running as a service but if it does it cannot find any events or file mappings (I get ERROR_FILE_NOT_FOUND error on OpenEvent).

I suspect this happens because when running as a service, the application runs as SYSTEM user and LSP is loaded by applications that run as local user.

I think that this could be solved by using a proper SECURITY_DESCRIPTOR but I don't know what should it be set to.

Any ideas on how to make this work?

Thanks,


Solution

  • Depending on the OS, it might be a problem of sessions. If you take another look at documentation for CreateEvent, CreateMemoryMapping etc., you will notice GLOBAL\ prefix to object name. This prefix (among with SESSION\x\ prefix) define visibility scope of the object. GLOBAL prefixes are seen across the whole system, while objects without prefix in the name are local to specific (current if the \SESSION prefix is omitted) session. Sessions appeared in Terminal Services for Windows XP, then got themselves into the OS in Windows 2003 Server and later.