IopProcessWorkItem
VOID __stdcall IopProcessWorkItem(PVOID Parameter){
_WORD *v1;
void(__fastcall *v3)(_WORD *, __int64, PVOID);
int v4;
__int64 v5;
__int64 v6;
void *v7;
__int64 v8;
_WORD *v9;
__int128 v10;
v1 = (_WORD *)*((_QWORD *)Parameter + 5);
v3 = (void(__fastcall *)(_WORD *, __int64, PVOID))*((_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);
*((_QWORD *)KeGetCurrentThread() + 180) = &v10;
}
v6 = *((_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 )
*((_QWORD *)KeGetCurrentThread() + 180) = 0i64;
if( v7 )
{
PspRevertContainerImpersonation((ULONG_PTR)KeGetCurrentThread());
ObfDereferenceObjectWithTag(v7, 0x746C6644ui64);
}
if( *((_DWORD *)KeGetCurrentThread() + 121) )
KeBugCheckEx(
1u,
(ULONG_PTR)v3,
*((unsigned __int8 *)KeGetCurrentThread() + 586),
*((unsigned int *)KeGetCurrentThread() + 121),
0i64);
}Referenced by:
No references.