PfpParametersInitialize

NTSTATUS __stdcall PfpParametersInitialize(PFP_SUPERFETCH_PARAMETERS *SuperfetchParameters){
  PFP_SUPERFETCH_PARAMETERS v1; 
  VOID **v3; 
  NTSTATUS result; 
  VOID *v5; 
  PFP_SUPERFETCH_PARAMETERS *v6; 
  VOID *v7; 
  VOID *v8; 
  UINT64 v9; 
  _UNICODE_STRING *Class; 
  UINT64 CreateOptions; 
  _UNICODE_STRING DestinationString; 
  _UNICODE_STRING v13; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  UINT64 ValueSize; 

  v1 = 0;
  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  v13 = 0i64;
  DestinationString = 0i64;
  memset(SuperfetchParameters, 0i64, 0x220u);
  *((_QWORD *)SuperfetchParameters + 7) = SuperfetchParameters;
  *((_QWORD *)SuperfetchParameters + 6) = PfpParametersWatcher;
  *((_QWORD *)SuperfetchParameters + 4) = 0i64;
  *((_QWORD *)SuperfetchParameters + 9) = 0i64;
  *((_QWORD *)SuperfetchParameters + 10) = 0i64;
  *((_QWORD *)SuperfetchParameters + 11) = 0i64;
  SuperfetchParameters[17] = 0x80000000;
  SuperfetchParameters[20] = 16;
  SuperfetchParameters[19] = 64;
  SuperfetchParameters[21] = 5000;
  SuperfetchParameters[22] = 10000;
  SuperfetchParameters[23] = 10000;
  PfSnParametersSetDefaults((INT64)SuperfetchParameters);
  RtlInitUnicodeString(&DestinationString, L"\\KernelObjects\\SuperfetchParametersChanged");
  PfpCreateEvent(&DestinationString, SynchronizationEvent, (PVOID *)SuperfetchParameters);
  RtlInitUnicodeString(
    &v13,
    L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Session Manager\\Memory Management\\PrefetchParameters");
  LODWORD(CreateOptions) = 0;
  v3 = (VOID **)(SuperfetchParameters + 2);
  ObjectAttributes.ObjectName = &v13;
  ObjectAttributes.Length = 48;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.Attributes = 576;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  result = ZwCreateKey(
             (VOID **)SuperfetchParameters + 1,
             0xF003Fui64,
             &ObjectAttributes,
             0i64,
             0i64,
             CreateOptions,
             0i64);
  if( result < 0 )
  {
    *v3 = 0i64;
  }
  else
  {
    PfpParametersRead(SuperfetchParameters);
    PfSnParametersRead(SuperfetchParameters);
    v5 = *v3;
    LODWORD(ValueSize) = 4;
    v6 = SuperfetchParameters + 18;
    if( PfpGetParameter(v5, (WCHAR *)L"BootId", 4ui64, SuperfetchParameters + 18, &ValueSize) >= 0 )
      v1 = *v6;
    v8 = *v3;
    *v6 = v1 + 1;
    LODWORD(Class) = ValueSize;
    PfpSetParameter(v8, (WCHAR *)L"BootId", v7, SuperfetchParameters + 18, (UINT64)Class);
    return PfpSetBaseTime(*v3, (UINT64 *)(SuperfetchParameters + 135), v9);
  }
  return result;
}

Referenced by:

PfInitializeSuperfetch