SmIssueIo

NTSTATUS __fastcall SmIssueIo(VOID *CompletionContext, INT64 a2, INT64 a3, INT64 a4, INT64 a5, INT64 a6){
  int v6; 
  unsigned __int64 v7; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  int v13; 
  unsigned int v14; 
  unsigned __int64 v15; 
  VOID *v16; 
  _EX_RUNDOWN_REF *v17; 
  UINT64 PerformsFileIo; 
  _SMKM_ISSUE_IO_PARAMS IoParams[2]; 
  INT64 v21; 
  int v22; 
  int v23; 
  int v24; 
  int v25; 
  INT64 v26; 

  v6 = 0;
  v7 = a6 & 0xFFFFFFFFFFFFFFFEui64;
  v8 = 0;
  v9 = a4;
  v10 = a3;
  v11 = a2;
  if( (a6 & 1) == 0 )
    v7 = a6;
  if( (*(_DWORD *)(v7 + 28) & 4) != 0 )
  {
    if( (*((_BYTE *)CompletionContext + 6021) & 1) != 0 )
      return -1073741058;
  }
  else
  {
    if( !SmKmStoreReference((_SMKM_STORE_LIST *)SmGlobals, *((unsigned int *)CompletionContext + 1504)) )
      return -1073741058;
    v6 = 1;
  }
  if( (a6 & 1) != 0 )
  {
    _InterlockedIncrement((volatile signed __int32 *)CompletionContext + 1526);
    v8 = 1;
  }
  v26 = 0i64;
  v14 = *(_DWORD *)CompletionContext;
  v25 = *((_DWORD *)CompletionContext + 1552);
  v21 = a5;
  v24 = v11;
  v23 = v10;
  v22 = v9;
  v26 = a6 & 1;
  if( (v14 & 0x2000) != 0 )
  {
    v15 = v7 + 32;
    v7 = (unsigned __int64)CompletionContext;
    *(_QWORD *)IoParams = v15;
    v16 = SmpIoCompletionApc;
  }
  else
  {
    *(_QWORD *)(v7 + 40) = CompletionContext;
    *(_QWORD *)IoParams = v7 + 48;
    v16 = SmpDeviceIoCompletion;
    *(_DWORD *)(v7 + 32) = v9;
    v14 = *(_DWORD *)CompletionContext;
  }
  LODWORD(PerformsFileIo) = (v14 >> 13) & 1;
  v13 = SmKmIssueIo((_SMKM_FILE_INFO *)CompletionContext + 1554, IoParams, v16, (VOID *)v7, PerformsFileIo);
  if( v13 >= 0 )
  {
    v6 = 0;
    v8 = 0;
  }
  if( v8 )
    _InterlockedDecrement((volatile signed __int32 *)CompletionContext + 1526);
  if( v6 )
  {
    v17 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(
                               (__int64)SmGlobals,
                               *((_DWORD *)CompletionContext + 1504) & 0x3FF);
    ExReleaseRundownProtection(v17 + 1);
  }
  return v13;
}

Referenced by:

ST_STORE::StDeviceIoIssue
ST_STORE::StStagingRegionIssueIo