wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – CreateNamedPipe()中lpSecurityAttributes需要什么生命周期?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

>我多久可以销毁传递给CreatenamedPipe()的lpSecurityAttributes所指向的结构? >我是否需要为每个管道实例单独一个? CreatenamedPipe()的MSDN文档说: lpSecurityAttributes [in, optional] A pointer to a SECURITY_ATTRIBUTES structure that specifies a
>我多久可以销毁传递给CreatenamedPipe()的lpSecurityAttributes所指向的结构?
>我是否需要为每个管道实例单独一个

CreateNamedPipe()的MSDN文档说:

强调我的. ‘new’是指新的命名管道,还是命名管道的新实例?它继续说:

(同样,强调我的.)人们可以将其视为lpSecurityAttributes仅在创建命名管道的第一个实例(新命名管道)时使用,并在创建同一命名管道的更多实例时被忽略.如果是这样,则只需要lpSecurityAttributes结构的一个实例.

或者你可能必须为每个实例传入一个有效的lpSecurityAttributes,但它可以(应该?)是同一个

或者您可能需要为每个管道实例分配一个新的Security_ATTRIBUTES结构?

我的相关问题 – 一旦对CreatenamedPipe()的调用返回,它是否可以销毁Security_ATTRIBUTES结构,或者它是否必须保持有效直到最后一个句柄(到管道,或只是那个管道实例?)关闭 – 是不是解决.

有没有人对这两个问题有明确的答案?

解决方法

您需要为每次调用CreatenamedPipe传递有效的Security_ATTRIBUTES结构或NULl.您可以重复使用相同的结构进行其他调用,也可以使用单独的结构,以更方便的方式.在来自不同线程的多个同时调用中使用相同的结构可能不安全 – 我怀疑它会没问题,但无论如何我都会避免它.

‘新’意味着’新管’不是’新实例’.如果命名管道已存在,则不使用lpSecurityDescriptor成员中的ACl.因此,如果您知道要创建现有管道的新实例,并且不需要设置bInheritHandle,则应该只为lpSecurityAttributes传递NULl.如果确实需要设置bInheritHandle,请确保lpSecurityDescriptor为NULL或指向有效的安全描述符.

如前所述,lpSecurityAttributes中的内容可以在调用返回后立即丢弃(除非您计划在另一个调用中重用它!),是的,包括分配给安全描述符的内存.

大佬总结

以上是大佬教程为你收集整理的windows – CreateNamedPipe()中lpSecurityAttributes需要什么生命周期?全部内容,希望文章能够帮你解决windows – CreateNamedPipe()中lpSecurityAttributes需要什么生命周期?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。