PsGetEffectiveContainerId

NTSTATUS __stdcall PsGetEffectiveContainerId(
        _CONTAINER_TYPE ContainerType,
        VOID **Thread,
        _CONTAINER_ID_INFO *ContainerIdInfo){
  _ETHREAD *WorkOnBehalfThread; 
  _ETHREAD *v8; 
  _EJOB *volatile Job; 
  __int32 v10; 
  __int64 v11; 
  __int32 v12; 
  _GUID v13; 
  UINT64 DerefThread; 

  LODWORD(DerefThread) = 0;
  if( ContainerType >= ContainerTypeMaximumList )
    return -1073741585;
  if( Thread )
  {
    ContainerIdInfo->ContainerId = 0i64;
    ContainerIdInfo->Flags = 0;
    if( (KeGetPcr()->Prcb._bf_0 & 0x10001) != 0 && Thread == (VOID **)KeGetCurrentThread() )
      return 0;
    WorkOnBehalfThread = PsGetWorkOnBehalfThread(Thread, &DerefThread);
    v8 = WorkOnBehalfThread;
    if( WorkOnBehalfThread )
    {
      Job = WorkOnBehalfThread->Tcb.Process->Job;
      ContainerIdInfo->Flags |= 1u;
    }
    else
    {
      Job = (_EJOB *volatile)*((_QWORD *)Thread[68] + 162);
    }
    if( !Job )
    {
LABEL_13:
      if( (_DWORD)DerefThread )
        ObfDereferenceObjectWithTag(v8, 0x746C6644ui64);
      return 0;
    }
    if( ContainerType )
    {
      v10 = ContainerType - 2;
      if( !v10 )
      {
        v11 = *((_QWORD *)Job + 104);
LABEL_12:
        if( !v11 )
          goto LABEL_13;
        v13 = *(_GUID *)(v11 + 1240);
        goto LABEL_21;
      }
      v12 = v10 - 1;
      if( !v12 )
      {
        v11 = *((_QWORD *)Job + 105);
        goto LABEL_12;
      }
      if( v12 != 1 )
        goto LABEL_13;
    }
    v13 = *(_GUID *)((char *)Job + 1240);
LABEL_21:
    ContainerIdInfo->ContainerId = v13;
    goto LABEL_13;
  }
  return -1073741584;
}

Referenced by:

NtQueryInformationThread