PiDmCacheDataDecode
INT64 __fastcall PiDmCacheDataDecode(INT64 *a1, _DWORD *a2, _GUID *a3, UINT64 a4, UINT64 *a5){
int v5;
unsigned int v6;
int v8;
int v9;
int v10;
int v11;
int v12;
__int64 v13;
unsigned int v14;
UINT64 v15;
UINT8 *v16;
unsigned int v18;
unsigned int v19;
struct _UNICODE_STRING DestinationString;
v5 = *(_DWORD *)a1;
v6 = 0;
DestinationString = 0i64;
v8 = v5 - 2;
if( !v8 )
return(unsigned int)-1073741275;
v9 = v8 - 1;
if( !v9 )
{
*a2 = *((_DWORD *)a1 + 2);
v18 = *((_DWORD *)a1 + 3);
*(_DWORD *)a5 = v18;
if( (unsigned int)a4 >= v18 )
{
v15 = v18;
v16 = (UINT8 *)(a1 + 2);
goto LABEL_12;
}
return(unsigned int)-1073741789;
}
v10 = v9 - 1;
if( !v10 )
{
*a2 = 13;
*(_DWORD *)a5 = 16;
if( (unsigned int)a4 >= 0x10 )
{
*a3 = *(_GUID *)(a1 + 1);
return v6;
}
return(unsigned int)-1073741789;
}
v11 = v10 - 1;
if( !v11 )
{
*a2 = *((_DWORD *)a1 + 2);
v19 = *((_DWORD *)a1 + 3);
*(_DWORD *)a5 = v19;
if( (unsigned int)a4 >= v19 )
{
v15 = v19;
v16 = (UINT8 *)a1[2];
goto LABEL_12;
}
return(unsigned int)-1073741789;
}
if( v11 != 1 )
return(unsigned int)-1073741595;
v12 = *((_DWORD *)a1 + 2);
if( v12 == 13 )
{
*a2 = 13;
*(_DWORD *)a5 = 16;
if( (unsigned int)a4 >= 0x10 )
{
RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(a1[2] + 16), (WCHAR)a3);
return(unsigned int)RtlGUIDFromString(&DestinationString, a3);
}
return(unsigned int)-1073741789;
}
if( v12 != 18 )
return(unsigned int)-1073741595;
*a2 = 18;
v13 = -1i64;
do
++v13;
while( *(_WORD *)(*(_QWORD *)(a1[2] + 16) + 2 * v13) );
v14 = 2 * v13 + 2;
*(_DWORD *)a5 = v14;
if( (unsigned int)a4 < v14 )
return(unsigned int)-1073741789;
v15 = v14;
v16 = *(UINT8 **)(a1[2] + 16);
LABEL_12:
memmove((UINT8 *)a3, v16, v15);
return v6;
}Referenced by:
PiDmListUpdateAggregationCountWorker
PiDmObjectGetCachedObjectPropertyData
PiDmObjectProcessPropertyChange