private void markupChild(VS_VERSION_CHILD child, Address parentAddr, Program program,
			MessageLog log, TaskMonitor monitor) {
		Address childAddr = parentAddr.add(child.getRelativeOffset());
		try {
			DataType infoType = child.toDataType();
			if (infoType == null) {
				return;
			}
			PeUtils.createData(program, childAddr, infoType, log);

			// child name string
			PeUtils.createData(program, childAddr.add(child.getNameRelativeOffset()),
				TerminatedUnicodeDataType.dataType, log);

			if (child.valueIsUnicodeString()) {
				// unicode value
				PeUtils.createData(program, childAddr.add(child.getValueRelativeOffset()),
					TerminatedUnicodeDataType.dataType, log);
			}
			else if (child.valueIsDWord()) {
				// dword value
				PeUtils.createData(program, childAddr.add(child.getValueRelativeOffset()),
					DWordDataType.dataType, log);
			}
			else if (child.hasChildren()) {
				// markup nested children
				VS_VERSION_CHILD[] children = child.getChildren();
				for (VS_VERSION_CHILD element : children) {
					if (monitor.isCancelled()) {
						return;
					}
					markupChild(element, childAddr, program, log, monitor);
				}
			}
		}
		catch (DuplicateNameException e) {
			Msg.error(this,
				"Unexpected Exception: " + child.getChildName() + " structure previously defined",
				e);
		}
	}
Gets a program property name to represent PE resource property with the given key name

@param key The key name
@return A program property name to represent PE resource property with the given key name
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/pe/ResourceDataDirectory.java