PspStorageInsertObject

NTSTATUS __stdcall PspStorageInsertObject(
        PSP_STORAGE *Storage,
        UINT64 StorageSlot,
        UINT8 MakeSlotReadOnly,
        VOID *Object){
  NTSTATUS result; 
  _EX_PUSH_LOCK *v7; 
  signed __int64 v8; 
  signed __int64 v9; 
  UINT64 v10; 
  PSP_STORAGE_SLOT *v11; 

  LODWORD(v10) = 0;
  v11 = 0i64;
  result = PspGetStorageArray(Storage, StorageSlot, &v10, &v11);
  if( result >= 0 )
  {
    ObfReferenceObject(Object);
    v7 = (_EX_PUSH_LOCK *)&v11[4 * (unsigned int)v10];
    ExAcquirePushLockSharedEx(v7, 0i64);
    v8 = (unsigned __int64)Object | 1;
    if( !MakeSlotReadOnly )
      v8 = (signed __int64)Object;
    v9 = _InterlockedCompareExchange64(&v7[1]._bf_0, v8, 0i64);
    if( _InterlockedCompareExchange64(&v7->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(v7);
    KeAbPostRelease(v7);
    if( v9 )
    {
      HalPutDmaAdapter((PADAPTER_OBJECT)Object);
      return -1073741637;
    }
    else
    {
      return 0;
    }
  }
  return result;
}

Referenced by:

PsInsertPermanentSiloContextEx
PsInsertSiloContext