Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“你怎么样?”;绝对的;及;“自亲属”;在C#中操纵的安全描述符?_C#_.net_Com_Permissions_Dcom - Fatal编程技术网

“你怎么样?”;绝对的;及;“自亲属”;在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
for
RawSecurityDescriptor
,它将从存储在注册表中的自相关字节数组转换为托管表示形式。然后使用.NET代码对托管表示形式进行更改,最后调用
GetBinaryForm
方法来转换将SD修改回自相关非托管表单以存储在注册表中。因此托管代码不需要考虑任何绝对SD结构

非托管代码确实需要以每种方式进行转换,因为为更改SD而调用的某些Win32 API需要绝对形式