NtWaitForMultipleObjects32
NTSTATUS __stdcall NtWaitForMultipleObjects32(
UINT64 Count,
INT64 *Handles,
_WAIT_TYPE WaitType,
UINT8 Alertable,
_LARGE_INTEGER *Timeout){
__int64 v8;
unsigned int v9;
char WaitMode;
__int64 v11;
char *v12;
_LARGE_INTEGER *v14;
LONGLONG v15;
VOID *CapturedHandles[64];
v8 = (unsigned int)Count;
v14 = Timeout;
memset(CapturedHandles, 0i64, sizeof(CapturedHandles));
v9 = 0;
v15 = 0i64;
if( (unsigned int)(v8 - 1) > 0x3F )
return -1073741585;
if( (unsigned int)WaitType > WaitAny )
return -1073741583;
WaitMode = KeGetCurrentThread()->PreviousMode;
if( WaitMode )
{
v11 = (__int64)Timeout;
if( Timeout )
{
if( (unsigned __int64)Timeout >= 0x7FFFFFFF0000i64 )
v11 = 0x7FFFFFFF0000i64;
v15 = *(_QWORD *)v11;
v14 = (_LARGE_INTEGER *)&v15;
}
if( 4 * v8 )
{
v12 = (char *)Handles + 4 * v8;
if( (unsigned __int64)v12 > 0x7FFFFFFF0000i64 || v12 < (char *)Handles )
MEMORY[0x7FFFFFFF0000] = 0;
}
}
while( v9 < (unsigned int)v8 )
{
CapturedHandles[v9] = (VOID *)*((int *)Handles + v9);
++v9;
}
return ObWaitForMultipleObjects((unsigned int)v8, CapturedHandles, WaitMode, WaitType, WaitMode, Alertable, v14);
}Referenced by:
No references.