RtlCmEncodeMemIoResource
NTSTATUS __stdcall RtlCmEncodeMemIoResource(
_CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
UINT8 Type,
UINT64 Length,
UINT64 Start){
unsigned __int16 v4;
UINT64 v6;
__int16 v7;
if( ((Type - 3) & 0xFB) != 0 )
{
if( Type != 1 )
return -1073741811;
goto LABEL_9;
}
if( Type == 1 )
{
LABEL_9:
if( Length <= 0xFFFFFFFF )
goto LABEL_3;
return -1073741811;
}
LABEL_3:
Descriptor->u.Start.QuadPart = Start;
if( Type == 1 )
{
Descriptor->Type = 1;
goto LABEL_6;
}
v4 = Descriptor->Flags & 0xF1FF;
Descriptor->Flags = v4;
if( Length <= 0xFFFFFFFF )
{
Descriptor->Type = 3;
LABEL_6:
Descriptor->u.Length = Length;
return 0;
}
if( Length > 0xFFFFFFFF00i64 )
{
if( Length > 0xFFFFFFFF0000i64 )
{
if( Length <= 0xFFFFFFFF00000000ui64 )
{
v6 = HIDWORD(Length);
if( Length == HIDWORD(Length) << 32 )
{
v7 = 2048;
goto LABEL_15;
}
}
}
else
{
v6 = Length >> 16;
if( Length == (unsigned __int64)(unsigned int)(Length >> 16) << 16 )
{
v7 = 1024;
goto LABEL_15;
}
}
}
else
{
v6 = Length >> 8;
if( Length == (unsigned __int64)(unsigned int)(Length >> 8) << 8 )
{
v7 = 512;
LABEL_15:
Descriptor->Type = 7;
Descriptor->Flags = v7 | v4;
Descriptor->u.Length = v6;
return 0;
}
}
return -1073741823;
}Referenced by:
HalpReportResourceUsage
IopInitializeResourceMap