ObInitProcess
NTSTATUS __stdcall ObInitProcess(
_EX_RUNDOWN_REF *ParentProcess,
ULONG_PTR NewProcess,
UINT64 DuplicateArraySize,
VOID **DuplicateArray){
unsigned int v5;
_EPROCESS *v6;
_HANDLE_TABLE *v8;
int v9;
_HANDLE_TABLE *v10;
_HANDLE_TABLE *v12;
__int64 v13[5];
_HANDLE_TABLE *HandleTable;
HandleTable = 0i64;
v5 = DuplicateArraySize;
v6 = *(_EPROCESS **)&NewProcess;
if( !ParentProcess )
{
v8 = 0i64;
v10 = ExCreateHandleTable(*(_EPROCESS **)&NewProcess, 1ui64);
LABEL_5:
if( v10 )
{
v6->ObjectTable = v10;
if( SeAuditingWithTokenForSubcategory(123i64, 0i64) )
{
v13[0] = (__int64)v6;
v13[1] = (__int64)ParentProcess;
ExEnumHandleTable(
v10,
(__int64(__fastcall *)(_HANDLE_TABLE *, _HANDLE_TABLE_ENTRY *, _EXHANDLE, __int64))ObAuditInheritedHandleProcedure,
(__int64)v13,
0i64);
}
if( v8 )
ExReleaseRundownProtection(ParentProcess + 139);
return 0;
}
else
{
v6->ObjectTable = 0i64;
if( v8 )
ExReleaseRundownProtection(ParentProcess + 139);
return -1073741670;
}
}
v8 = ObReferenceProcessHandleTable((_EPROCESS *)ParentProcess);
if( !v8 )
return -1073741558;
v9 = ExDupHandleTable(v6, v8, v5, DuplicateArray, &HandleTable);
if( v9 >= 0 )
{
v10 = HandleTable;
goto LABEL_5;
}
ExReleaseRundownProtection(ParentProcess + 139);
v12 = HandleTable;
if( HandleTable )
{
ExSweepHandleTable(v6, HandleTable, 0);
ExpRemoveHandleTable(v12);
ExpFreeHandleTable(v12);
}
return v9;
}Referenced by:
PspAllocateProcess