VfPoolInitPhase1
INT64 __stdcall VfPoolInitPhase1(){
INT64 result;
__int64 *v1;
void *v2;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
void *ThreadHandle;
PVOID Object;
ThreadHandle = 0i64;
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
result = (unsigned int)MmVerifierData;
if( (MmVerifierData & 0x400000) == 0 || (MmVerifierData & 1) != 0 )
{
v1 = qword_140CEC868;
do
{
KeInitializeEvent((_KEVENT *)v1 - 1, SynchronizationEvent, 0);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = 0i64;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 512;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( PsCreateSystemThread(
&ThreadHandle,
0,
&ObjectAttributes,
0i64,
0i64,
(PKSTART_ROUTINE)ViPoolDelayFreeTrimThreadRoutine,
v1 - 5) >= 0 )
{
Object = 0i64;
ObReferenceObjectByHandle(ThreadHandle, 0, (POBJECT_TYPE)PsThreadType, 0, &Object, 0i64);
v2 = ThreadHandle;
*v1 = (__int64)Object;
ZwClose(v2);
InitializeSListHead((_SLIST_HEADER *)(v1 - 5));
_InterlockedExchange((volatile __int32 *)v1 + 2, 1);
}
v1 += 8;
result = (INT64)qword_140CEC8E8;
}
while( (__int64)v1 < (__int64)qword_140CEC8E8 );
}
return result;
}Referenced by:
VfInitSystemNoRebootNeeded
ViInitSystemPhase1