NtAlpcCreateSecurityContext
NTSTATUS __stdcall NtAlpcCreateSecurityContext(VOID *PortHandle, UINT64 Flags, _ALPC_SECURITY_ATTR *SecurityAttribute){
_ETHREAD *CurrentThread;
char PreviousMode;
__int64 v7;
__m128i v8;
unsigned __int64 v9;
unsigned __int64 v10;
__int64 v11;
int v12;
_SECURITY_QUALITY_OF_SERVICE *v13;
_ADAPTER_OBJECT *v14;
unsigned __int64 v16;
_KALPC_SECURITY_DATA *SecurityDataPointer;
int v18;
__int128 v19;
__int64 v20;
PVOID Object;
v19 = 0i64;
v20 = 0i64;
SecurityDataPointer = 0i64;
v18 = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
if( (_DWORD)Flags )
{
v12 = -1073741811;
}
else
{
PreviousMode = KeGetCurrentThread()->PreviousMode;
if( PreviousMode )
{
if( ((unsigned __int8)SecurityAttribute & 7) != 0 )
ExRaiseDatatypeMisalignment();
v7 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)SecurityAttribute < 0x7FFFFFFF0000i64 )
v7 = (__int64)SecurityAttribute;
*(_BYTE *)v7 = *(_BYTE *)v7;
*(_BYTE *)(v7 + 23) = *(_BYTE *)(v7 + 23);
v8 = *(__m128i *)SecurityAttribute;
v20 = *((_QWORD *)SecurityAttribute + 2);
v9 = _mm_srli_si128(v8, 8).m128i_u64[0];
v10 = v9;
if( v9 )
{
v11 = v9;
if( v9 >= 0x7FFFFFFF0000i64 )
v11 = 0x7FFFFFFF0000i64;
SecurityDataPointer = *(_KALPC_SECURITY_DATA **)v11;
v18 = *(_DWORD *)(v11 + 8);
}
}
else
{
v16 = _mm_srli_si128(*(__m128i *)SecurityAttribute, 8).m128i_u64[0];
v10 = v16;
if( v16 )
{
SecurityDataPointer = *(_KALPC_SECURITY_DATA **)v16;
v18 = *(_DWORD *)(v16 + 8);
}
}
Object = 0i64;
v12 = ObReferenceObjectByHandle(PortHandle, 1ui64, AlpcPortObjectType, PreviousMode, &Object, 0i64);
if( v12 >= 0 )
{
if( !v10 )
{
SecurityDataPointer = *(_KALPC_SECURITY_DATA **)((char *)Object + 260);
v18 = *((_DWORD *)Object + 67);
}
LOBYTE(v13) = 1;
v14 = (_ADAPTER_OBJECT *)Object;
v12 = AlpcpCreateSecurityContext((_ALPC_PORT *)Object, (UINT8)KeGetCurrentThread(), v13, &SecurityDataPointer);
if( v12 >= 0 )
{
*((_QWORD *)SecurityAttribute + 2) = MEMORY[8];
AlpcpDereferenceBlobEx(0i64, 1i64);
}
HalPutDmaAdapter(v14);
}
}
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v12;
}Referenced by:
No references.