我希望在我的应用中使用命名管道。服务器将是NT服务,客户端是用户空间应用。我认为如果有人可以创建锁定管道(或其他东西)的应用程序客户端,而我的服务器停止接收消息,则会出现问题。
我想补充一点,客户端应始终发送消息,服务器应始终接收消息。如果有人打扰那个过程,那就有问题了。
我需要有关如何保护命名管道的建议
AFAIK,多个不同的客户端进程都可以打开命名管道并写入单个读取器进程。在Unix上,这当然是正确的,所以在Windows上也是如此。
这意味着单个进程无法停止其他进程向服务器的写操作-尽管行为不当的进程可能会淹没服务器并显示其消息。没有针对过度热情的客户的简便保护措施。
在实现“安全的”命名管道方面,需要考虑一些事项。
Windows OS中的命名管道放置在每个用户(包括来宾)都可以访问的特殊路径\\.\pipe\
中。]
命名管道可以具有多个共享相同名称的实例;
第一个实例的创建者确定最大实例数并指定安全描述符
如果命名管道不存在,则任何用户都可以创建第一个实例并设置所有管道实例的DACL。
如果存在,则只有具有FILE_CREATE_PIPE_INSTANCE
权限的用户才能创建新实例。
FILE_FLAG_FIRST_PIPE_INSTANCE
标志来确保它正在创建第一个实例。信用:Man-in-the-Machine (MitMa) attacks on ill-secured inter process communications,这说明了不保护许多IPC方法(包括命名管道)的危害。