IopAllocateReserveIrp
IRP *__fastcall IopAllocateReserveIrp(_LARGE_INTEGER a1, CHAR a2, INT64 a3){
CHAR v3;
__int16 v4;
PIRP v5;
__int64 v6;
PIRP v8;
__int64 v9;
PIRP v10;
__int64 v11;
union _LARGE_INTEGER Timeout;
Timeout = a1;
if( a2 > byte_140C45AA0 )
return 0i64;
v3 = a2 + 1;
v4 = (char)(a2 + 1);
if( !(_DWORD)a3 )
{
while( _InterlockedExchange(&dword_140C459C8, 1) == 1 )
KeWaitForSingleObject(&word_140C459D0, Executive, 0, 0, 0i64);
IoInitializeIrp(IopReserveIrps, 8 * (8 * v3 + v4) + 208, v3);
*((_BYTE *)IopReserveIrps + 71) = 33;
v5 = IopReserveIrps;
*((_QWORD *)IopReserveIrps + 23) -= 72i64;
v6 = *((_QWORD *)v5 + 23);
--*((_BYTE *)v5 + 67);
--*((_BYTE *)v5 + 66);
*((_QWORD *)v5 + 25) = v6;
if( IopIsActivityTracingEnabled() )
IopInitActivityIdIrp(IopReserveIrps);
return IopReserveIrps;
}
if( (_DWORD)a3 == 1 )
{
while( _InterlockedExchange(&dword_140C459F0, 1) == 1 )
KeWaitForSingleObject(&word_140C459F8, Executive, 0, 0, 0i64);
IoInitializeIrp(qword_140C459E8, 72 * v3 + 208, v3);
*((_BYTE *)qword_140C459E8 + 71) = 33;
v8 = qword_140C459E8;
*((_QWORD *)qword_140C459E8 + 23) -= 72i64;
v9 = *((_QWORD *)v8 + 23);
--*((_BYTE *)v8 + 67);
--*((_BYTE *)v8 + 66);
*((_QWORD *)v8 + 25) = v9;
if( IopIsActivityTracingEnabled() )
IopInitActivityIdIrp(qword_140C459E8);
return qword_140C459E8;
}
if( (_DWORD)a3 != 3 )
return 0i64;
Timeout.QuadPart = 0i64;
while( _InterlockedExchange(&dword_140C45A18, 1) == 1 )
{
Timeout.QuadPart = -50000000i64;
if( KeWaitForSingleObject(&stru_140C45A20, Executive, 0, 0, &Timeout) == 258 )
return 0i64;
}
IoInitializeIrp(qword_140C45A10, 72 * v3 + 208, v3);
*((_BYTE *)qword_140C45A10 + 71) = 33;
v10 = qword_140C45A10;
*((_QWORD *)qword_140C45A10 + 23) -= 72i64;
v11 = *((_QWORD *)v10 + 23);
--*((_BYTE *)v10 + 67);
--*((_BYTE *)v10 + 66);
*((_QWORD *)v10 + 25) = v11;
if( IopIsActivityTracingEnabled() )
IopInitActivityIdIrp(qword_140C45A10);
return qword_140C45A10;
}Referenced by:
IoAsynchronousPageWrite
IoPageReadEx
IoSynchronousPageWriteEx
IopAllocateIrpMustSucceed