PspStorageEmptyArray

INT64 __fastcall PspStorageEmptyArray(volatile INT64 *Lock, UINT64 a2){
  unsigned int v2; 
  __int64 v4; 
  struct _DMA_ADAPTER *v5; 
  v2 = 0;
  if( (_DWORD)a2 )
  {
    v4 = (unsigned int)a2;
    do
    {
      ExAcquirePushLockExclusiveEx((UINT64)Lock, 0i64);
      v5 = (struct _DMA_ADAPTER *)(Lock[1] & 0xFFFFFFFFFFFFFFFEui64);
      *((_QWORD *)Lock + 1) = 1i64;
      if( (_InterlockedExchangeAdd64(Lock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock(Lock);
      KeAbPostRelease((PVOID)Lock);
      if( v5 )
      {
        HalPutDmaAdapter(v5);
        ++v2;
      }
      Lock += 2;
      --v4;
    }
    while( v4 );
  }
  return v2;
}

Referenced by:

PspJobDeleteStorageArrays