WbInitializeEncryptionSegment

NTSTATUS __stdcall WbInitializeEncryptionSegment(INT64 *a1, wil_details_FeatureReportingCache *a2, INT64 a3, INT64 a4){
  int v6; 
  unsigned __int64 v7; 
  unsigned int v8; 
  NTSTATUS v9; 
  unsigned int v10; 
  size_t v11; 
  int v12; 
  __int64 v13; 
  VOID **v14; 
  wil_details_FeatureReportingCache *v15; 
  unsigned __int64 v16; 
  unsigned __int64 v17; 
  struct wil_details_FeatureReportingCache *v18; 
  struct wil_details_FeatureReportingCache *v19; 
  __int64 v20; 
  __int64 v21; 
  struct wil_details_FeatureReportingCache *v22; 
  __int64 v23; 
  __int64 v24; 
  struct wil_details_FeatureReportingCache *v25; 
  unsigned int v26; 
  int v27; 
  unsigned int v28; 
  _DWORD *v29; 
  const VOID *v30; 
  VOID *v31; 
  unsigned int v32; 
  unsigned __int64 v33; 
  unsigned __int64 v35; 
  unsigned int v36; 
  unsigned int v37; 
  int v38; 
  int v39[4]; 
  VOID *Source1; 
  unsigned int v41; 
  const VOID *v42; 
  int v43; 
  wil_details_FeatureReportingCache *v44; 
  INT64 v45; 
  unsigned int v46; 

  v45 = a3;
  v44 = a2;
  v6 = *(_DWORD *)a1;
  if( *(_DWORD *)a1 == 1 )
  {
    Source1 = (VOID *)a1[1];
    v35 = 16i64 * *((unsigned int *)Source1 + 60);
    v36 = -1;
    if( v35 <= 0xFFFFFFFF )
      v36 = 16 * *((_DWORD *)Source1 + 60);
    v46 = v36;
    v9 = v35 > 0xFFFFFFFF ? 0xC0000095 : 0;
    if( v35 > 0xFFFFFFFF )
      goto LABEL_46;
    v37 = v36 + 248;
    v11 = -1;
    if( v36 + 248 >= v36 )
      v11 = v36 + 248;
    v9 = v37 < v36 ? 0xC0000095 : 0;
    if( v37 < v36 )
      goto LABEL_46;
    v12 = 1;
    v13 = 248i64;
  }
  else
  {
    v43 = 3;
    if( (unsigned int)wil_details_FeatureReporting_ReportUsageToServiceDirect(
                         (struct wil_details_FeatureReportingCache *)a1,
                         a2,
                         a3,
                         a4,
                         wil_details_ServiceReportingKind_PotentialDeviceUsage)
      && g_wil_details_pfnFeatureLoggingHook )
    {
      g_wil_details_pfnFeatureLoggingHook(
        0xE67B5Au,
        &Feature_PdttSupport_logged_traits,
        0i64,
        0,
        (const enum wil_ReportingKind *)&v43,
        0i64,
        0,
        1ui64);
    }
    if( v6 )
    {
      v9 = -1073741811;
      goto LABEL_46;
    }
    Source1 = (VOID *)a1[1];
    v7 = 12i64 * *((unsigned int *)Source1 + 60);
    v8 = -1;
    if( v7 <= 0xFFFFFFFF )
      v8 = 12 * *((_DWORD *)Source1 + 60);
    v46 = v8;
    v9 = v7 > 0xFFFFFFFF ? 0xC0000095 : 0;
    if( v7 > 0xFFFFFFFF )
      goto LABEL_46;
    v10 = v8 + 244;
    v11 = -1;
    if( v8 + 244 >= v8 )
      v11 = v8 + 244;
    v9 = v10 < v8 ? 0xC0000095 : 0;
    if( v10 < v8 )
      goto LABEL_46;
    v12 = 0;
    v13 = 244i64;
  }
  *(_DWORD *)(a3 + 48) = v12;
  *(_DWORD *)(a3 + 52) = *((_DWORD *)a1 + 1);
  v14 = (VOID **)(a3 + 56);
  v9 = WbAlloc(v11);
  if( v9 >= 0 )
  {
    v15 = v44;
    if( v11 )
    {
      v16 = (unsigned __int64)v44[1];
      v17 = v16 + v11;
      if( v17 > 0x7FFFFFFF0000i64 || v17 < v16 )
        MEMORY[0x7FFFFFFF0000] = 0;
    }
    memmove(*v14, *(const VOID **)&v44[1], v11);
    v9 = sub_14065E218(*(PVOID *)&v15[1], v11, 1);
    if( v9 >= 0 )
    {
      v9 = sub_14065D5DC(*v14, v11);
      if( v9 >= 0 )
      {
        if( RtlCompareMemory(Source1, *v14, v13) != (_SIZE_T *)v13 )
        {
          v9 = -1073741811;
          goto LABEL_46;
        }
        if( *(_DWORD *)(a3 + 48) == 1 )
        {
          v29 = *v14;
          *(_QWORD *)(a3 + 32) = *(_QWORD *)&v44[1] - (*((_DWORD *)*v14 + 10) & 0xFFFFFFF);
          v26 = v29[12];
          v27 = v29[11];
        }
        else
        {
          v38 = 3;
          if( (unsigned int)wil_details_FeatureReporting_ReportUsageToServiceDirect(
                               v19,
                               v18,
                               v20,
                               v21,
                               wil_details_ServiceReportingKind_PotentialDeviceUsage)
            && g_wil_details_pfnFeatureLoggingHook )
          {
            g_wil_details_pfnFeatureLoggingHook(
              0xE67B5Au,
              &Feature_PdttSupport_logged_traits,
              0i64,
              0,
              (const enum wil_ReportingKind *)&v38,
              0i64,
              0,
              1ui64);
          }
          if( *(_DWORD *)(a3 + 48) )
          {
            v9 = -1073741811;
            goto LABEL_46;
          }
          v25 = (struct wil_details_FeatureReportingCache *)(*((_DWORD *)*v14 + 10) & 0xFFFFFFF);
          *(_QWORD *)(a3 + 32) = *(_QWORD *)&v44[1] - (_QWORD)v25;
          v39[0] = 3;
          if( (unsigned int)wil_details_FeatureReporting_ReportUsageToServiceDirect(
                               v25,
                               v22,
                               v23,
                               v24,
                               wil_details_ServiceReportingKind_PotentialDeviceUsage)
            && g_wil_details_pfnFeatureLoggingHook )
          {
            g_wil_details_pfnFeatureLoggingHook(
              0xE67B5Au,
              &Feature_PdttSupport_logged_traits,
              0i64,
              0,
              (const enum wil_ReportingKind *)v39,
              0i64,
              0,
              1ui64);
          }
          if( *(_DWORD *)(a3 + 48) )
          {
            v9 = -1073741811;
            goto LABEL_46;
          }
          v26 = *((_DWORD *)*v14 + 12);
          v27 = *((_DWORD *)*v14 + 11);
        }
        v39[2] = v26;
        v28 = v27 & 0xFFFFFFF;
        if( !v26 )
          goto LABEL_25;
        v30 = (const VOID *)(*(_QWORD *)(a3 + 32) + v28);
        v42 = v30;
        v31 = (VOID *)(4i64 * v26);
        Source1 = v31;
        v32 = -1;
        if( (unsigned __int64)v31 <= 0xFFFFFFFF )
          v32 = 4 * v26;
        v41 = v32;
        v9 = (unsigned __int64)v31 > 0xFFFFFFFF ? 0xC0000095 : 0;
        if( (unsigned __int64)v31 <= 0xFFFFFFFF )
        {
          if( v32 )
          {
            v33 = (unsigned __int64)v30 + v32;
            if( v33 > 0x7FFFFFFF0000i64 || v33 < (unsigned __int64)v30 )
              MEMORY[0x7FFFFFFF0000] = 0;
          }
          v9 = WbAlloc(v32);
          if( v9 >= 0 )
          {
            memmove(*(VOID **)(a3 + 40), v30, v32);
LABEL_25:
            *(_DWORD *)(a3 + 16) = 1;
          }
        }
      }
    }
  }
LABEL_46:
  *(_DWORD *)(a3 + 20) = v9;
  return v9;
}

Referenced by:

WbGetInitializedEncryptionSegment