ObInitProcess
__int64 __fastcall ObInitProcess(struct _EX_RUNDOWN_REF *a1, ULONG_PTR a2, unsigned int a3, _BYTE *a4){
_HANDLE_TABLE *v8;
int v9;
unsigned int *HandleTable;
_HANDLE_TABLE *v12;
__int64 v13[5];
PVOID P;
P = 0i64;
if( !a1 )
{
v8 = 0i64;
HandleTable = (unsigned int *)ExCreateHandleTable(a2, 1i64);
LABEL_5:
if( HandleTable )
{
*(_QWORD *)(a2 + 1392) = HandleTable;
if( (unsigned __int8)SeAuditingWithTokenForSubcategory(0x7Bui64, 0i64) )
{
v13[0] = a2;
v13[1] = (__int64)a1;
ExEnumHandleTable(
HandleTable,
(__int64(__fastcall *)(unsigned int *, __int64 *, __int64, __int64))ObAuditInheritedHandleProcedure,
(__int64)v13,
0i64);
}
if( v8 )
ExReleaseRundownProtection(a1 + 139);
return 0i64;
}
else
{
*(_QWORD *)(a2 + 1392) = 0i64;
if( v8 )
ExReleaseRundownProtection(a1 + 139);
return 3221225626i64;
}
}
v8 = (_HANDLE_TABLE *)ObReferenceProcessHandleTable(a1);
if( !v8 )
return 3221225738i64;
v9 = ExDupHandleTable((_EPROCESS *)a2, v8, a3, (VOID **)a4, (_HANDLE_TABLE **)&P);
if( v9 >= 0 )
{
HandleTable = (unsigned int *)P;
goto LABEL_5;
}
ExReleaseRundownProtection(a1 + 139);
v12 = (_HANDLE_TABLE *)P;
if( P )
{
ExSweepHandleTable((_EPROCESS *)a2, (_HANDLE_TABLE *)P, 0);
ExpRemoveHandleTable((__int64)v12);
ExpFreeHandleTable(v12);
}
return(unsigned int)v9;
}Referenced by:
PspAllocateProcess