PopEtGetProcessSidAndPackageIdentity

void __fastcall PopEtGetProcessSidAndPackageIdentity(_EPROCESS *a1, _DWORD *a2, __int64 a3){
  VOID *v6; 
  UINT64 SystemAppIdentifier; 
  UINT64 PackagedApplication; 

  *(_DWORD *)a3 = 0;
  *(_QWORD *)a2 = 0i64;
  a2[2] = 0;
  LOBYTE(SystemAppIdentifier) = 0;
  v6 = PsReferencePrimaryToken(a1);
  PsQueryProcessAttributesByToken(v6, (UINT8 *)&SystemAppIdentifier, (UINT8 *)&PackagedApplication);
  if( (_BYTE)SystemAppIdentifier )
  {
    SystemAppIdentifier = 256i64;
    PackagedApplication = 132i64;
    if( RtlQueryPackageIdentity(
           v6,
           (WCHAR *)(a3 + 4),
           &SystemAppIdentifier,
           (WCHAR *)(a3 + 260),
           &PackagedApplication,
           0i64) >= 0 )
    {
      *(_WORD *)a3 = (SystemAppIdentifier >> 1) - 1;
      *(_WORD *)(a3 + 2) = (PackagedApplication >> 1) - 1;
    }
  }
  if( SeQueryUserSidToken(v6, a2, 0x44ui64, &SystemAppIdentifier) < 0 )
  {
    *(_QWORD *)a2 = 0i64;
    a2[2] = 0;
  }
  ObFastDereferenceObject(&a1->Token, v6);
}

Referenced by:

PopEtGetProcessAppId