PoSetHiberRange

VOID __stdcall PoSetHiberRange(VOID *MemoryMap, UINT64 Flags, VOID *Address, UINT64 Length, UINT64 Tag){
  unsigned int v5; 
  VOID *v6; 
  ULONG_PTR v7; 
  int v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  unsigned __int64 v12; 
  unsigned __int64 v13; 
  ULONG_PTR BugCheckParameter4; 
  UINT64 SizeofSection[9]; 
  VOID *BugCheckParameter3; 
  VOID *ImageAddress; 
  ImageAddress = Address;
  BugCheckParameter3 = MemoryMap;
  v5 = Flags;
  v6 = MemoryMap;
  LODWORD(SizeofSection[0]) = 0;
  if( (KiBugCheckActive & 3) != 0 )
    return;
  if( MemoryMap )
  {
    v8 = Flags & 0x10000;
    if( (Flags & 0x10000) != 0 )
      goto LABEL_28;
  }
  else
  {
    v6 = (VOID *)HiberContext;
    BugCheckParameter3 = (VOID *)HiberContext;
    if( !HiberContext )
      KeBugCheckEx(0xA0u, 0x10Bui64, 0xAui64, 0i64, 0i64);
    v7 = *(unsigned int *)(HiberContext + 184);
    if( (_DWORD)v7 != 8 )
    {
      if( (_DWORD)v7 != 9 )
        KeBugCheckEx(0xA0u, 0x10Bui64, 0xAui64, v7, 0i64);
      return;
    }
    if( (Flags & 0xFFFFBFFF) != 0x10000 || !Length && (Flags & 0x4000) != 0 )
LABEL_28:
      KeBugCheckEx(0xA0u, 0x10Cui64, 0xAui64, (unsigned int)Flags, 0i64);
    v8 = Flags & 0x10000;
  }
  if( !Length )
  {
    if( v8 )
    {
      MmMarkImageForHiberPhase(ImageAddress);
      return;
    }
    if( (int)MmGetSectionRange(ImageAddress, &ImageAddress, SizeofSection) < 0 )
      KeBugCheckEx(0xA0u, 2ui64, 0xA11A7ui64, 0i64, 0i64);
    Length = LODWORD(SizeofSection[0]);
  }
  if( (v5 & 4) != 0 )
    v5 = v5 & 0xFFFFFFF9 | 2;
  if( (v5 & 0x4000) != 0 )
  {
    LODWORD(BugCheckParameter4) = Tag;
    PopSetRange((UINT64)v6, v5 & 0xFFFFBFFF, (UINT64)ImageAddress, Length, BugCheckParameter4);
  }
  else
  {
    v9 = (unsigned __int64)ImageAddress >> 12;
    v10 = ((unsigned __int64)ImageAddress + Length + 4095) >> 12;
    while( v9 < v10 )
    {
      v12 = v9 + 1;
      v13 = (unsigned __int64)MmGetPhysicalAddress((PVOID)(v9 << 12)).QuadPart >> 12;
      v11 = 1i64;
      if( v9 + 1 < v10 )
      {
        do
        {
          if( v12 + v13 - v9 != (unsigned __int64)MmGetPhysicalAddress((PVOID)((v9 << 12) + (v11 << 12))).QuadPart >> 12 )
            break;
          ++v11;
          ++v12;
        }
        while( v12 < v10 );
        v6 = BugCheckParameter3;
      }
      LODWORD(BugCheckParameter4) = Tag;
      PopSetRange((UINT64)v6, v5, v13, v11, BugCheckParameter4);
      v9 += v11;
    }
  }
}

Referenced by:

BgkResumePrepare
BgpFwMarkHiberPhase
HaliLocateHiberRanges
HalpDmaMarkHiberAdapter
HalpExtEnvMarkHiberRegions
HalpIommuDmarPageTableMarkHiberPhase
HalpIommuExtMarkHiberMemory
HalpIommuMarkHiberPhase
HalpMmAllocCtxMarkHiberPhase
HalpPciMarkHiberPhase
HalpTimerMarkHiberPhase
HvlDiscardPagesFromHibernation
HvlDiscardSecurePagesFromHibernation
HvlpMarkHvlPagesForHibernation
HvlpMarkHypervisorPagesForHibernation
IoGetDumpHiberRanges
KdMarkHiberPhase
KeMarkHiberPhase
MiGatherHiberRange
MiMarkHiberNotCachedPte
MiMarkKernelPageTablePte
MiMarkNonPagedHiberPhasePte
MmMarkHiberPhase
MmMarkHiberRange
PopAllocateHiberContext
PopBuildMemoryImageHeader
PopHiberInitializeResources
PopMarkComponentsBootPhase
PopMarkHiberPhase
RtlMarkHiberPhase
VslAllocateSecureHibernateResources