private void processPdbContents(boolean skipValidation) throws PdbException, IOException {
		InputStream in = null;

		if (!isXML) {
			String[] cmd = getCommandLineArray(skipValidation);
			Runtime runtime = Runtime.getRuntime();
			try {

				// Note: we can't use process.waitFor() here, because the result of
				// 'process.getInputStream()' is passed around and manipulated by
				// the parser. In order for .waitFor() to work, the stream needs to
				// be taken care of immediately so that the process can return. Currently,
				// with the process' input stream getting passed around, the call to
				// .waitFor() creates a deadlock condition.

				process = runtime.exec(cmd);
			}
			catch (IOException e) {
				if (e.getMessage().endsWith("14001")) {//missing runtime dlls, probably
					throw new PdbException("Missing runtime libraries. " + "Please refer to " +
						README_FILENAME + " and follow instructions.");
				}
				throw e;
			}

			in = process.getInputStream();

			InputStream err = process.getErrorStream();

			thread = new PdbErrorReaderThread(err);
			thread.start();
		}
		else {
			in = new FileInputStream(pdbFile);
		}

		errHandler = new PdbErrorHandler();

		try {
			parser = XmlPullParserFactory.create(in, pdbFile.getName(), errHandler, false);
		}
		catch (SAXException e) {
			throw new IOException(e.getMessage());
		}
	}
If it's a *.pdb file, pass it to the pdb.exe executable and get the stream storing
the XML output.

If it's a *.xml file, read the file into a stream and verify that the XML GUID/Signature and
age match the program's GUID/Signature and age.

@param skipValidation true if we should skip checking that GUID/Signature and age match
@throws PdbException If issue running the pdb.exe process
@throws IOException If an I/O error occurs
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/PdbParser.java