It wasTimo 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.
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.
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?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.