AlpcpExposeTokenAttribute

char __fastcall AlpcpExposeTokenAttribute(__int64 a1, __int64 a2, _QWORD *a3, _DWORD *a4){
  __int64 v8; 
  int v9; 
  PERESOURCE *ClientToken; 
  __int64 v11; 
  int v12; 
  _ETHREAD *v13; 
  _ETHREAD *CurrentThread; 
  PERESOURCE v15; 
  PERESOURCE *v17; 
  PERESOURCE v18; 
  PERESOURCE v19; 
  _SECURITY_CLIENT_CONTEXT result; 
  char v21; 
  memset((INT64)&result, 0i64);
  v9 = 0;
  ClientToken = 0i64;
  v17 = 0i64;
  LODWORD(v11) = *(_DWORD *)(a2 + 40);
  if( (v11 & 0x80u) != 0i64 )
    return v11;
  v11 = *(_QWORD *)(a2 + 136);
  if( v11 )
  {
    if( *(int *)(v11 + 36) < 1 )
      return v11;
    ClientToken = *(PERESOURCE **)(v11 + 48);
    v17 = ClientToken;
    v21 = 0;
    goto LABEL_13;
  }
  v8 = *(_QWORD *)(a2 + 24);
  LOBYTE(v11) = *(_DWORD *)(a1 + 416) & 6;
  if( (_BYTE)v11 != 2 )
    return v11;
  if( !v8 )
    return v11;
  v12 = *(_DWORD *)(v8 + 416);
  LOBYTE(v11) = v12 & 6;
  if( (v12 & 6) != 4 )
    return v11;
  if( (v12 & 0x400) == 0 )
  {
    ClientToken = *(PERESOURCE **)(v8 + 80);
    if( !ClientToken )
      return v11;
    v17 = *(PERESOURCE **)(v8 + 80);
LABEL_12:
    v21 = 0;
    if( v9 < 0 )
      return v11;
    goto LABEL_13;
  }
  v13 = *(_ETHREAD **)(a2 + 32);
  if( !v13 )
    return v11;
  LODWORD(v11) = SeCreateClientSecurityEx(v13, (_SECURITY_QUALITY_OF_SERVICE *)(v8 + 260), 0, &result);
  v9 = v11;
  if( (int)v11 < 0 )
    goto LABEL_12;
  ClientToken = (PERESOURCE *)result.ClientToken;
  v17 = (PERESOURCE *)result.ClientToken;
  v21 = 1;
LABEL_13:
  v19 = ClientToken[3];
  v18 = ClientToken[2];
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  LOBYTE(v8) = 1;
  ExAcquireResourceSharedLite(v17[6], v8);
  v15 = v17[7];
  ExReleaseResourceLite(v17[6]);
  KeLeaveCriticalRegion();
  if( v21 )
    HalPutDmaAdapter((PADAPTER_OBJECT)result.ClientToken);
  *a3 = v18;
  LOBYTE(v11) = (_BYTE)v19;
  a3[1] = v19;
  a3[2] = v15;
  *a4 |= 0x8000000u;
  return v11;
}

Referenced by:

AlpcpExposeAttributes