AlpcpPortQueryConnectedSidInfo

INT64 __fastcall AlpcpPortQueryConnectedSidInfo(
        _ALPC_PORT *PortObject,
        VOID *Sid,
        VOID *Length,
        UINT64 *ReturnLength,
        INT64 PreviousMode){
  UINT8 v8; 
  PVOID *v9; 
  INT64 result; 
  _DMA_OPERATIONS *DmaOperations; 
  _ALPC_PORT *v12; 
  struct _DMA_ADAPTER *v13; 
  INT64 *v14; 
  struct DMA_ADAPTER *v15; 
  unsigned int v16; 
  VOID *Sid1; 
  char Sid2[80]; 
  Sid1 = 0i64;
  memset((INT64)Sid2, 0i64);
  if( !PortObject )
    return 3221225485i64;
  if( !(_BYTE)PreviousMode )
  {
    if( ReturnLength )
      *(_DWORD *)ReturnLength = 0;
    Sid1 = Sid;
    goto LABEL_6;
  }
  if( ReturnLength )
    *(_DWORD *)ReturnLength = 0;
  LODWORD(result) = SeCaptureSid(Sid, PreviousMode, v8, v9);
  if( (int)result >= 0 )
  {
LABEL_6:
    DmaOperations = 0i64;
    v12 = AlpcpReferenceConnectedPort(PortObject);
    v13 = (struct _DMA_ADAPTER *)v12;
    if( v12 )
    {
      v14 = (INT64 *)((char *)v12 + 352);
      ExAcquirePushLockSharedEx((UINT64)v12 + 352, 0i64);
      if( ((__int64)v13[1].DmaOperations & 1) == 0 )
        DmaOperations = v13[1].DmaOperations;
      if( DmaOperations )
        ObfReferenceObjectWithTag(DmaOperations, 0x63706C41u);
      if( _InterlockedCompareExchange64(v14, 0i64, 17i64) != 17 )
        ExfReleasePushLockShared(v14);
      KeAbPostRelease(v14);
      HalPutDmaAdapter(v13);
    }
    if( DmaOperations )
    {
      v15 = (struct DMA_ADAPTER *)PsReferencePrimaryToken((PEPROCESS)DmaOperations);
      SeQueryUserSidToken(v15, Sid2, 0x44ui64, 0i64);
      ObFastDereferenceObject((INT64 *)&DmaOperations[3].AllocateCommonBufferWithBounds, v15);
      LOBYTE(v15) = RtlEqualSid(Sid1, Sid2);
      ObfDereferenceObjectWithTag(DmaOperations, 0x63706C41ui64);
      v16 = (_BYTE)v15 == 0 ? 0xC00002A0 : 0;
    }
    else
    {
      v16 = -1073741769;
    }
    if( Sid1 != Sid )
      SeReleaseSid(Sid1, PreviousMode, 1u);
    return v16;
  }
  return result;
}

Referenced by:

NtAlpcQueryInformation