SeSetSessionIdToken
NTSTATUS __stdcall SeSetSessionIdToken(VOID *Token, UINT64 SessionId){
INT64 v2;
NTSTATUS v3;
_ADAPTER_OBJECT *SessionObjectById;
unsigned int v5;
_ETHREAD *CurrentThread;
bool v8;
void *v10;
signed __int32 v11[8];
PADAPTER_OBJECT DmaAdapter;
v3 = 0;
SessionObjectById = 0i64;
DmaAdapter = 0i64;
v5 = SessionId;
if( !SeTokenDoesNotTrackSessionObject )
SessionObjectById = (_ADAPTER_OBJECT *)MmGetSessionObjectById((unsigned int)SessionId);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite(*((_QWORD *)Token + 6), 1, v2);
_InterlockedOr(v11, 0);
if( *((_BYTE *)Token + 204) )
{
v3 = -1073741525;
}
else
{
if( (*((_DWORD *)Token + 50) & 0x4000) != 0 )
{
v10 = (void *)*((_QWORD *)Token + 135);
if( v10 )
{
SepDereferenceLowBoxNumberEntry(*((unsigned int *)Token + 30), v10);
*((_QWORD *)Token + 135) = 0i64;
}
}
if( *((_DWORD *)Token + 30) != v5 )
{
SepSetTokenSessionById((__int64)Token, v5, 1, (__int64)SessionObjectById, &DmaAdapter);
SessionObjectById = 0i64;
}
v8 = (*((_DWORD *)Token + 50) & 0x4000) == 0;
*((_DWORD *)Token + 30) = v5;
if( !v8 )
v3 = SepSetTokenLowboxNumber((_TOKEN *)Token, *((VOID **)Token + 98));
}
_InterlockedOr(v11, 0);
ExReleaseResourceLite(*((PERESOURCE *)Token + 6));
KeLeaveCriticalRegion();
if( SessionObjectById )
HalPutDmaAdapter(SessionObjectById);
if( DmaAdapter )
HalPutDmaAdapter(DmaAdapter);
return v3;
}Referenced by:
NtSetInformationToken
SeSetSessionIdTokenWithLinked
SepCopyAnonymousTokenAndSetSilo
SepCopyClientTokenAndSetSilo