PfSnBeginAppLaunch

NTSTATUS __stdcall PfSnBeginAppLaunch(_EPROCESS *Process, _UNICODE_STRING *ImageName, UINT64 LaunchTypeId){
  int v3; 
  _UNICODE_STRING *v6; 
  unsigned int v7; 
  int v8; 
  WCHAR *ImageFileName; 
  __int64 v10; 
  __int64 v11; 
  unsigned int ImagePathHash; 
  UINT8 IsHostingApplication; 
  int v14; 
  NTSTATUS v16; 
  UINT64 HashId; 
  _UNICODE_STRING *FullImageName; 
  UINT64 NameNumCharsOut; 
  _PF_ENABLE_STATUS EnableStatus; 
  VOID *v21[2]; 
  WCHAR ExecutableName[32]; 
  UINT64 a3[32]; 

  v3 = LaunchTypeId;
  EnableStatus = PfSvDefaultDisabled;
  NameNumCharsOut = 0i64;
  FullImageName = 0i64;
  LODWORD(HashId) = 0;
  v6 = 0i64;
  memset(ExecutableName, 0i64, sizeof(ExecutableName));
  v7 = 0;
  v8 = PfSnCheckScenario(PfAppLaunchScenarioType, &EnableStatus);
  if( v8 < 0 )
    goto LABEL_17;
  if( !ImageName )
  {
    v16 = PfCalculateProcessHash(Process, &FullImageName);
    v6 = FullImageName;
    v8 = v16;
    if( v16 < 0 )
    {
LABEL_17:
      PfSnLogScenarioDecision((__int64)ExecutableName, 0, 0, 15, 15, v8, -1i64);
      goto LABEL_14;
    }
    ImageName = FullImageName;
  }
  *(_UNICODE_STRING *)v21 = *ImageName;
  ImageFileName = PfSnFindImageFileName(ImageName, &NameNumCharsOut);
  if( !ImageFileName )
  {
    v8 = -1073741811;
    goto LABEL_17;
  }
  v10 = (unsigned int)NameNumCharsOut;
  if( (unsigned int)NameNumCharsOut >= 0x1D )
    v10 = 29i64;
  v11 = v10;
  memmove(ExecutableName, ImageFileName, 2 * v10);
  ImagePathHash = Process->ImagePathHash;
  ExecutableName[v11] = 0;
  *(_DWORD *)&ExecutableName[30] = ImagePathHash;
  IsHostingApplication = PfSnIsHostingApplication(ExecutableName);
  v8 = PfSnScanCommandLine(&HashId, IsHostingApplication);
  if( v8 < 0 )
    goto LABEL_17;
  *(_DWORD *)&ExecutableName[30] += HashId;
  FullImageName = (_UNICODE_STRING *)256;
  v8 = PfSnCheckModernApp((UINT64 *)((char *)&NameNumCharsOut + 4), &HashId, (UINT64)a3);
  if( v8 < 0 )
    goto LABEL_17;
  v14 = *(_DWORD *)&ExecutableName[30];
  if( HIDWORD(NameNumCharsOut) )
  {
    v14 = HashId + *(_DWORD *)&ExecutableName[30];
    v21[1] = a3;
    v7 = 8;
    LOWORD(v21[0]) = (_WORD)FullImageName;
    WORD1(v21[0]) = (_WORD)FullImageName;
  }
  *(_DWORD *)&ExecutableName[30] = v3 + v14;
  if( (dword_140C50290 & 0x20) != 0 || EnableStatus == PfSvTraceOnly )
    v7 |= 2u;
  v8 = PfSnBeginScenario(Process, ExecutableName, 0, v7, v21);
  if( v8 >= 0 )
    v8 = 0;
LABEL_14:
  if( v6 )
    ExFreePoolWithTag(v6, 0);
  return v8;
}

Referenced by:

PfProcessCreateNotification
PfSnAppLaunchScenarioControl