ST_STORE::StStagingRegionIssueIo

__int64 __fastcall ST_STORE::StStagingRegionIssueIo(UINT64 StoreId, unsigned int *a2){
  __int64 v2; 
  INT64 a6; 
  __int64 v6; 
  unsigned int v7; 
  int v8; 
  NTSTATUS v9; 
  int v10; 
  __int64 v11; 

  v2 = *(_QWORD *)(StoreId + 1032);
  a6 = *((_QWORD *)a2 + 2);
  v6 = *a2;
  v7 = *a2 << *(_DWORD *)(StoreId + 812);
  v8 = *(_DWORD *)(a6 + 28);
  *(_DWORD *)(a6 + 24) = v7;
  *(_DWORD *)(a6 + 28) ^= (*(_DWORD *)(StoreId + 832) ^ v8) & 2;
  *(_WORD *)(v2 + 2 * v6) |= 0x8000u;
  *(_DWORD *)(a6 + 28) ^= (*(_DWORD *)(a6 + 28) ^ (*(_DWORD *)(StoreId + 832) >> 2)) & 4;
  StEtaIoStart(
    *(_ST_ETA_CONTEXT **)(StoreId + 1000),
    *(unsigned int *)(StoreId + 784),
    StIoTypeRandWrite,
    (VOID *)(a6 + 8));
  v9 = SmIssueIo(
         *(VOID **)(StoreId + 800),
         (unsigned int)v6,
         0i64,
         *(unsigned int *)(StoreId + 784),
         *((_QWORD *)a2 + 1),
         a6);
  v10 = *(_DWORD *)(a6 + 28);
  if( v9 >= 0 )
  {
    if( (v10 & 4) != 0 )
    {
      SmWaitForSyncIo(*(VOID **)(StoreId + 800));
      return(unsigned int)ST_STORE::StDmDeviceIoCompletion(StoreId, a6);
    }
  }
  else
  {
    *(_DWORD *)(a6 + 28) = v10 | 1;
    v11 = *(_QWORD *)(a6 + 16);
    if( v11 )
      *(_DWORD *)(v11 + 4) = v9;
    else
      *(_DWORD *)(a6 + 8) = v9;
    ST_STORE::StDmDeviceIoCompletion(StoreId, a6);
  }
  return(unsigned int)v9;
}

Referenced by:

No references.