PspStorageEmptyArray

NTSTATUS __fastcall PspStorageEmptyArray(VOID *Lock, UINT64 a2){
  NTSTATUS v2; 
  __int64 v4; 
  _ADAPTER_OBJECT *v5; 

  v2 = 0;
  if( (_DWORD)a2 )
  {
    v4 = (unsigned int)a2;
    do
    {
      ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)Lock, 0i64);
      v5 = (_ADAPTER_OBJECT *)(*((_QWORD *)Lock + 1) & 0xFFFFFFFFFFFFFFFEui64);
      *((_QWORD *)Lock + 1) = 1i64;
      if( (_InterlockedExchangeAdd64((volatile signed __int64 *)Lock, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock((_EX_PUSH_LOCK *)Lock);
      KeAbPostRelease(Lock);
      if( v5 )
      {
        HalPutDmaAdapter(v5);
        ++v2;
      }
      Lock = (char *)Lock + 16;
      --v4;
    }
    while( v4 );
  }
  return v2;
}

Referenced by:

PspJobDeleteStorageArrays