VfPendingInitPhase1
VOID __stdcall VfPendingInitPhase1(){
PVOID *v0;
__int64 v1;
_HANDLE v2;
_OBJECT_ATTRIBUTES ObjectAttributes;
void *ThreadHandle;
PVOID Object;
ThreadHandle = 0i64;
*(&ObjectAttributes.Length + 1) = 0;
v0 = (PVOID *)&ViPendingWorkers;
*(&ObjectAttributes.Attributes + 1) = 0;
v1 = 0i64;
do
{
KeInitializeEvent((INT64)&ViPendingWorkers + 48 * v1 + 16, 1, 0);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = 0i64;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 512;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( PsCreateSystemThread(
&ThreadHandle,
0,
&ObjectAttributes,
0,
0i64,
ViPendingWorkerThread,
(char *)&ViPendingWorkers + 48 * v1) < 0 )
break;
Object = 0i64;
ObReferenceObjectByHandle(ThreadHandle, 0i64, (_OBJECT_TYPE *)PsThreadType, 0, &Object, 0i64);
v2 = (int)ThreadHandle;
*v0 = Object;
ZwClose(v2);
v1 = (unsigned int)(v1 + 1);
v0 += 6;
}
while( (unsigned int)v1 < 8 );
_InterlockedExchange(&ViPendingWorkersCount, v1);
}Referenced by:
VfInitSystemNoRebootNeeded
ViInitSystemPhase1