IopPassiveInterruptWorker
VOID __stdcall IopPassiveInterruptWorker(PVOID Context){
UINT64 *v2;
char v3[8];
struct _GROUP_AFFINITY Affinity;
struct _GROUP_AFFINITY PreviousAffinity;
v3[0] = 0;
PreviousAffinity = 0i64;
IopAcquireReleaseDispatcherLock((INT64)Context, 1);
if( !*((_BYTE *)Context + 28) )
{
Affinity = *(struct _GROUP_AFFINITY *)((char *)Context + 40);
KeSetSystemGroupAffinityThread(&Affinity, &PreviousAffinity);
}
IopAcquirePassiveInterruptBlockLock((__int64)Context, (unsigned __int8 *)v3);
while( 1 )
{
v2 = (UINT64 *)((char *)Context + 56);
if( !*((_BYTE *)Context + 65) )
break;
*((_BYTE *)Context + 65) = 0;
KxReleaseSpinLock(v2);
__writecr8((unsigned __int8)v3[0]);
KiInterruptDispatchCommon(*((_BYTE *)Context + 28) != 0, *((_DWORD *)Context + 5), 1, 0i64, 0i64);
IopAcquirePassiveInterruptBlockLock((__int64)Context, (unsigned __int8 *)v3);
}
*((_BYTE *)Context + 64) = 0;
KxReleaseSpinLock(v2);
__writecr8((unsigned __int8)v3[0]);
if( !*((_BYTE *)Context + 28) )
KeRevertToUserGroupAffinityThread(&PreviousAffinity);
IopAcquireReleaseDispatcherLock((INT64)Context, 0);
if( !*((_DWORD *)Context + 8) )
((void(__fastcall *)(_QWORD, __int64))off_140C00778[0])(*((unsigned int *)Context + 6), 2i64);
IopDereferencePassiveInterruptBlock(Context);
}Referenced by:
No references.