IopInitializeOfflineCrashDump

VOID __stdcall IopInitializeOfflineCrashDump(_LOADER_PARAMETER_EXTENSION *LdrBlckExtension){
  int v1; 
  NTSTATUS v2; 
  char v3; 
  _BYTE *v4; 
  INT64 v5; 
  UINT64 Create; 
  char v7; 
  char Value[7]; 
  HANDLE Handle; 
  PVOID P; 
  UINT64 ValueLength; 
  UNICODE_STRING KeyName; 
  GUID VendorGuid; 
  P = 0i64;
  v1 = 0;
  VendorGuid.Data1 = 2012912317;
  Handle = 0i64;
  dword_140C50940 = 0;
  *(_DWORD *)&VendorGuid.Data2 = 1295123289;
  *(_DWORD *)VendorGuid.Data4 = -198680387;
  *(_DWORD *)&VendorGuid.Data4[4] = 1266192359;
  *(_QWORD *)&KeyName.Length = 8388734i64;
  KeyName.Buffer = L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\CrashControl";
  Value[0] = 0;
  LODWORD(ValueLength) = 1;
  v7 = 0;
  if( LdrBlckExtension )
  {
    if( (unsigned int)(*((_DWORD *)LdrBlckExtension + 694) - 1) <= 1 )
    {
      PoOffCrashConfigTable = *(_OWORD *)((char *)LdrBlckExtension + 2776);
      xmmword_140C24E30 = *(_OWORD *)((char *)LdrBlckExtension + 2792);
      v2 = IopOpenRegistryKey(&Handle, 0i64, &KeyName, 0x20019ui64, 0);
      if( v2 >= 0 )
      {
        if( IopGetRegistryValue(Handle, (PWCHAR)L"EnableOfflineDumps", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) < 0 )
          goto LABEL_14;
        if( *((_DWORD *)P + 3) )
          v1 = *(_DWORD *)((char *)P + *((unsigned int *)P + 2));
        ExFreePoolWithTag(P, 0);
        if( v1 == 1 )
        {
          OfflineDumpEnabled = 1;
          v7 = 1;
        }
        else
        {
LABEL_14:
          OfflineDumpEnabled = 0;
          if( (unsigned int)PoOffCrashConfigTable >= 2 )
          {
            v3 = v7;
            if( (BYTE8(PoOffCrashConfigTable) & 4) != 0 )
              v3 = 4;
            v7 = v3;
          }
        }
        if( (int)IoGetEnvironmentVariableEx(
                    (WCHAR *)L"OfflineMemoryDumpUseCapability",
                    &VendorGuid,
                    Value,
                    &ValueLength,
                    0i64) < 0
          || Value[0] != v7 )
        {
          LODWORD(Create) = 7;
          IoSetEnvironmentVariableEx((WCHAR *)L"OfflineMemoryDumpUseCapability", &VendorGuid, &v7, 1ui64, Create);
        }
        if( OfflineDumpEnabled )
        {
          IopCachePreviousBootData(&Handle);
          IopInitializeInMemoryDumpData();
          IopConstructInMemoryDumpHeader(v5, v4);
          if( IopGetRegistryValue(Handle, (PWCHAR)L"AttemptOffline", 0i64, (KEY_VALUE_FULL_INFORMATION **)&P) >= 0 )
          {
            if( *((_DWORD *)P + 3) )
              DumpPolicyAttemptOffline = *(_DWORD *)((char *)P + *((unsigned int *)P + 2));
            ExFreePoolWithTag(P, 0);
          }
        }
      }
      else
      {
        dword_140C50940 = v2;
      }
    }
    else
    {
      dword_140C50940 = -1073741736;
    }
    if( Handle )
      ObCloseHandle(Handle, 0);
  }
  else
  {
    dword_140C50940 = -1073741275;
  }
}

Referenced by:

IopInitCrashDumpDuringSysInit