AlpcpMapLegacyPortRemoteView

INT64 __fastcall AlpcpMapLegacyPortRemoteView(INT64 *Object, INT64 a2, INT64 a3){
  INT64 v3; 
  INT64 *v4; 
  INT64 *v7; 
  v3 = *(_QWORD *)(a2 + 40);
  v4 = Object + 44;
  ExAcquirePushLockSharedEx((UINT64)(Object + 44), 0i64);
  AlpcpLockForCachedReferenceBlob(*(PVOID *)(v3 + 16));
  v7 = *(INT64 **)(v3 + 24);
  if( Object != v7 )
  {
    AlpcpRemoveResourcePort((INT64)v7, v3);
    HalPutDmaAdapter(*(PADAPTER_OBJECT *)(v3 + 24));
    ObfReferenceObject(Object);
    *(_QWORD *)(v3 + 24) = Object;
    AlpcpInsertResourcePort(Object, v3);
  }
  *(_OWORD *)a3 = 0i64;
  *(_QWORD *)(a3 + 16) = 0i64;
  *(_DWORD *)a3 = 24;
  *(_QWORD *)(a3 + 16) = *(_QWORD *)(v3 + 40);
  *(_QWORD *)(a3 + 8) = *(_QWORD *)(v3 + 48);
  AlpcpUnlockBlob(*(PVOID *)(v3 + 16));
  if( _InterlockedCompareExchange64(v4, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(v4);
  KeAbPostRelease(v4);
  return 0i64;
}

Referenced by:

AlpcpAcceptConnectPort