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