PspInitializeFullProcessImageName

INT64 __fastcall PspInitializeFullProcessImageName(INT64 a1, INT64 a2){
  OBJECT_NAME_INFORMATION *v4; 
  _FILE_OBJECT *v5; 
  int v6; 
  int v7; 
  UINT8 *v8; 
  OBJECT_NAME_INFORMATION *PoolWithTag; 
  OBJECT_NAME_INFORMATION *v11; 
  _SECTION *v12; 
  _CONTROL_AREA *v13; 
  SIZE_T NumberOfBytes; 
  __int128 FileName; 
  OBJECT_NAME_INFORMATION Src; 
  memset((INT64)&Src, 0i64);
  v4 = 0i64;
  if( (*(_DWORD *)(a2 + 2172) & 1) != 0 )
    goto LABEL_17;
  if( a1 )
  {
    v5 = *(_FILE_OBJECT **)(a1 + 176);
  }
  else
  {
    v12 = *(_SECTION **)(a2 + 1304);
    if( !v12 )
    {
      v7 = -1073741637;
      goto LABEL_11;
    }
    v13 = MiSectionControlArea(v12);
    v5 = MiReferenceControlAreaFile(v13);
  }
  FileName = (__int128)v5->FileName;
  PspSetProcessShortName(a2, (unsigned __int16 *)&FileName);
  LODWORD(NumberOfBytes) = 272;
  v6 = ObQueryNameStringMode(v5, &Src, 0x110ui64, &NumberOfBytes, 0);
  v7 = v6;
  if( v6 == -2147483643 || v6 == -1073741789 || v6 == -1073741820 )
  {
    if( (unsigned int)NumberOfBytes <= 0x110 )
      goto LABEL_17;
    PoolWithTag = (OBJECT_NAME_INFORMATION *)ExAllocatePoolWithTag(
                                               NonPagedPoolNx,
                                               (unsigned int)NumberOfBytes,
                                               0x6E497350ui64);
    v4 = PoolWithTag;
    if( !PoolWithTag )
      goto LABEL_17;
    v7 = ObQueryNameStringMode(v5, PoolWithTag, (unsigned int)NumberOfBytes, &NumberOfBytes, 0);
    if( v7 >= 0 )
      goto LABEL_12;
    ExFreePoolWithTag(v4, 0);
LABEL_11:
    if( v7 >= 0 )
      goto LABEL_12;
    goto LABEL_17;
  }
  if( v6 >= 0 && (unsigned int)(NumberOfBytes - 17) <= 0xFF )
  {
    v8 = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, (unsigned int)NumberOfBytes, 0x6E497350ui64);
    v4 = (OBJECT_NAME_INFORMATION *)v8;
    if( v8 )
    {
      *(OBJECT_NAME_INFORMATION *)v8 = Src;
      *((_QWORD *)v8 + 1) = v8 + 16;
      memmove(v8 + 16, (UINT8 *)Src.Name.Buffer, Src.Name.MaximumLength);
      goto LABEL_11;
    }
  }
LABEL_17:
  LODWORD(NumberOfBytes) = 16;
  v11 = (OBJECT_NAME_INFORMATION *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x10ui64, 0x6E497350ui64);
  v4 = v11;
  if( v11 )
  {
    memset((INT64)v11, 0i64);
    v7 = 0;
  }
  else
  {
    v7 = -1073741801;
  }
LABEL_12:
  *(_QWORD *)(a2 + 1472) = v4;
  return(unsigned int)v7;
}

Referenced by:

PspAllocateProcess