说一说默认的安全描述符

说一说默认的安全描述符

开发者不愿意触碰的一个东西:安全描述符

有一些Win32 API会带有一个可选的安全描述符(LPSECURITY_ATTRIBUTES)参数,大多数开发者为了简便传入了一个NULL值,这表明:API将获取一个默认的安全描述符。那么,这个默认的安全描述符,到底是一个什么东西呢?今天来说道说道。

当然,当我们碰到麻烦,第一个应该去的地方就应该是MSDN。

里面是这么解释的:默认的DACL来自可继承的ACE(如果对象在一个层次结构中,例如文件系统或者注册表),否则,默认的DACL来自对象创建者的主Token或者模拟的Token。

那么,什么是主Token呢?

实际上,我也不知道。让我们写个小程序来研究研究吧。

好吧,我承认,我写这篇文章的主要目的就是为了调用这个API: ConvertSecurityDescriptorToStringSecurityDescriptor。

它可能是Win32 API中名字最长的一个函数了。如果你的眼力好的话,可能也看出来了,我在代码里使用了NT变量的命名风格,而不是常用的匈牙利风格。(我也只是玩玩而已啦)

如果你执行上面的代码,则你应该会得到如下面所展示的一行东西:

(这是个什么玩意?) 是的,我一开始也会这样问自己。

让我们来翻译翻译:

> “D: ” – 这里表明是一段DACL的开始。

> “(A;;GA;;;S-…)” – 允许(Allow)我对”S-“的所有访问(Generic All)。默认情况下,每个用户对他们自己创建的进程拥有所有访问权限。

> “(A;;GA;;;SY)” – 允许对”Local System”的所有访问(Generic All)。

在接下来的文章中,我可能还会再翻译翻译DACL中那段最长的部分”S-“,请拭目以待。

总结

一般,我也是为了方便(其实是不想花时间研究),传入一个默认的安全描述符。

在大多数情况下,这都能正常工作。

但是,万一,有一天,你的应用场景中需要传入一个自定义的安全描述符,则可能就需要花些功夫研究研究本文里说的这个玩意儿了。

也即:出来混,迟早都是要还的。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《What is the default security descriptor?》

相关推荐

寻找理想宠物:哪个软件最适合购买狗狗?
365bet365官网

寻找理想宠物:哪个软件最适合购买狗狗?

📅 07-27 👁️ 7381
日本人都是怎么“约”的?套路居然有这么多!?
正版约彩365软件

日本人都是怎么“约”的?套路居然有这么多!?

📅 07-07 👁️ 6225
烟花戏·春奇遇攻略【丐帮旺富富奇遇攻略】【封印时间:0天】