AlpcpCreateSectionView

INT64 __fastcall AlpcpCreateSectionView(
        _KALPC_SECTION *Section,
        _ALPC_PORT *OwnerPort,
        UINT64 Offset,
        UINT64 Size,
        _KALPC_VIEW **ViewPointer){
  int v9; 
  _KALPC_REGION *v10; 
  int v11; 
  int v12; 
  ULONG_PTR BugCheckParameter2; 
  __int64 v15[4]; 
  BugCheckParameter2 = 0i64;
  v15[0] = 0i64;
  *ViewPointer = 0i64;
  AlpcpLockForCachedReferenceBlob(Section);
  v9 = AlpcpCreateRegion((ULONG_PTR)Section, Offset, Size, &BugCheckParameter2);
  AlpcpUnlockBlob(Section);
  if( v9 < 0 )
    return(unsigned int)v9;
  ExAcquirePushLockSharedEx((UINT64)OwnerPort + 352, 0i64);
  v10 = (_KALPC_REGION *)BugCheckParameter2;
  AlpcpLockForCachedReferenceBlob((PVOID)BugCheckParameter2);
  AlpcpCreateView(v10, OwnerPort, (_KALPC_VIEW **)v15);
  v12 = v11;
  AlpcpUnlockBlob(v10);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)OwnerPort + 44, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)OwnerPort + 44);
  KeAbPostRelease((char *)OwnerPort + 352);
  AlpcpDereferenceBlobEx((PVOID)BugCheckParameter2, 1i64);
  if( v12 < 0 )
    return(unsigned int)v12;
  *ViewPointer = (_KALPC_VIEW *)v15[0];
  return 0i64;
}

Referenced by:

AlpcpMapLegacyPortView
NtAlpcCreateSectionView