CmpHandlePageFileOpenNotification
INT64 __stdcall CmpHandlePageFileOpenNotification(){
unsigned int v0;
_ETHREAD *CurrentThread;
INT64 v2;
INT64 v3;
int v4;
int v5;
__int64 **v6;
INT64 *v7;
_CMHIVE *i;
_CMHIVE *NextActiveHive;
_CMHIVE *v10;
KAPC_STATE ApcState;
memset(&ApcState, 0, sizeof(ApcState));
v0 = 0;
if( _InterlockedExchange(&CmpBootPageFilesCreated, 1) )
{
return(unsigned int)-1073741790;
}
else
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
if( ExAcquireRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown) )
{
v4 = 0;
v5 = 0;
if( CmpWellKnownVolumeList )
{
v6 = &CmpWellKnownVolumeList;
do
{
v7 = (INT64 *)(v6 + 1);
if( (int)CmpVolumeManagerGetContextForFilePath(v2, (INT64)*v6, v3, (INT64 *)v6 + 1) >= 0
&& (int)CmpVolumeContextSendDeviceUsageNotification(*v7) >= 0 )
{
++v4;
}
v6 = &(&CmpWellKnownVolumeList)[2 * (unsigned int)++v5];
}
while( *v6 );
if( v4 )
{
CmpAttachToRegistryProcess(&ApcState);
for( i = 0i64; ; i = v10 )
{
NextActiveHive = CmpGetNextActiveHive(i);
v10 = NextActiveHive;
if( !NextActiveHive )
break;
CmpRecheckHiveVolumePolicy((INT64)NextActiveHive);
}
KiUnstackDetachProcess(&ApcState, 0i64);
}
}
ExReleaseRundownProtection((PEX_RUNDOWN_REF)&CmpShutdownRundown);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}
else
{
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return(unsigned int)-1073741431;
}
}
return v0;
}Referenced by:
NtInitializeRegistry