枚举权限(本地安全策略)
我知道 NT 标头具有像 SE_TAKE_OWNERSHIP_NAME
这样定义的所有常量,因此可以使用函数将这些常量转换为人类可读的形式(取得文件或其他对象的所有权
)。
我的问题是如何枚举这些名称?对于不同版本的 Windows,并非所有 SE 名称都适用(即特权可能在特定 NT 系统上不可用)。
虽然 Windows7/2008 确实是最新且合适的标头,但它会列出所有这些标头 - 如果应用程序在较低平台上运行,则如果给定操作系统不这样做,则采用 SE 名称的函数对于给定名称将会失败。不支持(例如LsaEnumerateAccountsWithUserRight
会失败)。
但如何使应用程序兼容未来,以便于列出未来版本的 Windows 操作系统的所有权限呢?
I am aware that NT header has all constants defined like SE_TAKE_OWNERSHIP_NAME
, and so there are functions available to convert these into human readable form (Take ownership of files or other objects
).
My question is how to enumerate these names? With different versions of Windows, not all SE-names would be applicable (i.e. privileges may not be available on particular NT system).
Whilst it is true that Windows7/2008 is the latest and appropriate header for the same would list all of them - and if the application runs on a lower platform, the function taking SE-names would simply fail for given name if given OS doesn't support (like LsaEnumerateAccountsWithUserRight
would fail).
But how to make application future compatible that can facilitate listing all privileges for future versions of Windows OS?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 LsaEnumeratePrivileges(在 ntlsa.h 中定义,该文件位于 WDK - inc/api 中):
您获得的缓冲区是 POLICY_PRIVILEGE_DEFINITION 结构的数组:
例如:
Use LsaEnumeratePrivileges (defined in ntlsa.h, which is in the WDK - inc/api):
The buffer that you get is an array of POLICY_PRIVILEGE_DEFINITION structures:
For example:
工作代码:
Working code: