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