IopProcessWorkItem
VOID __stdcall IopProcessWorkItem(VOID *Parameter){
_WORD *v1;
void(__fastcall *v3)(_WORD *, __int64, VOID *);
int v4;
__int64 v5;
_ETHREAD *v6;
VOID *v7;
__int64 v8;
_WORD *v9;
__int128 v10;
v1 = (_WORD *)*((_QWORD *)Parameter + 5);
v3 = (void(__fastcall *)(_WORD *, __int64, VOID *))*((_QWORD *)Parameter + 4);
v4 = 0;
v10 = 0i64;
v5 = *(_QWORD *)&NullGuid.Data1 - *(_QWORD *)((char *)Parameter + 68);
if( !v5 )
v5 = *(_QWORD *)NullGuid.Data4 - *(_QWORD *)((char *)Parameter + 76);
if( v5 )
{
v4 = 1;
v10 = *(_OWORD *)((char *)Parameter + 68);
KeGetCurrentThread()[1].WaitBlock[1].WaitListEntry.Flink = (_LIST_ENTRY *)&v10;
}
v6 = (_ETHREAD *)*((_QWORD *)Parameter + 7);
if( v6 )
{
PsImpersonateContainerOfThread(v6);
v7 = (VOID *)*((_QWORD *)Parameter + 7);
*((_QWORD *)Parameter + 7) = 0i64;
}
else
{
v7 = 0i64;
}
v8 = *((_QWORD *)Parameter + 6);
if( *((_DWORD *)Parameter + 16) )
{
v3(v1, v8, Parameter);
}
else
{
if( *v1 == 3 )
v9 = v1;
else
v9 = 0i64;
((void(__fastcall *)(_WORD *, __int64))v3)(v9, v8);
}
ObfDereferenceObjectWithTag(v1, 0x746C6644ui64);
if( v4 )
KeGetCurrentThread()[1].WaitBlock[1].WaitListEntry.Flink = 0i64;
if( v7 )
{
PspRevertContainerImpersonation((_ETHREAD *)KeGetCurrentThread());
ObfDereferenceObjectWithTag(v7, 0x746C6644ui64);
}
if( KeGetCurrentThread()->WaitBlock[3].SpareLong )
KeBugCheckEx(
1u,
v3,
(PVOID)KeGetCurrentThread()->ApcStateIndex,
(PVOID)KeGetCurrentThread()->CombinedApcDisable,
0i64);
}Referenced by:
No references.