确定对象的 ACL
可以使用调试器检查对象的 ACL) (访问控制列表。
如果要执行内核调试,则可以使用以下方法。 若要在执行用户模式调试时使用它,需要将控件重定向到内核调试器。 有关详细信息 ,请参阅从内核调试器控制 User-Mode 调试器 。
首先,使用具有相关对象名称的 !object 调试器扩展:
kd> !object \BaseNamedObjects\AgentToWkssvcEvent
Object: ffbb8a98 Type: (80e30e70) Event
ObjectHeader: ffbb8a80
HandleCount: 2 PointerCount: 3
Directory Object: e14824a0 Name: AgentToWkssvcEvent
这表明对象标头具有地址0xFFBB8A80。 将 dt (Display Type) 命令用于此地址和 nt!_OBJECT_HEADER 结构名称:
kd> dt nt!_OBJECT_HEADER ffbb8a80
+0x000 PointerCount : 3
+0x004 HandleCount : 2
+0x004 NextToFree : 0x00000002
+0x008 Type : 0x80e30e70
+0x00c NameInfoOffset : 0x10 '
+0x00d HandleInfoOffset : 0 '
+0x00e QuotaInfoOffset : 0 '
+0x00f Flags : 0x20 ' '
+0x010 ObjectCreateInfo : 0x8016b460
+0x010 QuotaBlockCharged : 0x8016b460
+0x014 SecurityDescriptor : 0xe11f08b6
+0x018 Body : _QUAD
安全描述符指针值显示为0xE11F08B6。 此值的最低 3 位表示超出此结构开头的偏移量,因此应忽略它们。 换句话说,SECURITY_DESCRIPTOR结构实际上从0xE11F08B6 &~0x7开始。 在此地址上使用 !sd 扩展:
kd> !sd e11f08b0
->Revision: 0x1
->Sbz1 : 0x0
->Control : 0x8004
SE_DACL_PRESENT
SE_SELF_RELATIVE
->Owner : S-1-5-32-544
->Group : S-1-5-18
->Dacl :
->Dacl : ->AclRevision: 0x2
->Dacl : ->Sbz1 : 0x0
->Dacl : ->AclSize : 0x44
->Dacl : ->AceCount : 0x2
->Dacl : ->Sbz2 : 0x0
->Dacl : ->Ace[0]: ->AceType: ACCESS_ALLOWED_ACE_TYPE
->Dacl : ->Ace[0]: ->AceFlags: 0x0
->Dacl : ->Ace[0]: ->AceSize: 0x14
->Dacl : ->Ace[0]: ->Mask : 0x001f0003
->Dacl : ->Ace[0]: ->SID: S-1-5-18
->Dacl : ->Ace[1]: ->AceType: ACCESS_ALLOWED_ACE_TYPE
->Dacl : ->Ace[1]: ->AceFlags: 0x0
->Dacl : ->Ace[1]: ->AceSize: 0x18
->Dacl : ->Ace[1]: ->Mask : 0x00120001
->Dacl : ->Ace[1]: ->SID: S-1-5-32-544
->Sacl : is NULL
这将显示此对象的安全信息。