Johannes Anderwald schrieb:
Timo Kreuzer wrote:
Isn't that actually the same?
Hi,
IMO the old code only calculated the offset from PartialDescriptors
array to CM_RESOURCE_LIST. This works fine if there are no partial
descriptors. But it breaks if there are.
It was
FIELD_OFFSET(CM_RESOURCE_LIST,
List[0].PartialResourceList.PartialDescriptors[ResourceCount]);
So it should have calculated the offset of
PartialDescriptors[ResourceCount] which is one after the last one that
belongs to the list or (ResourceCount-1) entries after the end of
CM_RESOURCE_LIST.
It also ignores the number of full descriptors,
which I guess is wrong.
And it looks like the whole parsing code is broken. It ignores the
number of partial descriptors and does FullList++
The MSDN states the number of CM_FULL_RESOURCE_DESCRIPTOR in
CM_RESOURCE_LIST is always 1 for WDM drivers.
The partial descriptors are handeled in the 2nd for loop.
Ah, ok, but in this case the outer loop makes no sense and is only
confusing. Maybe an ASSERT(..Count == 1) should be put instead?