我正在编写一个需要与Windows服务通信的Winsock LSP(分层服务提供程序)DLL。
使用内存映射文件和事件进行通信以进行同步。如果应用程序没有作为服务运行,一切正常,但如果它没有找到任何事件或文件映射(我在OpenEvent上得到ERROR_FILE_NOT_FOUND错误)。
我怀疑这是因为当作为服务运行时,应用程序以SYSTEM用户身份运行,而LSP由作为本地用户运行的应用程序加载。
我认为这可以通过使用正确的SECURITY_DESCRIPTOR来解决,但我不知道它应该设置为什么。
关于如何使这项工作的任何想法?
谢谢,
答案 0 :(得分:0)
根据操作系统的不同,可能会出现会话问题。如果您再看一下CreateEvent,CreateMemoryMapping等文档,您会注意到对象名称的GLOBAL \前缀。此前缀(与SESSION \ x \前缀之间)定义对象的可见范围。在整个系统中可以看到GLOBAL前缀,而名称中没有前缀的对象是特定的(如果省略了\ SESSION前缀,则为当前的会话)。会话出现在Windows XP的终端服务中,然后进入Windows 2003 Server及更高版本的操作系统。