AlpcpExposeAttributes
CHAR __fastcall AlpcpExposeAttributes(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5){
INT64 v5;
__int64 v6;
_DWORD *v7;
__int64 v8;
INT64 v10;
int v11;
int v12;
__int64 v13;
__int64 v14;
int v15;
int v16;
__int64 v17;
int v18;
__int64 v19;
__int64 v20;
__int64 v21;
__int64 v22;
__int64 v23;
__int64 v24;
void *v25;
_DWORD *v26;
int v27;
__int64 v28;
int v29;
int v30;
__int64 v31;
__int64 v32;
int v33;
__int64 v34;
__int64 v35;
__int64 v36;
int v37;
__int64 v38;
__int64 v39;
__int64 v40;
__int64 v41;
__int64 v42;
__int64 v43;
INT64 v45;
v5 = a5;
LOBYTE(v6) = 0;
*(_DWORD *)(a5 + 4) = 0;
v7 = (_DWORD *)(a5 + 4);
v8 = (int)a4;
v10 = a1;
if( (int)a2 < 0 )
{
if( (int)a4 < 0 && *(_QWORD *)(a3 + 136) )
{
*(_DWORD *)(a5 + 8) = 0;
v6 = *(_QWORD *)(a3 + 136);
a1 = *(unsigned int *)(v6 + 8);
*(_DWORD *)(a5 + 16) = a1;
*v7 |= 0x80000000;
}
v29 = a4 & 0x40000000;
if( (a4 & 0x40000000) != 0 )
LOBYTE(v6) = AlpcpExposeViewAttribute32(
a1,
a3,
(_DWORD *)(a5 + (((__int64)(int)a4 >> 63) & 0xC) + 8),
(_DWORD *)(a5 + 4));
v30 = v8 & 0x20000000;
if( (v8 & 0x20000000) != 0 )
{
v31 = ((v8 >> 63) & 0xC) + 24;
if( !v29 )
v31 = ((v8 >> 63) & 0xC) + 8;
LOBYTE(v6) = AlpcpExposeContextAttribute32(v10, a3, (_DWORD *)(a5 + v31), (_DWORD *)(a5 + 4));
}
v32 = (v8 >> 63) & 0xC;
v33 = v8 & 0x10000000;
if( (v8 & 0x10000000) != 0 )
{
v34 = v32 + 24;
if( !v29 )
v34 = v32 + 8;
v35 = v34 + 20;
if( !v30 )
v35 = v34;
LOBYTE(v6) = AlpcpExposeHandleAttribute32(
(struct _DMA_ADAPTER *)v10,
a3,
(_DWORD *)(a5 + v35),
(_DWORD *)(a5 + 4));
v33 = v8 & 0x10000000;
}
v36 = v32 + 8;
v37 = v8 & 0x8000000;
if( (v8 & 0x8000000) != 0 )
{
v38 = v36 + 16;
if( !v29 )
v38 = v36;
v39 = v38 + 20;
if( !v30 )
v39 = v38;
v40 = v39 + 16;
if( !v33 )
v40 = v39;
LOBYTE(v6) = AlpcpExposeTokenAttribute(v10, a3, (_QWORD *)(a5 + v40), (_DWORD *)(a5 + 4));
v37 = v8 & 0x8000000;
}
if( (v8 & 0x2000000) != 0 )
{
v41 = v36 + 16;
if( !v29 )
v41 = v36;
v42 = v41 + 20;
if( !v30 )
v42 = v41;
v43 = v42 + 16;
if( (v8 & 0x10000000) == 0 )
v43 = v42;
v24 = v43 + 24;
if( !v37 )
v24 = v43;
goto LABEL_44;
}
}
else
{
if( (int)a4 < 0 && *(_QWORD *)(a3 + 136) )
{
*(_DWORD *)(a5 + 8) = 0;
v6 = *(_QWORD *)(a3 + 136);
*(_QWORD *)(a5 + 24) = *(_QWORD *)(v6 + 8);
*v7 |= 0x80000000;
}
v11 = a4 & 0x40000000;
if( (a4 & 0x40000000) != 0 )
{
v45 = a5 + (((__int64)(int)a4 >> 63) & 0x18) + 8;
v6 = *(_QWORD *)(a3 + 144);
if( v6 )
{
v25 = *(void **)(v6 + 16);
AlpcpReferenceBlob(v25);
v26 = *(_DWORD **)(*(_QWORD *)(a3 + 144) + 16i64);
AlpcpLockForCachedReferenceBlob(v26);
v27 = v26[12];
AlpcpUnlockBlob(v26);
AlpcpDereferenceBlobEx(v25, 1i64);
v28 = *(_QWORD *)(a3 + 144);
*(_OWORD *)v45 = 0i64;
*(_OWORD *)(v45 + 16) = 0i64;
*(_QWORD *)(v45 + 16) = *(_QWORD *)(v28 + 40);
v6 = *(_QWORD *)(v28 + 48);
*(_QWORD *)(v45 + 24) = v6;
if( (v27 & 1) != 0 )
*(_DWORD *)v45 = 0x40000;
*v7 |= 0x40000000u;
v5 = a5;
}
}
v12 = v8 & 0x20000000;
if( (v8 & 0x20000000) != 0 )
{
v13 = ((v8 >> 63) & 0x18) + 40;
if( !v11 )
v13 = ((v8 >> 63) & 0x18) + 8;
if( *(_QWORD *)(a3 + 56) == v10 || *(_QWORD *)(a3 + 64) == v10 )
v14 = *(_QWORD *)(a3 + 128);
else
v14 = *(_QWORD *)(a3 + 120);
*(_QWORD *)(v13 + v5) = v14;
if( *(_QWORD *)(a3 + 56) == v10 || *(_QWORD *)(a3 + 64) == v10 )
v15 = *(_DWORD *)(a3 + 72);
else
v15 = *(_DWORD *)(a3 + 44);
*(_DWORD *)(v13 + v5 + 16) = v15;
if( (*(_DWORD *)(v10 + 416) & 6) == 4 )
v6 = *(_QWORD *)(a3 + 104);
else
v6 = *(_QWORD *)(a3 + 112);
*(_QWORD *)(v13 + v5 + 8) = v6;
*(_DWORD *)(v13 + v5 + 20) = *(_DWORD *)(a3 + 264);
LODWORD(v6) = *(_DWORD *)(a3 + 272);
*(_DWORD *)(v13 + v5 + 24) = v6;
if( a5 != -4 && *(_QWORD *)(v13 + v5) )
*v7 |= 0x20000000u;
}
v16 = v8 & 0x10000000;
if( (v8 & 0x10000000) != 0 )
{
v17 = ((v8 >> 63) & 0x18) + 40;
if( !v11 )
v17 = ((v8 >> 63) & 0x18) + 8;
if( v12 )
v17 += 32i64;
LOBYTE(v6) = AlpcpExposeHandleAttribute(v10, a3, v17 + v5, v7);
v16 = v8 & 0x10000000;
}
v18 = v8 & 0x8000000;
if( (v8 & 0x8000000) != 0 )
{
v19 = ((v8 >> 63) & 0x18) + 40;
if( !v11 )
v19 = ((v8 >> 63) & 0x18) + 8;
if( v12 )
v19 += 32i64;
v20 = v19 + 24;
if( !v16 )
v20 = v19;
LOBYTE(v6) = AlpcpExposeTokenAttribute(v10, a3, (_QWORD *)(v5 + v20), v7);
v18 = v8 & 0x8000000;
}
if( (v8 & 0x2000000) != 0 )
{
v21 = (v8 >> 63) & 0x18;
v22 = v21 + 40;
if( !v11 )
v22 = v21 + 8;
if( v12 )
v22 += 32i64;
v23 = v22 + 24;
if( (v8 & 0x10000000) == 0 )
v23 = v22;
v24 = v23 + 24;
if( !v18 )
v24 = v23;
LABEL_44:
LOBYTE(v6) = AlpcpExposeWorkOnBehalfAttribute(v10, a3, (_QWORD *)(v24 + v5), v7);
}
}
return v6;
}Referenced by:
AlpcpCompleteDispatchMessage
AlpcpProcessConnectionRequest
AlpcpProcessSynchronousRequest
AlpcpReceiveMessage