PiDmCacheDataDecode
NTSTATUS __stdcall PiDmCacheDataDecode(
PI_DM_CACHED_PROPERTY_DATA *CacheData,
UINT64 *PropertyType,
UINT8 *PropertyBuffer,
UINT64 BufferSize,
UINT64 *PropertySize){
PI_DM_CACHED_PROPERTY_DATA v5;
NTSTATUS v6;
int v8;
int v9;
int v10;
int v11;
PI_DM_CACHED_PROPERTY_DATA v12;
__int64 v13;
unsigned int v14;
size_t v15;
PI_DM_CACHED_PROPERTY_DATA *v16;
unsigned int v18;
unsigned int v19;
_UNICODE_STRING DestinationString;
v5 = *CacheData;
v6 = 0;
DestinationString = 0i64;
v8 = v5 - 2;
if( !v8 )
return -1073741275;
v9 = v8 - 1;
if( !v9 )
{
*(_DWORD *)PropertyType = CacheData[2];
v18 = CacheData[3];
*(_DWORD *)PropertySize = v18;
if( (unsigned int)BufferSize >= v18 )
{
v15 = v18;
v16 = CacheData + 4;
goto LABEL_12;
}
return -1073741789;
}
v10 = v9 - 1;
if( !v10 )
{
*(_DWORD *)PropertyType = 13;
*(_DWORD *)PropertySize = 16;
if( (unsigned int)BufferSize >= 0x10 )
{
*(_OWORD *)PropertyBuffer = *(_OWORD *)(CacheData + 2);
return v6;
}
return -1073741789;
}
v11 = v10 - 1;
if( !v11 )
{
*(_DWORD *)PropertyType = CacheData[2];
v19 = CacheData[3];
*(_DWORD *)PropertySize = v19;
if( (unsigned int)BufferSize >= v19 )
{
v15 = v19;
v16 = (PI_DM_CACHED_PROPERTY_DATA *)*((_QWORD *)CacheData + 2);
goto LABEL_12;
}
return -1073741789;
}
if( v11 != 1 )
return -1073741595;
v12 = CacheData[2];
if( v12 == 13 )
{
*(_DWORD *)PropertyType = 13;
*(_DWORD *)PropertySize = 16;
if( (unsigned int)BufferSize >= 0x10 )
{
RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(*((_QWORD *)CacheData + 2) + 16i64));
return RtlGUIDFromString(&DestinationString, (_GUID *)PropertyBuffer);
}
return -1073741789;
}
if( v12 != 18 )
return -1073741595;
*(_DWORD *)PropertyType = 18;
v13 = -1i64;
do
++v13;
while( *(_WORD *)(*(_QWORD *)(*((_QWORD *)CacheData + 2) + 16i64) + 2 * v13) );
v14 = 2 * v13 + 2;
*(_DWORD *)PropertySize = v14;
if( (unsigned int)BufferSize < v14 )
return -1073741789;
v15 = 2 * v13 + 2;
v16 = *(PI_DM_CACHED_PROPERTY_DATA **)(*((_QWORD *)CacheData + 2) + 16i64);
LABEL_12:
memmove(PropertyBuffer, v16, v15);
return v6;
}Referenced by:
PiDmListUpdateAggregationCountWorker
PiDmObjectGetCachedObjectPropertyData
PiDmObjectProcessPropertyChange