@Override
	public boolean probe(ByteProvider byteProvider, FileSystemService fsService,
			TaskMonitor monitor) throws IOException, CancelledException {

		try {
			FSRL containerFSRL = byteProvider.getFSRL();
			Constructor<? extends GFileSystemBase> ctor =
				fsClass.getConstructor(FS_CTOR_PARAM_TYPES);
			GFileSystemBase fs = ctor.newInstance(containerFSRL.getName(), byteProvider);
			fs.setFilesystemService(fsService);
			// do NOT close fs here because that would close the byteProvider
			return fs.isValid(monitor);
		}
		catch (InstantiationException | IllegalAccessException | IllegalArgumentException
				| InvocationTargetException | NoSuchMethodException | SecurityException e) {
			throw new IOException("Error when probing filesystem " + fsClass.getName(), e);
		}
	}
A {@link GFileSystemFactory} implementation that probes and creates instances of
{@link GFileSystemBase} which use the legacy filesystem lifecycle pattern.
<p>
For each operation, this factory will mint a new instance of a GFileSystemBase-derived
fs, using its 3 param constructor, and call its isValid() or open().
<p>
After an isValid() call, the newly minted filesystem instance is thrown away.
<p>
This class requires special support in the {@link FileSystemFactoryMgr} to push
the fsClass into each factory instance after it is constructed.
Ghidra/Features/Base/src/main/java/ghidra/formats/gfilesystem/factory/GFileSystemBaseFactory.java