CmFcpManagerCreateSectionFromBuffer

INT64 __stdcall CmFcpManagerCreateSectionFromBuffer(VOID *Src, size_t Size, INT64 a3){
  INT64 v3; 
  int Section; 
  UINT64 v7; 
  PVOID v8; 
  __int64 v9; 
  PADAPTER_OBJECT DmaAdapter[2]; 
  __int64 v12; 
  PVOID MappedBase[2]; 
  __int64 v14; 
  __int64 v15; 
  v12 = 0i64;
  v14 = 0i64;
  *(_OWORD *)DmaAdapter = 0i64;
  *(_OWORD *)MappedBase = 0i64;
  Section = CmFcpManagerCreateSection((_LARGE_INTEGER)Size, a3, v3, DmaAdapter);
  if( Section < 0 || (Section = CmFcpMapSection(DmaAdapter, MappedBase), Section < 0) )
  {
    v8 = MappedBase[1];
  }
  else
  {
    v7 = Size;
    v8 = MappedBase[1];
    memmove((UINT8 *)MappedBase[1], (UINT8 *)Src, v7);
    Section = 0;
    v9 = v12;
    *(_OWORD *)v15 = *(_OWORD *)DmaAdapter;
    *(_QWORD *)(v15 + 16) = v9;
    *(_OWORD *)DmaAdapter = 0i64;
  }
  if( v8 )
    MmUnmapViewInSystemSpace(v8);
  if( DmaAdapter[1] )
    HalPutDmaAdapter(DmaAdapter[1]);
  return(unsigned int)Section;
}

Referenced by:

CmFcManagerStartRuntimePhase