【问题标题】:Passing SECURITY_ATTRIBUTES object via a named pipe通过命名管道传递 SECURITY_ATTRIBUTES 对象
【发布时间】:2020-03-02 16:44:29
【问题描述】:

我有两个进程通过命名管道进行通信。

其中一个(我们称之为进程A)通过传递一堆参数来使用CreateProcessW 函数。我正在尝试将这些参数发送到进程 B。

如何使用命名管道将 LPSECURITY_ATTRIBUTES 类型的对象从 A 发送到 B?它是一个指向结构的指针,而该结构又具有指向另一个结构的指针。

我该怎么做,我是把每个对象都写到管道上,还是尝试使用像 Boost 这样的库来序列化结构?还是有另一种方法来处理这种结构?

【问题讨论】:

标签: c++ winapi serialization


【解决方案1】:

作为评论,您可以通过在进程 A 中使用 ConvertSecurityDescriptorToStringSecurityDescriptor 将安全描述符字符串格式传递给另一个进程,并在进程 B 中使用 ConvertStringSecurityDescriptorToSecurityDescriptor 转换回来:

    LPWSTR StringSecurityDescriptor = NULL;
    ULONG Len = 0;
    SECURITY_INFORMATION flag; //set flag = whatever your want to convert into string format and send to process B
    ConvertSecurityDescriptorToStringSecurityDescriptorW(ppSecurityDescriptor, SDDL_REVISION_1, flag,&StringSecurityDescriptor, &Len);
    WriteFile(hPipe, StringSecurityDescriptor, Len*sizeof(WCHAR), &dwritten, NULL);
    LocalFree(StringSecurityDescriptor);

如果安全描述符是Self-Relative

安全描述符存储SECURITY_DESCRIPTOR 结构和 连续内存块中的相关安全信息。

安全描述符总是以SECURITY_DESCRIPTOR 开头 结构,但安全描述符的其他组件可以 以任何顺序遵循结构。而不是使用内存地址, 安全描述符的组件由偏移量标识 描述符的开头。这种格式在安全时很有用 描述符必须存储在磁盘上,通过 通信协议,或复制到内存中。

或者使用MakeSelfRelativeSD从绝对格式作为模板创建自相关格式的安全描述符。

此外,您还可以使用SetSecurityInfo 设置另一个进程的安全信息。

【讨论】:

  • 谢谢,我会试试这个并发布回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多