@Override
	public ByteProvider getByteProvider(GFile file, TaskMonitor monitor)
			throws IOException, CancelledException {
		monitor.addCancelledListener(listener);

		try {
			List<String> results = processManager.sendCmd("get_data " + file.getPath(), 1);
			File extractedFile = new File(results.get(0));

			// the DMG server process returns a path to a temporary file that
			// we need to copy to our own space to ensure its not deleted out from underneath
			// us.
			// Use the FileSystemService filecache to store the file even though
			// we are not accessing the file by its hash value later.
			if (!extractedFile.exists() || extractedFile.length() == 0) {
				return null;
			}
			ByteProvider fileProvider =
				fsService.pushFileToCache(extractedFile, file.getFSRL(), monitor);
			return fileProvider;
		}
		finally {
			monitor.removeCancelledListener(listener);
		}
	}
Creates a {@link DmgClientFileSystem} instance, using a decrypted dmg file and
the filesystem's {@link FSRLRoot}.

@param decryptedDmgFile path to a decrypted DMG file.  The DmgClientFileSystemFactory
takes care of decrypting for us
@param deleteFileWhenDone boolean flag, if true, the container file will be deleted when
the filesystem is closed
@param fsrl {@link FSRLRoot} of this filesystem
@param fsService {@link FileSystemService} reference
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ios/dmg/DmgClientFileSystem.java