ExCreateHandleEx
void *__fastcall ExCreateHandleEx(__int64 a1, __int64 a2, int a3, int a4, __int64 a5){
int v5;
_ETHREAD *CurrentThread;
_HANDLE_TABLE_ENTRY *v8;
void *GenericHandleOverlay;
_HANDLE_TABLE_ENTRY *v10;
__int64 v12;
__int64 v13;
_EXHANDLE Handle;
v5 = a3 & 0x1FFFFFF;
HIDWORD(v13) = 0;
if( (a4 & 8) != 0 )
v5 |= 0x2000000u;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
LODWORD(v13) = v5;
v12 = (a2 << 16) ^ ((a4 << 17) ^ ((_DWORD)a2 << 16)) & 0xE0000 | 1;
--*((_WORD *)CurrentThread + 242);
Handle = 0i64;
v8 = ExpAllocateHandleTableEntry((_HANDLE_TABLE *)a1, &Handle);
GenericHandleOverlay = Handle.GenericHandleOverlay;
v10 = v8;
if( v8 )
{
if( a5
&& (*(_DWORD *)a5 || *(_DWORD *)(a5 + 4))
&& (unsigned int)ExpSetHandleExtraInfo(
(_HANDLE_TABLE *)a1,
Handle.GenericHandleOverlay,
(_HANDLE_TABLE_ENTRY_INFO *)a5) )
{
ExpFreeHandleTableEntry((_HANDLE_TABLE *)a1, (_EXHANDLE)GenericHandleOverlay, v10);
GenericHandleOverlay = 0i64;
}
else
{
if( *(_QWORD *)(a1 + 96) )
ExpUpdateDebugInfo((_HANDLE_TABLE *)a1, CurrentThread, GenericHandleOverlay, 1ui64);
v10->HighValue = v13;
v10->LowValue = v12;
}
}
KeLeaveCriticalRegionThread((__int64)CurrentThread);
return GenericHandleOverlay;
}Referenced by:
AlpcpAllocateMessageFromExtendedTables
AlpcpAllocateMessageFunction
ExCreateHandle
ObCompleteObjectDuplication
PspAllocateThread
RtlpInsertStringAtom