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.