PiDevCfgConvertPropertyFromValue
NTSTATUS __stdcall PiDevCfgConvertPropertyFromValue(
UINT64 ValueType,
UINT64 ValueSize,
VOID *ValueData,
UINT64 TargetPropertyType,
UINT64 *TargetPropertySize,
VOID **TargetPropertyData){
NTSTATUS v6;
int v8;
_BYTE *v9;
int v10;
int v12;
VOID **v13;
int v14;
VOID **v15;
bool v16;
VOID *v17;
VOID **v18;
bool v19;
VOID **PoolWithTag;
_UNICODE_STRING GuidString;
v6 = 0;
*(_DWORD *)(&GuidString.MaximumLength + 1) = 0;
v8 = 0;
v9 = 0i64;
if( (unsigned int)TargetPropertyType > 0x1003 )
{
if( (_DWORD)TargetPropertyType != 8210 )
goto LABEL_8;
v16 = (_DWORD)ValueType == 7;
LABEL_60:
if( !v16 )
goto LABEL_8;
goto LABEL_11;
}
if( (_DWORD)TargetPropertyType == 4099 )
{
LABEL_11:
v8 = ValueSize;
goto LABEL_35;
}
if( (unsigned int)TargetPropertyType > 0x11 )
{
if( (_DWORD)TargetPropertyType != 18 )
{
if( (_DWORD)TargetPropertyType == 19 )
{
v19 = (_DWORD)ValueType == 3;
goto LABEL_41;
}
if( (_DWORD)TargetPropertyType != 20 )
{
if( (unsigned int)TargetPropertyType <= 0x15 )
goto LABEL_8;
if( (unsigned int)TargetPropertyType <= 0x18 )
{
LABEL_57:
v19 = (_DWORD)ValueType == 4;
goto LABEL_41;
}
if( (_DWORD)TargetPropertyType != 25 )
goto LABEL_8;
}
}
if( (unsigned int)(ValueType - 1) > 1 )
goto LABEL_8;
goto LABEL_11;
}
if( (_DWORD)TargetPropertyType != 17 )
{
if( (unsigned int)TargetPropertyType > 9 )
{
if( (_DWORD)TargetPropertyType == 13 )
{
if( !(_DWORD)ValueType )
goto LABEL_8;
if( (unsigned int)ValueType <= 2 )
{
if( (_DWORD)ValueSize != 78 )
goto LABEL_8;
v8 = 16;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x10ui64, 1667526736i64);
v9 = PoolWithTag;
if( PoolWithTag )
{
GuidString.Buffer = (wchar_t *)ValueData;
*(_DWORD *)&GuidString.Length = 5111884;
if( RtlGUIDFromString(&GuidString, (_GUID *)PoolWithTag) < 0 )
{
ExFreePoolWithTag(v9, 0);
v9 = 0i64;
}
goto LABEL_8;
}
return -1073741670;
}
if( (_DWORD)ValueType != 3 )
goto LABEL_8;
v19 = (_DWORD)ValueSize == 16;
LABEL_41:
v8 = ValueSize;
v9 = ValueData;
if( !v19 )
{
v8 = 0;
v9 = 0i64;
}
goto LABEL_8;
}
if( (_DWORD)TargetPropertyType != 16
|| (_DWORD)ValueType != 3 && (_DWORD)ValueType != 11
|| (_DWORD)ValueSize != 8 )
{
goto LABEL_8;
}
v8 = 8;
LABEL_35:
v9 = ValueData;
goto LABEL_8;
}
if( (unsigned int)TargetPropertyType < 8 )
{
if( (unsigned int)TargetPropertyType < 2 )
goto LABEL_8;
if( (unsigned int)TargetPropertyType <= 3 )
{
if( (_DWORD)ValueType != 4 )
goto LABEL_8;
v14 = *(_DWORD *)ValueData;
if( *(_DWORD *)ValueData > 0xFFu )
goto LABEL_8;
v8 = 1;
v15 = ExAllocatePoolWithTag(1ui64, 1ui64, 1667526736i64);
v9 = v15;
if( v15 )
{
*(_BYTE *)v15 = v14;
goto LABEL_8;
}
return -1073741670;
}
if( (unsigned int)TargetPropertyType <= 5 )
{
if( (_DWORD)ValueType != 4 )
goto LABEL_8;
v12 = *(_DWORD *)ValueData;
if( *(_DWORD *)ValueData > 0xFFFFu )
goto LABEL_8;
v8 = 2;
v13 = ExAllocatePoolWithTag(1ui64, 2ui64, 1667526736i64);
v9 = v13;
if( v13 )
{
*(_WORD *)v13 = v12;
goto LABEL_8;
}
return -1073741670;
}
goto LABEL_57;
}
if( (_DWORD)ValueType == 4 )
{
v17 = (VOID *)*(unsigned int *)ValueData;
v8 = 8;
v18 = ExAllocatePoolWithTag(1ui64, 8ui64, 1667526736i64);
v9 = v18;
if( v18 )
{
*v18 = v17;
goto LABEL_8;
}
return -1073741670;
}
v16 = (_DWORD)ValueType == 11;
goto LABEL_60;
}
if( (_DWORD)ValueType == 4 )
{
v10 = *(_DWORD *)ValueData;
v8 = 1;
v9 = ExAllocatePoolWithTag(1ui64, 1ui64, 1667526736i64);
if( v9 )
{
*v9 = -(v10 != 0);
goto LABEL_8;
}
return -1073741670;
}
LABEL_8:
*(_DWORD *)TargetPropertySize = v8;
*TargetPropertyData = v9;
return v6;
}Referenced by:
PiDevCfgCopyDeviceKey