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);
485 ULONG PrimaryGroupIndex;
486 ULONG VariableLength;
487 ULONG DynamicPartSize, TotalSize;
488 ULONG PrivilegesIndex, GroupsIndex;
493 VariableLength =
Token->VariableLength;
501 DynamicPartSize =
Token->DefaultDacl ?
Token->DefaultDacl->AclSize : 0;
510 Token->DynamicCharged,
512 (
PVOID*)&AccessToken);
538 Token->TokenSource.SourceName,
539 sizeof(
Token->TokenSource.SourceName));
553 AccessToken->
TokenFlags =
Token->TokenFlags & ~TOKEN_SESSION_NOT_REFERENCED;
560 DPRINT1(
"SepRmReferenceLogonSession() failed (Status 0x%lx)\n",
Status);
571 DPRINT1(
"SepRmInsertLogonSessionIntoToken() failed (Status 0x%lx)\n",
Status);
598 ASSERT(VariableLength >= PrivilegesLength);
603 VariableLength -= PrivilegesLength;
613 if (
Token->UserAndGroups && (
Token->UserAndGroupCount > 0))
621 Token->UserAndGroups,
629 DPRINT1(
"RtlCopySidAndAttributesArray(UserAndGroups) failed (Status 0x%lx)\n",
Status);
642 DPRINT1(
"SepFindPrimaryGroupAndDefaultOwner failed (Status 0x%lx)\n",
Status);
649 if (
Token->RestrictedSids && (
Token->RestrictedSidCount > 0))
657 Token->RestrictedSids,
665 DPRINT1(
"RtlCopySidAndAttributesArray(RestrictedSids) failed (Status 0x%lx)\n",
Status);
705 Token->DefaultDacl->AclSize);
720 for (GroupsIndex = 1; GroupsIndex < AccessToken->
UserAndGroupCount; GroupsIndex++)
746 AccessToken->
TokenFlags &= ~TOKEN_HAS_ADMIN_GROUP;
760 for (PrivilegesIndex = 0; PrivilegesIndex < AccessToken->
PrivilegeCount; PrivilegesIndex++)
786 *NewAccessToken = AccessToken;
876 ULONG DynamicPartSize;
877 ULONG RestrictedSidsLength;
878 ULONG PrivilegesLength;
879 ULONG PrimaryGroupIndex;
880 ULONG RestrictedSidsInList;
881 ULONG RestrictedSidsInToken;
882 ULONG VariableLength, TotalSize;
883 ULONG PrivsInToken, PrivsInList;
884 ULONG GroupsInToken, GroupsInList;
885 BOOLEAN WantPrivilegesDisabled;
896 WantPrivilegesDisabled =
FALSE;
899 FoundPrivilege =
FALSE;
907 VariableLength =
Token->VariableLength;
909 if (RestrictedSidsIntoToken !=
NULL)
927 VariableLength += RestrictedSidsLength;
928 TotalSize =
FIELD_OFFSET(
TOKEN, VariablePart) + VariableLength + RestrictedSidsLength;
941 DynamicPartSize =
Token->DefaultDacl ?
Token->DefaultDacl->AclSize : 0;
951 Token->DynamicCharged,
953 (
PVOID*)&AccessToken);
956 DPRINT1(
"SepPerformTokenFiltering(): Failed to create the filtered token object (Status 0x%lx)\n",
Status);
982 Token->TokenSource.SourceName,
983 sizeof(
Token->TokenSource.SourceName));
994 AccessToken->
TokenFlags =
Token->TokenFlags & ~TOKEN_SESSION_NOT_REFERENCED;
1001 DPRINT1(
"SepPerformTokenFiltering(): Failed to reference the logon session (Status 0x%lx)\n",
Status);
1011 DPRINT1(
"SepPerformTokenFiltering(): Failed to insert the logon session into token (Status 0x%lx)\n",
Status);
1044 ASSERT(VariableLength >= PrivilegesLength);
1049 VariableLength -= PrivilegesLength;
1059 if (
Token->UserAndGroups && (
Token->UserAndGroupCount > 0))
1067 Token->UserAndGroups,
1075 DPRINT1(
"SepPerformTokenFiltering(): Failed to copy the groups into token (Status 0x%lx)\n",
Status);
1083 if (
Token->RestrictedSids && (
Token->RestrictedSidCount > 0))
1091 Token->RestrictedSids,
1099 DPRINT1(
"SepPerformTokenFiltering(): Failed to copy the restricted SIDs into token (Status 0x%lx)\n",
Status);
1108 if (RestrictedSidsIntoToken !=
NULL)
1110 for (RestrictedSidsInList = 0; RestrictedSidsInList < RestrictedSidsCount; RestrictedSidsInList++)
1113 if (RestrictedSidsIntoToken[RestrictedSidsInList].
Attributes != 0)
1116 DPRINT1(
"SepPerformTokenFiltering(): There mustn't be any attributes to restricted SIDs!\n");
1127 ASSERT(VariableLength >= RestrictedSidsLength);
1136 VariableLength -= RestrictedSidsLength;
1139 RestrictedSidsIntoToken,
1150 for (RestrictedSidsInToken = 0; RestrictedSidsInToken < AccessToken->
RestrictedSidCount; RestrictedSidsInToken++)
1164 Token->PrimaryGroup,
1170 DPRINT1(
"SepPerformTokenFiltering(): Failed searching for the primary group (Status 0x%lx)\n",
Status);
1203 if (
Token->DynamicPart &&
Token->DefaultDacl)
1209 Token->DefaultDacl->AclSize);
1222 WantPrivilegesDisabled =
TRUE;
1235 for (PrivsInToken = 0; PrivsInToken < AccessToken->
PrivilegeCount; PrivsInToken++)
1237 if (WantPrivilegesDisabled)
1268 if (PrivilegesToBeDeleted !=
NULL)
1271 for (PrivsInList = 0; PrivsInList < PrivilegesCount; PrivsInList++)
1275 &PrivilegesToBeDeleted[PrivsInList].Luid))
1278 FoundPrivilege =
TRUE;
1284 if (PrivsInList == PrivilegesCount)
1311 FoundPrivilege =
FALSE;
1320 if (SidsToBeDisabled !=
NULL)
1322 for (GroupsInToken = 0; GroupsInToken < AccessToken->
UserAndGroupCount; GroupsInToken++)
1324 for (GroupsInList = 0; GroupsInList < RegularGroupsSidCount; GroupsInList++)
1328 &SidsToBeDisabled[GroupsInList].Sid))
1337 if (GroupsInList == RegularGroupsSidCount)
1354 AccessToken->
TokenFlags &= ~TOKEN_HAS_ADMIN_GROUP;
1386 *FilteredToken = AccessToken;
1388 DPRINT(
"SepPerformTokenFiltering(): The token has been filtered!\n");
1450 ULONG PrivilegesCount = 0;
1451 ULONG SidsCount = 0;
1452 ULONG RestrictedSidsCount = 0;
1457 if (SidsToDisable !=
NULL)
1459 SidsCount = SidsToDisable->GroupCount;
1462 if (PrivilegesToDelete !=
NULL)
1464 PrivilegesCount = PrivilegesToDelete->PrivilegeCount;
1467 if (RestrictedSids !=
NULL)
1469 RestrictedSidsCount = RestrictedSids->GroupCount;
1474 PrivilegesToDelete->Privileges,
1475 SidsToDisable->Groups,
1476 RestrictedSids->Groups,
1479 RestrictedSidsCount,
1485 DPRINT1(
"SeFilterToken(): Failed to filter the token (Status 0x%lx)\n",
Status);
1498 DPRINT1(
"SeFilterToken(): Failed to insert the filtered token (Status 0x%lx)\n",
Status);
1503 *FilteredToken = AccessToken;
1577 ULONG PrivilegeCount, GroupCount;
1578 PSID OwnerSid, PrimaryGroupSid;
1581 LUID LocalAuthenticationId;
1588 PSID CapturedPrimaryGroupSid =
NULL;
1590 ULONG PrivilegesLength, UserLength, GroupsLength;
1614 LocalAuthenticationId = *AuthenticationId;
1677 LocalAuthenticationId = *AuthenticationId;
1678 LocalExpirationTime = *ExpirationTime;
1738 &CapturedPrivileges,
1764 &CapturedPrimaryGroupSid);
1771 if (DefaultDacl !=
NULL)
1777 &CapturedDefaultDacl);
1791 &LocalAuthenticationId,
1792 &LocalExpirationTime,
1800 CapturedPrimaryGroupSid,
1801 CapturedDefaultDacl,
1916 &CapturedSecurityQualityOfService,
1920 DPRINT1(
"NtDuplicateToken() failed to capture QoS! Status: 0x%x\n",
Status);
1932 DPRINT1(
"Failed to reference token (Status 0x%lx)\n",
Status);
2086 HANDLE FilteredTokenHandle;
2091 ULONG CapturedSidsCount = 0;
2092 ULONG CapturedPrivilegesCount = 0;
2093 ULONG CapturedRestrictedSidsCount = 0;
2094 ULONG ProbeSize = 0;
2106 if (SidsToDisable !=
NULL)
2111 CapturedSidsCount = SidsToDisable->GroupCount;
2118 if (PrivilegesToDelete !=
NULL)
2123 CapturedPrivilegesCount = PrivilegesToDelete->PrivilegeCount;
2130 if (RestrictedSids !=
NULL)
2135 CapturedRestrictedSidsCount = RestrictedSids->GroupCount;
2160 DPRINT1(
"NtFilterToken(): Failed to reference the token (Status 0x%lx)\n",
Status);
2165 if (SidsToDisable !=
NULL)
2178 DPRINT1(
"NtFilterToken(): Failed to capture the SIDs (Status 0x%lx)\n",
Status);
2184 if (PrivilegesToDelete !=
NULL)
2187 CapturedPrivilegesCount,
2193 &CapturedPrivileges,
2197 DPRINT1(
"NtFilterToken(): Failed to capture the privileges (Status 0x%lx)\n",
Status);
2203 if (RestrictedSids !=
NULL)
2206 CapturedRestrictedSidsCount,
2212 &CapturedRestrictedSids,
2216 DPRINT1(
"NtFilterToken(): Failed to capture the restricted SIDs (Status 0x%lx)\n",
Status);
2225 CapturedRestrictedSids,
2226 CapturedPrivilegesCount,
2228 CapturedRestrictedSidsCount,
2234 DPRINT1(
"NtFilterToken(): Failed to filter the token (Status 0x%lx)\n",
Status);
2244 &FilteredTokenHandle);
2247 DPRINT1(
"NtFilterToken(): Failed to insert the filtered token (Status 0x%lx)\n",
Status);
2269 if (CapturedSids !=
NULL)
2276 if (CapturedPrivileges !=
NULL)
2283 if (CapturedRestrictedSids !=
NULL)
#define STATUS_PRIVILEGE_NOT_HELD
#define ALIGN_UP_BY(size, align)
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
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 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
#define _Must_inspect_result_
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
#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