WmipCopyFromEventQueues
NTSTATUS __fastcall WmipCopyFromEventQueues(
_KEVENT **a1,
unsigned int a2,
_DWORD *a3,
__int64 a4,
_DWORD *a5,
_QWORD *a6,
char a7){
__int64 v7;
_KEVENT **v8;
_KEVENT **v9;
__int64 i;
__int64 v11;
__int64 v12;
int v14;
_DWORD *v15;
unsigned int v16;
__int64 v17;
unsigned int v18;
__int64 *v19;
__int64 v20;
__int64 v21;
unsigned int *v22;
unsigned int v23;
__int64 v24;
_KEVENT *v25;
NTSTATUS result;
__int64 v27;
_KEVENT *v28;
unsigned __int64 v29;
__int64 v30;
v7 = a2;
v8 = a1;
if( a2 )
{
v9 = a1 + 1;
for( i = a2; i; --i )
{
v11 = (__int64)*(v9 - 1);
if( a7 )
{
v30 = *(_QWORD *)(v11 + 96);
if( v30 && *(_DWORD *)(v11 + 116) )
{
*v9 = (_KEVENT *)v30;
*(_WORD *)(v30 + 10) = 0;
*((_DWORD *)*v9 + 2) |= *(unsigned __int16 *)(v11 + 120) << 16;
*(_DWORD *)(v11 + 120) = 0;
goto LABEL_6;
}
}
else
{
v12 = *(_QWORD *)(v11 + 128);
if( v12 && *(_DWORD *)(v11 + 148) )
{
*v9 = (_KEVENT *)v12;
*(_WORD *)(v12 + 10) = 0;
*((_DWORD *)*v9 + 2) |= *(unsigned __int16 *)(v11 + 152) << 16;
*(_DWORD *)(v11 + 152) = 0;
goto LABEL_6;
}
}
*v9 = 0i64;
LABEL_6:
v9 += 2;
}
}
v14 = 0;
v15 = 0i64;
while( 1 )
{
v16 = -1;
v17 = 0x7FFFFFFFFFFFFFFFi64;
v18 = 0;
if( !(_DWORD)v7 )
break;
v19 = (__int64 *)(v8 + 1);
do
{
v20 = *v19;
if( *v19 && *(_QWORD *)(v20 + 16) < v17 )
{
v17 = *(_QWORD *)(v20 + 16);
v16 = v18;
}
++v18;
v19 += 2;
}
while( v18 < (unsigned int)v7 );
if( v16 == -1 )
break;
v21 = 2i64 * v16;
v15 = a3;
v22 = (unsigned int *)v8[2 * v16 + 1];
v23 = (*v22 + 7) & 0xFFFFFFF8;
memmove(a3, v22, *v22);
v14 += v23;
a3[3] = v23;
a3 = (_DWORD *)((char *)a3 + v23);
v24 = v22[3];
if( (_DWORD)v24 )
v25 = (_KEVENT *)((char *)v22 + v24);
else
v25 = 0i64;
v8[v21 + 1] = v25;
}
*a6 = v15;
result = (int)a5;
*a5 = v14;
if( (_DWORD)v7 )
{
v27 = v7;
do
{
v28 = *v8;
v29 = (unsigned __int64)*v8 + (-(__int64)(a7 != 0) & 0xFFFFFFFFFFFFFFE0ui64) + 128;
if( *(_QWORD *)v29 )
{
ExFreePoolWithTag(*(PVOID *)v29, 0);
*(_QWORD *)v29 = 0i64;
*(_DWORD *)(v29 + 20) = 0;
*(_QWORD *)(v29 + 8) = 0i64;
}
result = KeResetEvent(v28);
v8 += 2;
--v27;
}
while( v27 );
}
return result;
}Referenced by:
WmipReceiveNotifications