为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在 active directory 组中不能创建为 groupType = Local

为什么在 active directory 组中不能创建为 groupType = Local

C#
红颜莎娜 2023-05-13 16:19:44
我无法理解为什么在活动目录中将组创建为 groupType 的“本地”组不起作用。它抛出以下异常: System.DirectoryServices.DirectoryServicesCOMException (0x80072035): The server is unwilling to process the request.以下是代码示例:        var parentEntry = new DirectoryEntry(ParentContainer);        var groupToCreate = parentEntry.Children.Add(this.AttributeType + this.Name, "group");        groupToCreate.Properties["description"].Add(this.Description);        groupToCreate.Properties["displayName"].Add(Name);        groupToCreate.Properties["groupType"].Add((int)GroupType.DomainLocalGroup); --> this line throws error.         groupToCreate.CommitChanges();如果我从 GroupType.DomainLocalGroup 更改为 GroupType.DomainGlobalGroup,一切正常。任何人都可以让我知道如何摆脱这个问题吗?
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

根据 Microsoft 的说法,组类型枚举的定义方式如下:

  • 1 (0x00000001) 指定由系统创建的组。

  • 2 (0x00000002) 指定具有全局范围的组。

  • 4 (0x00000004) 指定具有域本地作用域的组。

  • 8 (0x00000008) 指定具有通用范围的组。

  • 16 (0x00000010) 为 Windows Server 授权管理器指定一个 APP_BASIC 组。

  • 32 (0x00000020) 为 Windows Server 授权管理器指定一个 APP_QUERY 组。

  • 2147483648 (0x80000000) 指定安全组。如果未设置此标志,则该组为通讯组。

但这也是一个标志枚举——意味着可以通过将它们相加来组合值。所以是的,0x80000004实际上是一个有效值,表示“域本地安全组”。(0x4是域本地通讯组)

但是你必须转换为一个整数(它不会让你用十六进制值设置它)。我很惊讶你得到的异常是“服务器不愿意处理请求”,因为当我这样做时:

(int) 0x80000004

我收到此编译器错误:

CS0221:常量值“2147483652”无法转换为“int”(使用“unchecked”语法覆盖)

那是因为 的十进制值为0x800000042147483652,不适合 32 位整数。

但是你确实需要给它一个 32 位整数(你不能只转换为 a long)。所以你必须遵循建议并unchecked在铸造时使用:

unchecked((int) 0x80000004)

这给你一个十进制值 -2147483644。

所以你的代码应该是这样的:

groupToCreate.Properties["groupType"].Add(unchecked((int) GroupType.DomainLocalGroup));



查看完整回答
反对 回复 2023-05-13
  • 1 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信