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