SeGetLogonSessionToken
INT64 __fastcall SeGetLogonSessionToken(VOID *TokenHandle, CHAR AccessMode, VOID **LogonSessionToken){
INT64 result;
struct _DMA_ADAPTER *v6;
int inserted;
UINT64 ImpersonationLevel;
PADAPTER_OBJECT DuplicateToken;
PVOID Handle;
_OBJECT_ATTRIBUTES ObjectAttributes;
PADAPTER_OBJECT DmaAdapter;
Handle = 0i64;
DuplicateToken = 0i64;
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
DmaAdapter = 0i64;
LODWORD(result) = ObReferenceObjectByHandle(
TokenHandle,
8u,
(POBJECT_TYPE)SeTokenObjectType,
AccessMode,
(PVOID *)&DmaAdapter,
0i64);
if( (int)result >= 0 )
{
v6 = DmaAdapter;
if( DmaAdapter[13].DmaOperations->FreeAdapterChannel )
{
ObjectAttributes.Length = 48;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = 0i64;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
ObjectAttributes.Attributes = AccessMode == 0 ? 0x200 : 0;
inserted = SepDuplicateToken(
(_TOKEN *)DmaAdapter[13].DmaOperations->FreeAdapterChannel,
&ObjectAttributes,
0,
TokenPrimary,
SecurityAnonymous,
0,
0,
(_TOKEN **)&DuplicateToken);
if( inserted >= 0 )
{
LODWORD(ImpersonationLevel) = 0;
inserted = ObInsertObjectEx(DuplicateToken, 0i64, 0xF01FFui64, 0i64, ImpersonationLevel, 0i64, &Handle);
if( inserted >= 0 )
*LogonSessionToken = Handle;
}
}
else
{
inserted = -1073741700;
}
HalPutDmaAdapter(v6);
return(unsigned int)inserted;
}
return result;
}Referenced by:
No references.