17#define SE_TOKEN_DYNAMIC_SLIM 500
120 ULONG TokenFlags = 0;
121 ULONG PrimaryGroupIndex, DefaultOwnerIndex;
125 ULONG PrivilegesLength;
126 ULONG UserGroupsLength;
127 ULONG VariableLength;
128 ULONG DynamicPartSize, TotalSize;
129 ULONG TokenPagedCharges;
135 for (
i = 0;
i < GroupCount;
i++)
165 for (
i = 0;
i < GroupCount;
i++)
174 VariableLength = PrivilegesLength + UserGroupsLength;
187 DynamicPartSize = DefaultDacl ? DefaultDacl->AclSize : 0;
191 TokenPagedCharges = DynamicPartSize + TotalSize;
206 (
PVOID*)&AccessToken);
216 AccessToken->
TokenId = TokenId;
234 AccessToken->
TokenFlags = TokenFlags & ~TOKEN_SESSION_NOT_REFERENCED;
242 DPRINT1(
"SepRmReferenceLogonSession() failed (Status 0x%lx)\n",
Status);
253 DPRINT1(
"SepRmInsertLogonSessionIntoToken() failed (Status 0x%lx)\n",
Status);
290 if (PrivilegeCount > 0)
294 VariableLength -= PrivilegesLength;
358 DPRINT1(
"SepFindPrimaryGroupAndDefaultOwner failed (Status 0x%lx)\n",
Status);
399 if (DefaultDacl !=
NULL)
405 DefaultDacl->AclSize);
483 ULONG PrimaryGroupIndex;
484 ULONG VariableLength;
485 ULONG DynamicPartSize, TotalSize;
486 ULONG PrivilegesIndex, GroupsIndex;
491 VariableLength =
Token->VariableLength;
499 DynamicPartSize =
Token->DefaultDacl ?
Token->DefaultDacl->AclSize : 0;
508 Token->DynamicCharged,
510 (
PVOID*)&AccessToken);
536 Token->TokenSource.SourceName,
537 sizeof(
Token->TokenSource.SourceName));
551 AccessToken->
TokenFlags =
Token->TokenFlags & ~TOKEN_SESSION_NOT_REFERENCED;
558 DPRINT1(
"SepRmReferenceLogonSession() failed (Status 0x%lx)\n",
Status);
569 DPRINT1(
"SepRmInsertLogonSessionIntoToken() failed (Status 0x%lx)\n",
Status);
596 ASSERT(VariableLength >= PrivilegesLength);
601 VariableLength -= PrivilegesLength;
611 if (
Token->UserAndGroups && (
Token->UserAndGroupCount > 0))
619 Token->UserAndGroups,
627 DPRINT1(
"RtlCopySidAndAttributesArray(UserAndGroups) failed (Status 0x%lx)\n",
Status);
640 DPRINT1(
"SepFindPrimaryGroupAndDefaultOwner failed (Status 0x%lx)\n",
Status);
647 if (
Token->RestrictedSids && (
Token->RestrictedSidCount > 0))
655 Token->RestrictedSids,
663 DPRINT1(
"RtlCopySidAndAttributesArray(RestrictedSids) failed (Status 0x%lx)\n",
Status);
676 for (GroupsIndex = 0; GroupsIndex < AccessToken->
UserAndGroupCount; GroupsIndex++)
702 AccessToken->
TokenFlags &= ~TOKEN_HAS_ADMIN_GROUP;
716 for (PrivilegesIndex = 0; PrivilegesIndex < AccessToken->
PrivilegeCount; PrivilegesIndex++)
776 Token->DefaultDacl->AclSize);
780 *NewAccessToken = AccessToken;
870 ULONG DynamicPartSize;
871 ULONG RestrictedSidsLength;
872 ULONG PrivilegesLength;
873 ULONG PrimaryGroupIndex;
874 ULONG RestrictedSidsInList;
875 ULONG RestrictedSidsInToken;
876 ULONG VariableLength, TotalSize;
877 ULONG PrivsInToken, PrivsInList;
878 ULONG GroupsInToken, GroupsInList;
879 BOOLEAN WantPrivilegesDisabled;
890 WantPrivilegesDisabled =
FALSE;
893 FoundPrivilege =
FALSE;
901 VariableLength =
Token->VariableLength;
903 if (RestrictedSidsIntoToken !=
NULL)
921 VariableLength += RestrictedSidsLength;
922 TotalSize =
FIELD_OFFSET(
TOKEN, VariablePart) + VariableLength + RestrictedSidsLength;
935 DynamicPartSize =
Token->DefaultDacl ?
Token->DefaultDacl->AclSize : 0;
945 Token->DynamicCharged,
947 (
PVOID*)&AccessToken);
950 DPRINT1(
"SepPerformTokenFiltering(): Failed to create the filtered token object (Status 0x%lx)\n",
Status);
976 Token->TokenSource.SourceName,
977 sizeof(
Token->TokenSource.SourceName));
988 AccessToken->
TokenFlags =
Token->TokenFlags & ~TOKEN_SESSION_NOT_REFERENCED;
995 DPRINT1(
"SepPerformTokenFiltering(): Failed to reference the logon session (Status 0x%lx)\n",
Status);
1005 DPRINT1(
"SepPerformTokenFiltering(): Failed to insert the logon session into token (Status 0x%lx)\n",
Status);
1038 ASSERT(VariableLength >= PrivilegesLength);
1043 VariableLength -= PrivilegesLength;
1053 if (
Token->UserAndGroups && (
Token->UserAndGroupCount > 0))
1061 Token->UserAndGroups,
1069 DPRINT1(
"SepPerformTokenFiltering(): Failed to copy the groups into token (Status 0x%lx)\n",
Status);
1077 if (
Token->RestrictedSids && (
Token->RestrictedSidCount > 0))
1085 Token->RestrictedSids,
1093 DPRINT1(
"SepPerformTokenFiltering(): Failed to copy the restricted SIDs into token (Status 0x%lx)\n",
Status);
1102 if (RestrictedSidsIntoToken !=
NULL)
1104 for (RestrictedSidsInList = 0; RestrictedSidsInList < RestrictedSidsCount; RestrictedSidsInList++)
1107 if (RestrictedSidsIntoToken[RestrictedSidsInList].
Attributes != 0)
1110 DPRINT1(
"SepPerformTokenFiltering(): There mustn't be any attributes to restricted SIDs!\n");
1121 ASSERT(VariableLength >= RestrictedSidsLength);
1130 VariableLength -= RestrictedSidsLength;
1133 RestrictedSidsIntoToken,
1144 for (RestrictedSidsInToken = 0; RestrictedSidsInToken < AccessToken->
RestrictedSidCount; RestrictedSidsInToken++)
1158 Token->PrimaryGroup,
1164 DPRINT1(
"SepPerformTokenFiltering(): Failed searching for the primary group (Status 0x%lx)\n",
Status);
1197 if (
Token->DynamicPart &&
Token->DefaultDacl)
1203 Token->DefaultDacl->AclSize);
1216 WantPrivilegesDisabled =
TRUE;
1229 for (PrivsInToken = 0; PrivsInToken < AccessToken->
PrivilegeCount; PrivsInToken++)
1231 if (WantPrivilegesDisabled)
1262 if (PrivilegesToBeDeleted !=
NULL)
1265 for (PrivsInList = 0; PrivsInList < PrivilegesCount; PrivsInList++)
1269 &PrivilegesToBeDeleted[PrivsInList].Luid))
1272 FoundPrivilege =
TRUE;
1278 if (PrivsInList == PrivilegesCount)
1305 FoundPrivilege =
FALSE;
1314 if (SidsToBeDisabled !=
NULL)
1316 for (GroupsInToken = 0; GroupsInToken < AccessToken->
UserAndGroupCount; GroupsInToken++)
1318 for (GroupsInList = 0; GroupsInList < RegularGroupsSidCount; GroupsInList++)
1322 &SidsToBeDisabled[GroupsInList].Sid))
1331 if (GroupsInList == RegularGroupsSidCount)
1348 AccessToken->
TokenFlags &= ~TOKEN_HAS_ADMIN_GROUP;
1380 *FilteredToken = AccessToken;
1382 DPRINT(
"SepPerformTokenFiltering(): The token has been filtered!\n");
1444 ULONG PrivilegesCount = 0;
1445 ULONG SidsCount = 0;
1446 ULONG RestrictedSidsCount = 0;
1451 if (SidsToDisable !=
NULL)
1453 SidsCount = SidsToDisable->GroupCount;
1456 if (PrivilegesToDelete !=
NULL)
1458 PrivilegesCount = PrivilegesToDelete->PrivilegeCount;
1461 if (RestrictedSids !=
NULL)
1463 RestrictedSidsCount = RestrictedSids->GroupCount;
1468 PrivilegesToDelete->Privileges,
1469 SidsToDisable->Groups,
1470 RestrictedSids->Groups,
1473 RestrictedSidsCount,
1479 DPRINT1(
"SeFilterToken(): Failed to filter the token (Status 0x%lx)\n",
Status);
1492 DPRINT1(
"SeFilterToken(): Failed to insert the filtered token (Status 0x%lx)\n",
Status);
1497 *FilteredToken = AccessToken;
1571 ULONG PrivilegeCount, GroupCount;
1572 PSID OwnerSid, PrimaryGroupSid;
1575 LUID LocalAuthenticationId;
1582 PSID CapturedPrimaryGroupSid =
NULL;
1584 ULONG PrivilegesLength, UserLength, GroupsLength;
1608 LocalAuthenticationId = *AuthenticationId;
1671 LocalAuthenticationId = *AuthenticationId;
1672 LocalExpirationTime = *ExpirationTime;
1732 &CapturedPrivileges,
1758 &CapturedPrimaryGroupSid);
1765 if (DefaultDacl !=
NULL)
1771 &CapturedDefaultDacl);
1785 &LocalAuthenticationId,
1786 &LocalExpirationTime,
1794 CapturedPrimaryGroupSid,
1795 CapturedDefaultDacl,
1910 &CapturedSecurityQualityOfService,
1914 DPRINT1(
"NtDuplicateToken() failed to capture QoS! Status: 0x%x\n",
Status);
1926 DPRINT1(
"Failed to reference token (Status 0x%lx)\n",
Status);
2080 HANDLE FilteredTokenHandle;
2085 ULONG CapturedSidsCount = 0;
2086 ULONG CapturedPrivilegesCount = 0;
2087 ULONG CapturedRestrictedSidsCount = 0;
2088 ULONG ProbeSize = 0;
2100 if (SidsToDisable !=
NULL)
2105 CapturedSidsCount = SidsToDisable->GroupCount;
2112 if (PrivilegesToDelete !=
NULL)
2117 CapturedPrivilegesCount = PrivilegesToDelete->PrivilegeCount;
2124 if (RestrictedSids !=
NULL)
2129 CapturedRestrictedSidsCount = RestrictedSids->GroupCount;
2154 DPRINT1(
"NtFilterToken(): Failed to reference the token (Status 0x%lx)\n",
Status);
2159 if (SidsToDisable !=
NULL)
2172 DPRINT1(
"NtFilterToken(): Failed to capture the SIDs (Status 0x%lx)\n",
Status);
2178 if (PrivilegesToDelete !=
NULL)
2181 CapturedPrivilegesCount,
2187 &CapturedPrivileges,
2191 DPRINT1(
"NtFilterToken(): Failed to capture the privileges (Status 0x%lx)\n",
Status);
2197 if (RestrictedSids !=
NULL)
2200 CapturedRestrictedSidsCount,
2206 &CapturedRestrictedSids,
2210 DPRINT1(
"NtFilterToken(): Failed to capture the restricted SIDs (Status 0x%lx)\n",
Status);
2219 CapturedRestrictedSids,
2220 CapturedPrivilegesCount,
2222 CapturedRestrictedSidsCount,
2228 DPRINT1(
"NtFilterToken(): Failed to filter the token (Status 0x%lx)\n",
Status);
2238 &FilteredTokenHandle);
2241 DPRINT1(
"NtFilterToken(): Failed to insert the filtered token (Status 0x%lx)\n",
Status);
2262 if (CapturedSids !=
NULL)
2269 if (CapturedPrivileges !=
NULL)
2276 if (CapturedRestrictedSids !=
NULL)
#define STATUS_PRIVILEGE_NOT_HELD
#define ALIGN_UP_BY(size, align)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
static const WCHAR Cleanup[]
#define ExAllocatePoolWithTag(hernya, size, tag)
#define ExGetPreviousMode
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define EXCEPTION_EXECUTE_HANDLER
NTSYSAPI BOOLEAN WINAPI RtlCopySid(DWORD, PSID, PSID)
enum _SECURITY_IMPERSONATION_LEVEL SECURITY_IMPERSONATION_LEVEL
#define SE_CHANGE_NOTIFY_PRIVILEGE
#define _Must_inspect_result_
#define _When_(expr, annos)
#define KeGetPreviousMode()
_In_ ACCESS_MASK _In_ ULONG _Out_ PHANDLE TokenHandle
NTSYSAPI NTSTATUS NTAPI RtlCopySidAndAttributesArray(_In_ ULONG Count, _In_ PSID_AND_ATTRIBUTES Src, _In_ ULONG SidAreaSize, _In_ PSID_AND_ATTRIBUTES Dest, _In_ PSID SidArea, _Out_ PSID *RemainingSidArea, _Out_ PULONG RemainingSidAreaSize)
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID Owner
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ SaclSize PACL _Inout_ PULONG _Out_writes_bytes_to_opt_ OwnerSize PSID _Inout_ PULONG _Out_writes_bytes_to_opt_ PrimaryGroupSize PSID PrimaryGroup
NTSYSAPI ULONG NTAPI RtlLengthSid(IN PSID Sid)
_In_ ULONG _In_ ACCESS_MASK _In_ PSID Sid
NTSYSAPI BOOLEAN NTAPI RtlEqualSid(_In_ PSID Sid1, _In_ PSID Sid2)
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ BOOLEAN EffectiveOnly
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ BOOLEAN _In_ TOKEN_TYPE _Out_ PHANDLE NewTokenHandle
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ BOOLEAN _In_ TOKEN_TYPE TokenType
#define SE_GROUP_USE_FOR_DENY_ONLY
#define SE_GROUP_MANDATORY
#define SE_GROUP_ENABLED_BY_DEFAULT
#define DISABLE_MAX_PRIVILEGE
VOID NTAPI ExAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
EPROCESS KiInitialProcess
VOID NTAPI SepReleaseSid(_In_ PSID CapturedSid, _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN CaptureIfKernel)
Releases a captured SID.
NTSTATUS NTAPI SepRmInsertLogonSessionIntoToken(_Inout_ PTOKEN Token)
Inserts a logon session into an access token specified by the caller.
VOID SepRemovePrivilegeToken(_Inout_ PTOKEN Token, _In_ ULONG Index)
Removes a privilege from the token.
NTSTATUS NTAPI SepCaptureSid(_In_ PSID InputSid, _In_ KPROCESSOR_MODE AccessMode, _In_ POOL_TYPE PoolType, _In_ BOOLEAN CaptureIfKernel, _Out_ PSID *CapturedSid)
Captures a SID.
NTSTATUS SepFindPrimaryGroupAndDefaultOwner(_In_ PTOKEN Token, _In_ PSID PrimaryGroup, _In_opt_ PSID DefaultOwner, _Out_opt_ PULONG PrimaryGroupIndex, _Out_opt_ PULONG DefaultOwnerIndex)
Finds the primary group and default owner entity based on the submitted primary group instance and an...
const LUID SeCreateTokenPrivilege
NTSTATUS SepCreateTokenLock(_Inout_ PTOKEN Token)
Creates a lock for the token.
#define TOKEN_CREATE_METHOD
VOID NTAPI SeReleaseSidAndAttributesArray(_In_ _Post_invalid_ PSID_AND_ATTRIBUTES CapturedSidAndAttributes, _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN CaptureIfKernel)
Releases a captured SID with attributes.
#define SepAcquireTokenLockShared(Token)
VOID NTAPI SepReleaseAcl(_In_ PACL CapturedAcl, _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN CaptureIfKernel)
Releases (frees) a captured ACL from the memory pool.
VOID NTAPI SeReleaseLuidAndAttributesArray(_In_ PLUID_AND_ATTRIBUTES Privilege, _In_ KPROCESSOR_MODE PreviousMode, _In_ BOOLEAN CaptureIfKernel)
Releases a LUID with attributes structure.
ULONG RtlLengthSidAndAttributes(_In_ ULONG Count, _In_ PSID_AND_ATTRIBUTES Src)
Computes the length size of a SID.
VOID SepUpdatePrivilegeFlagsToken(_Inout_ PTOKEN Token)
Updates the token's flags based upon the privilege that the token has been granted....
NTSTATUS SepRmReferenceLogonSession(_Inout_ PLUID LogonLuid)
VOID SepRemoveUserGroupToken(_Inout_ PTOKEN Token, _In_ ULONG Index)
Removes a group from the token.
NTSTATUS NTAPI SepCaptureSecurityQualityOfService(_In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ KPROCESSOR_MODE AccessMode, _In_ POOL_TYPE PoolType, _In_ BOOLEAN CaptureIfKernel, _Out_ PSECURITY_QUALITY_OF_SERVICE *CapturedSecurityQualityOfService, _Out_ PBOOLEAN Present)
Captures the security quality of service data given the object attributes from an object.
VOID SepUpdateSinglePrivilegeFlagToken(_Inout_ PTOKEN Token, _In_ ULONG Index)
Updates the token's flags based upon the privilege that the token has been granted....
NTSTATUS NTAPI SepCaptureAcl(_In_ PACL InputAcl, _In_ KPROCESSOR_MODE AccessMode, _In_ POOL_TYPE PoolType, _In_ BOOLEAN CaptureIfKernel, _Out_ PACL *CapturedAcl)
Captures an access control list from an already valid input ACL.
NTSTATUS NTAPI SeCaptureSidAndAttributesArray(_In_ PSID_AND_ATTRIBUTES SrcSidAndAttributes, _In_ ULONG AttributeCount, _In_ KPROCESSOR_MODE PreviousMode, _In_opt_ PVOID AllocatedMem, _In_ ULONG AllocatedLength, _In_ POOL_TYPE PoolType, _In_ BOOLEAN CaptureIfKernel, _Out_ PSID_AND_ATTRIBUTES *CapturedSidAndAttributes, _Out_ PULONG ResultLength)
Captures a SID with attributes.
#define SepReleaseTokenLock(Token)
VOID NTAPI SepReleaseSecurityQualityOfService(_In_opt_ PSECURITY_QUALITY_OF_SERVICE CapturedSecurityQualityOfService, _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN CaptureIfKernel)
Releases (frees) the captured SQOS data from an object in the memory pool.
#define TOKEN_FILTER_METHOD
#define TOKEN_DUPLICATE_METHOD
NTSTATUS NTAPI SeCaptureLuidAndAttributesArray(_In_ PLUID_AND_ATTRIBUTES Src, _In_ ULONG PrivilegeCount, _In_ KPROCESSOR_MODE PreviousMode, _In_ PLUID_AND_ATTRIBUTES AllocatedMem, _In_ ULONG AllocatedLength, _In_ POOL_TYPE PoolType, _In_ BOOLEAN CaptureIfKernel, _Out_ PLUID_AND_ATTRIBUTES *Dest, _Inout_ PULONG Length)
HANDLE NTAPI PsGetCurrentProcessId(VOID)
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
POBJECT_TYPE SeTokenObjectType
#define STATUS_BAD_TOKEN_TYPE
#define STATUS_BAD_IMPERSONATION_LEVEL
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define ProbeForWriteHandle(Ptr)
#define ProbeForReadLargeInteger(Ptr)
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
CCHAR SourceName[TOKEN_SOURCE_LENGTH]
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
LARGE_INTEGER ExpirationTime
PSID_AND_ATTRIBUTES RestrictedSids
PLUID_AND_ATTRIBUTES Privileges
PSID_AND_ATTRIBUTES UserAndGroups
LUID OriginatingLogonSession
#define TAG_TOKEN_DYNAMIC
static NTSTATUS SepPerformTokenFiltering(_In_ PTOKEN Token, _In_opt_ PLUID_AND_ATTRIBUTES PrivilegesToBeDeleted, _In_opt_ PSID_AND_ATTRIBUTES SidsToBeDisabled, _In_opt_ PSID_AND_ATTRIBUTES RestrictedSidsIntoToken, _When_(PrivilegesToBeDeleted !=NULL, _In_) ULONG PrivilegesCount, _When_(SidsToBeDisabled !=NULL, _In_) ULONG RegularGroupsSidCount, _When_(RestrictedSidsIntoToken !=NULL, _In_) ULONG RestrictedSidsCount, _In_ ULONG PrivilegeFlags, _In_ KPROCESSOR_MODE PreviousMode, _Out_ PTOKEN *FilteredToken)
Private helper function responsible for creating a restricted access token, that is,...
NTSTATUS NTAPI SepDuplicateToken(_In_ PTOKEN Token, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ BOOLEAN EffectiveOnly, _In_ TOKEN_TYPE TokenType, _In_ SECURITY_IMPERSONATION_LEVEL Level, _In_ KPROCESSOR_MODE PreviousMode, _Out_ PTOKEN *NewAccessToken)
Duplicates an access token, from an existing valid token.
__kernel_entry NTSTATUS NTAPI NtCreateToken(_Out_ PHANDLE TokenHandle, _In_ ACCESS_MASK DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ TOKEN_TYPE TokenType, _In_ PLUID AuthenticationId, _In_ PLARGE_INTEGER ExpirationTime, _In_ PTOKEN_USER TokenUser, _In_ PTOKEN_GROUPS TokenGroups, _In_ PTOKEN_PRIVILEGES TokenPrivileges, _In_opt_ PTOKEN_OWNER TokenOwner, _In_ PTOKEN_PRIMARY_GROUP TokenPrimaryGroup, _In_opt_ PTOKEN_DEFAULT_DACL TokenDefaultDacl, _In_ PTOKEN_SOURCE TokenSource)
Creates an access token.
#define SE_TOKEN_DYNAMIC_SLIM
NTSTATUS NTAPI SepCreateToken(_Out_ PHANDLE TokenHandle, _In_ KPROCESSOR_MODE PreviousMode, _In_ ACCESS_MASK DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ TOKEN_TYPE TokenType, _In_ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, _In_ PLUID AuthenticationId, _In_ PLARGE_INTEGER ExpirationTime, _In_ PSID_AND_ATTRIBUTES User, _In_ ULONG GroupCount, _In_ PSID_AND_ATTRIBUTES Groups, _In_ ULONG GroupsLength, _In_ ULONG PrivilegeCount, _In_ PLUID_AND_ATTRIBUTES Privileges, _In_opt_ PSID Owner, _In_ PSID PrimaryGroup, _In_opt_ PACL DefaultDacl, _In_ PTOKEN_SOURCE TokenSource, _In_ BOOLEAN SystemToken)
Internal function responsible for access token object creation in the kernel. A fully created token o...
NTSTATUS NTAPI NtFilterToken(_In_ HANDLE ExistingTokenHandle, _In_ ULONG Flags, _In_opt_ PTOKEN_GROUPS SidsToDisable, _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, _In_opt_ PTOKEN_GROUPS RestrictedSids, _Out_ PHANDLE NewTokenHandle)
Creates an access token in a restricted form from the original existing token, that is,...
_Must_inspect_result_ __kernel_entry NTSTATUS NTAPI NtDuplicateToken(_In_ HANDLE ExistingTokenHandle, _In_ ACCESS_MASK DesiredAccess, _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes, _In_ BOOLEAN EffectiveOnly, _In_ TOKEN_TYPE TokenType, _Out_ PHANDLE NewTokenHandle)
Duplicates a token.
NTSTATUS NTAPI SeFilterToken(_In_ PACCESS_TOKEN ExistingToken, _In_ ULONG Flags, _In_opt_ PTOKEN_GROUPS SidsToDisable, _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete, _In_opt_ PTOKEN_GROUPS RestrictedSids, _Out_ PACCESS_TOKEN *FilteredToken)
Filters an access token from an existing token, making it more restricted than the previous one.
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_INSUFFICIENT_RESOURCES
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
_Must_inspect_result_ _In_ ULONG Flags
_In_ ACCESS_MASK _In_opt_ POBJECT_TYPE _In_ KPROCESSOR_MODE _Out_ PVOID _Out_opt_ POBJECT_HANDLE_INFORMATION HandleInformation
#define ObDereferenceObject
#define PsGetCurrentProcess
_Out_ PBOOLEAN _Out_ PBOOLEAN _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel
#define RtlEqualLuid(Luid1, Luid2)
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET * Privileges
_In_ KPROCESSOR_MODE PreviousMode
#define TOKEN_SESSION_NOT_REFERENCED
struct _LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES
struct _SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES
#define TOKEN_SANDBOX_INERT
#define SE_PRIVILEGE_ENABLED
#define TOKEN_IS_RESTRICTED
#define TOKEN_HAS_ADMIN_GROUP