0

我正在编写一个需要与 Windows 服务通信的 Winsock LSP(分层服务提供程序)DLL。

使用内存映射文件和事件进行通信以进行同步。如果应用程序未作为服务运行,则一切正常,但如果它确实找不到任何事件或文件映射(我在 OpenEvent 上收到 ERROR_FILE_NOT_FOUND 错误)。

我怀疑会发生这种情况,因为当作为服务运行时,应用程序以 SYSTEM 用户身份运行,而 LSP 由以本地用户身份运行的应用程序加载。

我认为这可以通过使用适当的 SECURITY_DESCRIPTOR 来解决,但我不知道应该设置什么。

关于如何使这项工作的任何想法?

谢谢,

4

1 回答 1

0

根据操作系统,这可能是会话问题。如果您再看一下 CreateEvent、CreateMemoryMapping 等的文档,您会注意到对象名称的 GLOBAL\ 前缀。此前缀(与 SESSION\x\ 前缀一起)定义对象的可见性范围。全局前缀在整个系统中都可以看到,而名称中没有前缀的对象是特定会话的本地对象(如果省略 \SESSION 前缀,则为当前会话)。会话出现在 Windows XP 的终端服务中,然后进入 Windows 2003 Server 及更高版本的操作系统。

于 2011-06-28T16:06:05.537 回答