private void markupDirectory(ResourceDirectory directory, Address directoryAddr,
			Address resourceBase, Program program, boolean isBinary, TaskMonitor monitor,
			MessageLog log) throws IOException, DuplicateNameException, CodeUnitInsertionException {

		PeUtils.createData(program, directoryAddr, directory.toDataType(), log);
		directoryAddr = directoryAddr.add(ResourceDirectory.SIZEOF);

		List<ResourceDirectoryEntry> entries = directory.getEntries();
		for (ResourceDirectoryEntry entry : entries) {
			if (monitor.isCancelled()) {
				return;
			}

			PeUtils.createData(program, directoryAddr, entry.toDataType(), log);
			directoryAddr = directoryAddr.add(ResourceDirectoryEntry.SIZEOF);

			ResourceDirectory subDirectory = entry.getSubDirectory();
			if (subDirectory != null) {
				Address subDirectoryAddr = resourceBase.add(entry.getOffsetToDirectory());
				markupDirectory(subDirectory, subDirectoryAddr, resourceBase, program, isBinary,
					monitor, log);
			}

			ResourceDataEntry data = entry.getData();
			if (data != null) {
				Address dataAddr = resourceBase.add(entry.getOffsetToData());
				PeUtils.createData(program, dataAddr, data.toDataType(), log);
			}

			ResourceDirectoryStringU string = entry.getDirectoryString();
			if (string != null && string.getLength() > 0) {
				Address strAddr = resourceBase.add(entry.getNameOffset() & 0x7fffffff);
				PeUtils.createData(program, strAddr, string.toDataType(), log);
			}
		}
	}
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