PoInitHiberServices

VOID __stdcall PoInitHiberServices(UINT8 Setup){
  WCHAR v1; 
  bool v2; 
  _DWORD *PoolWithTag; 
  int v4; 
  void *v5; 
  unsigned int v6; 
  __int64 v7; 
  CHAR *v8; 
  VOID *a1; 
  a1 = 0i64;
  RtlInitUnicodeString(&PoHiberFileRoot, L"\\OSDataRoot", v1);
  v2 = 1;
  PoolWithTag = 0i64;
  if( PopHiberEnabledReg == -1 )
  {
    v2 = (unsigned int)(PopHiberEnabledDefaultReg - 1) > 0xFFFFFFFD;
  }
  else if( PopHiberEnabledReg )
  {
    v2 = 0;
  }
  v4 = PopHiberFileTypeReg;
  if( PopHiberFileTypeReg != -1 || (v4 = PopHiberFileTypeDefaultReg, PopHiberFileTypeDefaultReg != -1) )
    PopHiberFileType = v4;
  EmClientQueryRuleState(&GUID_EM_REMOVE_BAD_S3_PAGE_RULE, &v8);
  if( !(unsigned __int8)ExIsSoftBoot() && (int)PopBcdOpen(&a1) >= 0 )
  {
    v5 = a1;
    PopBcdEstablishResumeObject(a1, 0i64);
    PopBcdClearPendingResume(v5);
    PopBcdClose(v5);
  }
  if( (unsigned int)ZwQuerySystemInformation() == -1073741789 )
  {
    PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0i64, 0x72626968ui64);
    if( PoolWithTag )
    {
      if( (int)ZwQuerySystemInformation() >= 0 && *(_BYTE *)PoolWithTag && PoolWithTag[1] != -1 )
      {
        v2 = 1;
        PoDisableSleepStates(2i64, 8i64, &v8);
      }
    }
  }
  v6 = 0;
  v7 = 0i64;
  do
  {
    if( *(_DWORD *)&PopHiberForceDisabledReg[v7] )
    {
      v2 = 1;
      if( (int)PoDisableSleepStates(*(unsigned int *)((char *)PopHiberForceDisabledReasonMap + v7), 8i64, &v8) < 0 )
        PoShutdownBugCheck(1u, 0xA0ui64, 0x110ui64, 0i64, 0i64, 0i64);
    }
    ++v6;
    v7 += 4i64;
  }
  while( v6 < 2 );
  PopAcquireTransitionLock();
  PopAcquirePolicyLock();
  PopEnableHiberFile(!v2, 0);
  PopReleasePolicyLock();
  PopReleaseTransitionLock();
  if( qword_140C54108 )
    qword_140C54108();
  if( PoolWithTag )
    ExFreePoolWithTag(PoolWithTag, 0x72626968u);
}

Referenced by:

CmCompleteRegistryInitialization