3 typedef struct _KNOWN_ACE
8 } KNOWN_ACE
, *PKNOWN_ACE
;
10 typedef struct _KNOWN_OBJECT_ACE
16 } KNOWN_OBJECT_ACE
, *PKNOWN_OBJECT_ACE
;
18 typedef struct _KNOWN_COMPOUND_ACE
22 USHORT CompoundAceType
;
25 } KNOWN_COMPOUND_ACE
, *PKNOWN_COMPOUND_ACE
;
29 SepGetGroupFromDescriptor(PVOID _Descriptor
)
31 PISECURITY_DESCRIPTOR Descriptor
= (PISECURITY_DESCRIPTOR
)_Descriptor
;
32 PISECURITY_DESCRIPTOR_RELATIVE SdRel
;
34 if (Descriptor
->Control
& SE_SELF_RELATIVE
)
36 SdRel
= (PISECURITY_DESCRIPTOR_RELATIVE
)Descriptor
;
37 if (!SdRel
->Group
) return NULL
;
38 return (PSID
)((ULONG_PTR
)Descriptor
+ SdRel
->Group
);
42 return Descriptor
->Group
;
48 SepGetOwnerFromDescriptor(PVOID _Descriptor
)
50 PISECURITY_DESCRIPTOR Descriptor
= (PISECURITY_DESCRIPTOR
)_Descriptor
;
51 PISECURITY_DESCRIPTOR_RELATIVE SdRel
;
53 if (Descriptor
->Control
& SE_SELF_RELATIVE
)
55 SdRel
= (PISECURITY_DESCRIPTOR_RELATIVE
)Descriptor
;
56 if (!SdRel
->Owner
) return NULL
;
57 return (PSID
)((ULONG_PTR
)Descriptor
+ SdRel
->Owner
);
61 return Descriptor
->Owner
;
67 SepGetDaclFromDescriptor(PVOID _Descriptor
)
69 PISECURITY_DESCRIPTOR Descriptor
= (PISECURITY_DESCRIPTOR
)_Descriptor
;
70 PISECURITY_DESCRIPTOR_RELATIVE SdRel
;
72 if (!(Descriptor
->Control
& SE_DACL_PRESENT
)) return NULL
;
74 if (Descriptor
->Control
& SE_SELF_RELATIVE
)
76 SdRel
= (PISECURITY_DESCRIPTOR_RELATIVE
)Descriptor
;
77 if (!SdRel
->Dacl
) return NULL
;
78 return (PACL
)((ULONG_PTR
)Descriptor
+ SdRel
->Dacl
);
82 return Descriptor
->Dacl
;
88 SepGetSaclFromDescriptor(PVOID _Descriptor
)
90 PISECURITY_DESCRIPTOR Descriptor
= (PISECURITY_DESCRIPTOR
)_Descriptor
;
91 PISECURITY_DESCRIPTOR_RELATIVE SdRel
;
93 if (!(Descriptor
->Control
& SE_SACL_PRESENT
)) return NULL
;
95 if (Descriptor
->Control
& SE_SELF_RELATIVE
)
97 SdRel
= (PISECURITY_DESCRIPTOR_RELATIVE
)Descriptor
;
98 if (!SdRel
->Sacl
) return NULL
;
99 return (PACL
)((ULONG_PTR
)Descriptor
+ SdRel
->Sacl
);
103 return Descriptor
->Sacl
;
109 /* SID Authorities */
110 extern SID_IDENTIFIER_AUTHORITY SeNullSidAuthority
;
111 extern SID_IDENTIFIER_AUTHORITY SeWorldSidAuthority
;
112 extern SID_IDENTIFIER_AUTHORITY SeLocalSidAuthority
;
113 extern SID_IDENTIFIER_AUTHORITY SeCreatorSidAuthority
;
114 extern SID_IDENTIFIER_AUTHORITY SeNtSidAuthority
;
117 extern PSID SeNullSid
;
118 extern PSID SeWorldSid
;
119 extern PSID SeLocalSid
;
120 extern PSID SeCreatorOwnerSid
;
121 extern PSID SeCreatorGroupSid
;
122 extern PSID SeCreatorOwnerServerSid
;
123 extern PSID SeCreatorGroupServerSid
;
124 extern PSID SeNtAuthoritySid
;
125 extern PSID SeDialupSid
;
126 extern PSID SeNetworkSid
;
127 extern PSID SeBatchSid
;
128 extern PSID SeInteractiveSid
;
129 extern PSID SeServiceSid
;
130 extern PSID SeAnonymousLogonSid
;
131 extern PSID SePrincipalSelfSid
;
132 extern PSID SeLocalSystemSid
;
133 extern PSID SeAuthenticatedUserSid
;
134 extern PSID SeRestrictedCodeSid
;
135 extern PSID SeAliasAdminsSid
;
136 extern PSID SeAliasUsersSid
;
137 extern PSID SeAliasGuestsSid
;
138 extern PSID SeAliasPowerUsersSid
;
139 extern PSID SeAliasAccountOpsSid
;
140 extern PSID SeAliasSystemOpsSid
;
141 extern PSID SeAliasPrintOpsSid
;
142 extern PSID SeAliasBackupOpsSid
;
143 extern PSID SeAuthenticatedUsersSid
;
144 extern PSID SeRestrictedSid
;
145 extern PSID SeAnonymousLogonSid
;
146 extern PSID SeLocalServiceSid
;
147 extern PSID SeNetworkServiceSid
;
150 extern const LUID SeCreateTokenPrivilege
;
151 extern const LUID SeAssignPrimaryTokenPrivilege
;
152 extern const LUID SeLockMemoryPrivilege
;
153 extern const LUID SeIncreaseQuotaPrivilege
;
154 extern const LUID SeUnsolicitedInputPrivilege
;
155 extern const LUID SeTcbPrivilege
;
156 extern const LUID SeSecurityPrivilege
;
157 extern const LUID SeTakeOwnershipPrivilege
;
158 extern const LUID SeLoadDriverPrivilege
;
159 extern const LUID SeSystemProfilePrivilege
;
160 extern const LUID SeSystemtimePrivilege
;
161 extern const LUID SeProfileSingleProcessPrivilege
;
162 extern const LUID SeIncreaseBasePriorityPrivilege
;
163 extern const LUID SeCreatePagefilePrivilege
;
164 extern const LUID SeCreatePermanentPrivilege
;
165 extern const LUID SeBackupPrivilege
;
166 extern const LUID SeRestorePrivilege
;
167 extern const LUID SeShutdownPrivilege
;
168 extern const LUID SeDebugPrivilege
;
169 extern const LUID SeAuditPrivilege
;
170 extern const LUID SeSystemEnvironmentPrivilege
;
171 extern const LUID SeChangeNotifyPrivilege
;
172 extern const LUID SeRemoteShutdownPrivilege
;
173 extern const LUID SeUndockPrivilege
;
174 extern const LUID SeSyncAgentPrivilege
;
175 extern const LUID SeEnableDelegationPrivilege
;
176 extern const LUID SeManageVolumePrivilege
;
177 extern const LUID SeImpersonatePrivilege
;
178 extern const LUID SeCreateGlobalPrivilege
;
179 extern const LUID SeTrustedCredmanPrivilege
;
180 extern const LUID SeRelabelPrivilege
;
181 extern const LUID SeIncreaseWorkingSetPrivilege
;
182 extern const LUID SeTimeZonePrivilege
;
183 extern const LUID SeCreateSymbolicLinkPrivilege
;
186 extern PACL SePublicDefaultUnrestrictedDacl
;
187 extern PACL SePublicOpenDacl
;
188 extern PACL SePublicOpenUnrestrictedDacl
;
189 extern PACL SeUnrestrictedDacl
;
192 extern PSECURITY_DESCRIPTOR SePublicDefaultSd
;
193 extern PSECURITY_DESCRIPTOR SePublicDefaultUnrestrictedSd
;
194 extern PSECURITY_DESCRIPTOR SePublicOpenSd
;
195 extern PSECURITY_DESCRIPTOR SePublicOpenUnrestrictedSd
;
196 extern PSECURITY_DESCRIPTOR SeSystemDefaultSd
;
197 extern PSECURITY_DESCRIPTOR SeUnrestrictedSd
;
200 #define SepAcquireTokenLockExclusive(Token) \
202 KeEnterCriticalRegion(); \
203 ExAcquireResourceExclusiveLite(((PTOKEN)Token)->TokenLock, TRUE); \
205 #define SepAcquireTokenLockShared(Token) \
207 KeEnterCriticalRegion(); \
208 ExAcquireResourceSharedLite(((PTOKEN)Token)->TokenLock, TRUE); \
211 #define SepReleaseTokenLock(Token) \
213 ExReleaseResourceLite(((PTOKEN)Token)->TokenLock); \
214 KeLeaveCriticalRegion(); \
223 IN PACCESS_TOKEN _Token
,
224 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
225 IN BOOLEAN TokenLocked
231 IN PACCESS_TOKEN _Token
,
238 IN PACCESS_TOKEN _Token
,
239 IN PSID PrincipalSelfSid
,
242 IN BOOLEAN Restricted
259 SepInitPrivileges(VOID
);
264 SepInitSecurityIDs(VOID
);
278 SeRmInitPhase0(VOID
);
282 SeRmInitPhase1(VOID
);
286 SeDeassignPrimaryToken(struct _EPROCESS
*Process
);
299 SeInitializeProcessAuditName(
300 IN PFILE_OBJECT FileObject
,
302 OUT POBJECT_NAME_INFORMATION
*AuditInfo
307 SeCreateAccessStateEx(
309 IN PEPROCESS Process
,
310 IN OUT PACCESS_STATE AccessState
,
311 IN PAUX_ACCESS_DATA AuxData
,
312 IN ACCESS_MASK Access
,
313 IN PGENERIC_MAPPING GenericMapping
327 OUT PBOOLEAN IsSibling
332 SepCreateImpersonationTokenDacl(
334 _In_ PTOKEN PrimaryToken
,
341 SepInitializeTokenImplementation(VOID
);
345 SepCreateSystemProcessToken(VOID
);
349 SeDetailedAuditingWithToken(IN PTOKEN Token
);
353 SeAuditProcessExit(IN PEPROCESS Process
);
357 SeAuditProcessCreate(IN PEPROCESS Process
);
361 SeExchangePrimaryToken(
362 _In_ PEPROCESS Process
,
363 _In_ PACCESS_TOKEN NewAccessToken
,
364 _Out_ PACCESS_TOKEN
* OldAccessToken
369 SeCaptureSubjectContextEx(
371 IN PEPROCESS Process
,
372 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
377 SeCaptureLuidAndAttributesArray(
378 PLUID_AND_ATTRIBUTES Src
,
379 ULONG PrivilegeCount
,
380 KPROCESSOR_MODE PreviousMode
,
381 PLUID_AND_ATTRIBUTES AllocatedMem
,
382 ULONG AllocatedLength
,
384 BOOLEAN CaptureIfKernel
,
385 PLUID_AND_ATTRIBUTES
* Dest
,
391 SeReleaseLuidAndAttributesArray(
392 PLUID_AND_ATTRIBUTES Privilege
,
393 KPROCESSOR_MODE PreviousMode
,
394 BOOLEAN CaptureIfKernel
401 PLUID_AND_ATTRIBUTES Privileges
,
402 ULONG PrivilegeCount
,
403 ULONG PrivilegeControl
,
404 KPROCESSOR_MODE PreviousMode
409 SePrivilegePolicyCheck(
410 _Inout_ PACCESS_MASK DesiredAccess
,
411 _Inout_ PACCESS_MASK GrantedAccess
,
412 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
414 _Out_opt_ PPRIVILEGE_SET
*OutPrivilegeSet
,
415 _In_ KPROCESSOR_MODE PreviousMode
);
419 SeCheckPrivilegedObject(
420 IN LUID PrivilegeValue
,
421 IN HANDLE ObjectHandle
,
422 IN ACCESS_MASK DesiredAccess
,
423 IN KPROCESSOR_MODE PreviousMode
430 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
431 _In_ BOOLEAN EffectiveOnly
,
432 _In_ TOKEN_TYPE TokenType
,
433 _In_ SECURITY_IMPERSONATION_LEVEL Level
,
434 _In_ KPROCESSOR_MODE PreviousMode
,
435 _Out_ PTOKEN
* NewAccessToken
440 SepCaptureSecurityQualityOfService(
441 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
442 IN KPROCESSOR_MODE AccessMode
,
443 IN POOL_TYPE PoolType
,
444 IN BOOLEAN CaptureIfKernel
,
445 OUT PSECURITY_QUALITY_OF_SERVICE
*CapturedSecurityQualityOfService
,
451 SepReleaseSecurityQualityOfService(
452 IN PSECURITY_QUALITY_OF_SERVICE CapturedSecurityQualityOfService OPTIONAL
,
453 IN KPROCESSOR_MODE AccessMode
,
454 IN BOOLEAN CaptureIfKernel
461 IN KPROCESSOR_MODE AccessMode
,
462 IN POOL_TYPE PoolType
,
463 IN BOOLEAN CaptureIfKernel
,
464 OUT PSID
*CapturedSid
471 IN KPROCESSOR_MODE AccessMode
,
472 IN BOOLEAN CaptureIfKernel
477 SeCaptureSidAndAttributesArray(
478 _In_ PSID_AND_ATTRIBUTES SrcSidAndAttributes
,
479 _In_ ULONG AttributeCount
,
480 _In_ KPROCESSOR_MODE PreviousMode
,
481 _In_opt_ PVOID AllocatedMem
,
482 _In_ ULONG AllocatedLength
,
483 _In_ POOL_TYPE PoolType
,
484 _In_ BOOLEAN CaptureIfKernel
,
485 _Out_ PSID_AND_ATTRIBUTES
*CapturedSidAndAttributes
,
486 _Out_ PULONG ResultLength
);
490 SeReleaseSidAndAttributesArray(
491 _In_ _Post_invalid_ PSID_AND_ATTRIBUTES CapturedSidAndAttributes
,
492 _In_ KPROCESSOR_MODE AccessMode
,
493 _In_ BOOLEAN CaptureIfKernel
);
497 SeComputeQuotaInformationSize(
498 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
499 _Out_ PULONG QuotaInfoSize
);
505 IN KPROCESSOR_MODE AccessMode
,
506 IN POOL_TYPE PoolType
,
507 IN BOOLEAN CaptureIfKernel
,
508 OUT PACL
*CapturedAcl
515 IN KPROCESSOR_MODE AccessMode
,
516 IN BOOLEAN CaptureIfKernel
521 _Out_writes_bytes_opt_(DaclLength
) PACL AclDest
,
522 _Inout_ PULONG AclLength
,
523 _In_reads_bytes_(AclSource
->AclSize
) PACL AclSource
,
526 _In_ BOOLEAN IsInherited
,
527 _In_ BOOLEAN IsDirectoryObject
,
528 _In_ PGENERIC_MAPPING GenericMapping
);
532 _In_opt_ PACL ExplicitAcl
,
533 _In_ BOOLEAN ExplicitPresent
,
534 _In_ BOOLEAN ExplicitDefaulted
,
535 _In_opt_ PACL ParentAcl
,
536 _In_opt_ PACL DefaultAcl
,
537 _Out_ PULONG AclLength
,
540 _Out_ PBOOLEAN AclPresent
,
541 _Out_ PBOOLEAN IsInherited
,
542 _In_ BOOLEAN IsDirectoryObject
,
543 _In_ PGENERIC_MAPPING GenericMapping
);
547 SeDefaultObjectMethod(
549 SECURITY_OPERATION_CODE OperationType
,
550 PSECURITY_INFORMATION SecurityInformation
,
551 PSECURITY_DESCRIPTOR NewSecurityDescriptor
,
553 PSECURITY_DESCRIPTOR
*OldSecurityDescriptor
,
555 PGENERIC_MAPPING GenericMapping
560 SeSetWorldSecurityDescriptor(
561 SECURITY_INFORMATION SecurityInformation
,
562 PISECURITY_DESCRIPTOR SecurityDescriptor
,
569 IN PACCESS_TOKEN Token
,
570 IN SECURITY_IMPERSONATION_LEVEL Level
,
571 IN KPROCESSOR_MODE PreviousMode
,
572 OUT PACCESS_TOKEN
* NewToken
576 SeQuerySecurityAccessMask(IN SECURITY_INFORMATION SecurityInformation
,
577 OUT PACCESS_MASK DesiredAccess
);
580 SeSetSecurityAccessMask(IN SECURITY_INFORMATION SecurityInformation
,
581 OUT PACCESS_MASK DesiredAccess
);
585 SeFastTraverseCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
586 IN PACCESS_STATE AccessState
,
587 IN ACCESS_MASK DesiredAccess
,
588 IN KPROCESSOR_MODE AccessMode
);
592 SeCheckAuditPrivilege(
593 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
594 _In_ KPROCESSOR_MODE PreviousMode
);
598 SePrivilegedServiceAuditAlarm(
599 _In_opt_ PUNICODE_STRING ServiceName
,
600 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
601 _In_ PPRIVILEGE_SET PrivilegeSet
,
602 _In_ BOOLEAN AccessGranted
);
605 SepRmReferenceLogonSession(
609 SepRmDereferenceLogonSession(