“你怎么样?”;绝对的;及;“自亲属”;在C#中操纵的安全描述符?
我正在尝试使用“你怎么样?”;绝对的;及;“自亲属”;在C#中操纵的安全描述符?,c#,.net,com,permissions,dcom,C#,.net,Com,Permissions,Dcom,我正在尝试使用RawSecurityDescriptor类从Windows注册表读取安全描述符,对其进行修改,然后将修改后的描述符存储回去。这与“dcomperm”MicrosoftSDK示例的功能基本相同 然而,“dcomperm”示例进行两次转换-一旦从注册表读取描述符,它将使用MakeAbsoluteSD()从“selt relative”转换为“absolute”,然后以该形式进行更改,一旦更改完成,它将使用makeselfrelatived()转换回“selfrelatived”,并存
RawSecurityDescriptor
类从Windows注册表读取安全描述符,对其进行修改,然后将修改后的描述符存储回去。这与“dcomperm”MicrosoftSDK示例的功能基本相同
然而,“dcomperm”示例进行两次转换-一旦从注册表读取描述符,它将使用MakeAbsoluteSD()
从“selt relative”转换为“absolute”,然后以该形式进行更改,一旦更改完成,它将使用makeselfrelatived()
转换回“selfrelatived”,并存储在“自相关”形式
在我链接到的代码中没有这样的转换
它们是如何在C#中完成的?它们是由.NET框架内部完成的,还是我必须用p/Invoke自己完成?据我所知,
System.Security.AccessControl
命名空间中的类,如RawSecurityDescriptor
,RawAcl
等,提供了corre中信息的托管表示响应Win32构造。因此,RawSecurityDescriptor
的实例是一个.NET对象,其字段也是.NET对象(例如,包括DACL和SACL的两个RawAcl
对象)。此托管表示与非托管的SecurityDescriptor
的绝对形式或自相关形式没有直接关系
RawSecurityDescriptor
类提供与托管表示之间的转换,一个转换为文本SDDL表示(与您的问题无关),另一个转换为它所称的“BinaryForm”,它对应于Win32自相关结构,将SD表示为一个连续的字节数组
托管代码示例使用ctor
forRawSecurityDescriptor
,它将从存储在注册表中的自相关字节数组转换为托管表示形式。然后使用.NET代码对托管表示形式进行更改,最后调用GetBinaryForm
方法来转换将SD修改回自相关非托管表单以存储在注册表中。因此托管代码不需要考虑任何绝对SD结构
非托管代码确实需要以每种方式进行转换,因为为更改SD而调用的某些Win32 API需要绝对形式