C++ 使用SDDL和手动创建安全描述符之间的区别?

C++ 使用SDDL和手动创建安全描述符之间的区别?,c++,security,winapi,C++,Security,Winapi,我需要使用Win32 API创建具有特定权限的文件夹。在浏览文档时,我发现了两个似乎合理的示例: 本例使用SDDL创建DACL,将其添加到SECURITY\u ATTRIBUTES结构中,并使用它创建文件夹: 本例手动指定SID\u IDENTIFIER\u AUTHORITY,PSID,EXPLICIT\u ACCESS结构(包括ACCESS\u MASK等),受信方,等等,直到生成的SECURITY\u属性结构应用于新对象(本例中的注册表项): 在我看来,使用SDDL要容易得多,而且一旦

我需要使用Win32 API创建具有特定权限的文件夹。在浏览文档时,我发现了两个似乎合理的示例:

  • 本例使用SDDL创建
    DACL
    ,将其添加到
    SECURITY\u ATTRIBUTES
    结构中,并使用它创建文件夹:

  • 本例手动指定
    SID\u IDENTIFIER\u AUTHORITY
    PSID
    EXPLICIT\u ACCESS
    结构(包括
    ACCESS\u MASK
    等),
    受信方
    ,等等,直到生成的
    SECURITY\u属性
    结构应用于新对象(本例中的注册表项):

  • 在我看来,使用SDDL要容易得多,而且一旦您克服了繁琐的语法,就不容易出现错误


    这两种方法之间有什么区别(如果有的话)?哪一种在工业上更常用?

    现在,你可以使用其中一种。SDDL对于人类来说只是一个“友好”字符串。在某些情况下,在大多数安全函数使用它们之前,必须将它们转换为二进制等价物

    如果我没记错的话,SDDL字符串支持是在Windows 2000中添加的。在每个新的Windows版本中添加了更多

    除非您支持Windows NT4,或者需要使用模糊别名,否则只要使用SDDL字符串即可


    如果速度更重要,那么经典的方法可能更快。

    就最终结果而言,没有区别。手动方法稍微快一点,但除非你试图每秒生成一千个安全描述符,否则这并不重要。一些应用程序使用手动方法的主要原因是代码是在SDDL存在之前编写的。。。。尽管有时,如果存在输入参数,也就是说,如果您事先不知道安全描述符需要是什么,那么“手工”构建安全描述符可能会更简洁。