Tumgik
myexp-blog · 10 years
Text
Mouse clicks don't work for some applications
Today I encountered a strange problem. My mouse didn't work in Netbeans and other Java-Applications. I could click other buttons and menus. Rebooting did not solve the problem, and unplugging the mouse and replacing it by another mous did not solve the problem either. Weird. Then I shut the computer down completely (unplugging power) and rebooted with the other mouse. Izt solved the problem, but after I replugged my original mouse the problem returned, after that the reserve-mouse had the same problem. Strange. That is what probably happened. Earlier I spilled water on my table and the mouse was affected. After that the mouse was sending signals that in a strange way irritated the USB-port. Solution: Reboot (with power completely off) with reserve-mouse and let the original mouse dry for a few days (if not damaged permanently), then switch back.
0 notes
myexp-blog · 11 years
Text
An EmEditor/SumatraPDF/Python LaTeX/MikTeX work environment
To compile LaTeX documents with MikTeX (i use XeLaTeX instead of pdfLaTeX) one does have to define some tools in the tools toolbar in EmEditor.
These include
one tool to compile with MakeIndex, BibTex and Xelatex,
one tool to view the resulting .pdf file using SumatraPDF (and highlighting the current line in the .pdf file as well using forward search),
one tool to clean up temporary files created while compiling (a Python 3.3 script).
Tumblr media
This is of course only a start. There are endless possibilities in making this evenbetter.
Compiling
Comand line:
<miktex-bin-directory-path>\texify.exe
Arguments:
--pdf --engine=xetex --tex-option=-synctex=1 "$(Path)"
Viewing
Comand line:
<sumatraepdf-executable-dir-path>>\sumatrapdf.exe
Arguments:
-reuse-instance -forward-search "$(Path)" $(CurLine) -inverse-search "<emeditor-executable-dir-path>\emeditor.exe %f /l %l /cl %c" "$(Dir)\$(Filename).pdf"
Cleaning
Comand line:
<clean-up-script-dir-path>\clean_latex_temp_files.pyw
Arguments:
-d "$(Dir)"
clean_latex_temp_files.pyw:
#!/usr/bin/env python # -*- coding: utf-8 -*- # filename: clean_latex_temp_files.py.py import os import os.path import argparse parser = argparse.ArgumentParser() parser.add_argument('-d', '--dir', dest='dir', help='the directory to clean-up', action='store', required=True) args = parser.parse_args() temp_extensions = ['aux', 'blg', 'log', 'bbl'] for entry in os.listdir(os.path.abspath(args.dir)): if os.path.isfile(entry) and os.path.splitext(entry)[1][1:] in temp_extensions: os.remove(entry)
The list of extensions for templates is not complete and can be modiefied.
0 notes
myexp-blog · 11 years
Text
Netgear DGN 2200 v3 reconnect/connect/disconnect tool
Just a little script I wrote to reconnect, connect or disconnect my Netgear DGN 2200 v3 router (and DSL modem) from or to the internet. It's a bit more sophisticated than the last attempt. Written in Python 3.2 and using pyQt4 for graphical user interface, there is also a command line version.
Tumblr media
Download either
source,
or if you feel daring
setup with win32 binaries (SHA-1: 4AE0CF56090BA81405364AD6D5E66B92217D1AA1).
I use Windows 7 32-bit and have no idea if the compiled program runs on Windows 7 64-bit. You can try.
If you want to use the Python script directly, use either „dgn_tool_cli.py“ or „dgn_tool_gui.pyw“. you need pyQt4 for the GUI version.
Both he command line version and the GUI version support configuration through a JSON („config.json“) file residing in the same directory as the script or executable:
{ "login": "admin", "password": "somepassword", "router_ip": "192.168.0.1" }
You can edit this as you like and use „-l“ or „--load“ argument to the script to load confguration data from file.
Tumblr media
Works great with JDownloader:
Tumblr media
0 notes
myexp-blog · 12 years
Text
Printer installation error 1801 (0x709) because of "invalid arguments".
Recently I tried to install Caminova Document Express 7.5 evaluation copy. I encountered an error during setup that read „printer: invalid arguments“. I initiated the setup once more with log option enabled (/log ) and found these lines:
... Executing: rundll32 printui.dll,PrintUIEntry /if /f "C:\Program Files\Common Files\Caminova\DjVu Virtual Printer\drivers\r28008\DjVuVirtualPrinter.inf" /m "DjVu Virtual Printer" /b "DjVu Print Service" /r "CVPM" CreateProcess: rundll32 printui.dll,PrintUIEntry /if /f "C:\Program Files\Common Files\Caminova\DjVu Virtual Printer\drivers\r28008\DjVuVirtualPrinter.inf" /m "DjVu Virtual Printer" /b "DjVu Print Service" /r "CVPM" CreateProcess: finished=0 Installation check Installer::installPrinter(561) : error 0x709: Invalid printer name. uninstallPrinter(DjVu Print Service) Installer::uninstallPrinter(619) : error 0x709: Invalid printer name. ...
Searching the internet for answer turned up nothing usable. But I finally found the solution. There were remnants from an previous install left. But not files - I searched for any leftover files before, and not registry entries - I searched for these also. It was a corruption in the DriverStore of Windows 7 (C:\Windows\System32\DriverStore), the repository that stores drivers that have been installed or are expected to be installed in the future. There was an entry in the database index files (INFCACHE.1, infstor.dat, infpub.dat, infstrng.dat, inspected with an hex editor) but the actual folder with the files must have been deleted. I found out about when reviewing the setupapi.dev.log (C:\Windows\inf\setupapi.dev.log), there were the lines:
>>> [Import Driver Package - c:\program files\common files\caminova\djvu virtual printer\drivers\r28008\djvuvirtualprinter.inf] >>> Section start 2012/09/12 12:43:10.569 cmd: rundll32 printui.dll,PrintUIEntry /if /f "C:\Program Files\Common Files\Caminova\DjVu Virtual Printer\drivers\r28008\DjVuVirtualPrinter.inf" /m "DjVu Virtual Printer" /b "DjVu Print Service" /r "CVPM" sto: Importing driver package into Driver Store: sto: Driver Store = C:\Windows\System32\DriverStore (Online | 6.1.7601) sto: Driver Package = c:\program files\common files\caminova\djvu virtual printer\drivers\r28008\djvuvirtualprinter.inf sto: Architecture = x86 sto: Locale Name = neutral sto: Flags = 0x00000000 ! sto: Driver package 'djvuvirtualprinter.inf' already exists in Driver Store: ! sto: Filename = C:\Windows\System32\DriverStore\FileRepository\djvuvirtualprinter.inf_x86_neutral_8ab3b3ae6aff7bd1\djvuvirtualprinter.inf (oem8.inf) sto: Imported driver package into Driver Store: sto: Filename = C:\Windows\System32\DriverStore\FileRepository\djvuvirtualprinter.inf_x86_neutral_8ab3b3ae6aff7bd1\djvuvirtualprinter.inf sto: Time = 46 ms
It says the driver was already known to the DriverStore but then I checked and the folder from the log file (C:\Windows\System32\DriverStore\FileRepository\djvuvirtualprinter.inf_x86_neutral_8ab3b3ae6aff7bd1) did not exist. Solution(s): Boot with an „Parted Magic“ Linux LiveCD (in my case an USB version), which can read and write NTFS ignoring the permissions. I deleted the contents of the DriverStore directory (C:\Windows\System32\DriverStore). Warning: You will lose the DriverStore. But *me* I have the drivers of my hardware and the internet in case I am missing a driver. It's also possible to create the folder (permissions must be obtained first) and copy the drivers inside. But the DriverStore database will still be out of sync. So the delting (above) is fine for me.
0 notes
myexp-blog · 12 years
Text
Netgear DGN2200v3 (N300) Python reconnect script
Got a Netgear DGN2200Bv3 router/modem and needed to be able to reconnect it via script rather than through the web interface. A solution via cURL proved unsatisfactory as the router interface generates an ID in the connection status page and won't accept disconnect or connect forms without this ID. So I needed a different solution. I came up with this python (3.2) script to reconnect:
#!/usr/bin/env python # -*- coding: utf-8 -*- # filename: n300_dgn2200_reconnect.py # if platform is Windows the script beeps ascending upon changed IP after # reconnect and descending if IP stayed the same. import urllib.request import re import time import platform import argparse from itertools import cycle import string import random import os.path import hashlib class ReconnectError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) def key_gen(size=6, chars=string.ascii_lowercase + string.digits): return ''.join(random.choice(chars) for x in range(size)) def xor_crypt(s, key): return ''.join(chr(ord(x) ^ord(y)) for (x, y) in zip(s, cycle(key))) def create_xor_data(s): data = s.encode('utf-8') key_raw = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(8)) key = key_raw.encode('ascii') key_hash = hashlib.sha512(key).digest() ba = bytearray(64) ba[:len(data+key)] = data + key for i in range(64): if i <= len(data+key): ba[i] = ba[i] ^ key_hash[i] else: ba[i] = random.randint(0,255) ^ key_hash[i] return (key_raw, bytes(ba)) def decrypt_xor_data(b, password): result = None current = -1 key = password.encode('ascii') key_hash = hashlib.sha512(key).digest() ba = bytearray(b) for i in range(64): ba[i] = current = ba[i] ^ key_hash[i] if current == 0 and ba[i-len(key):i] == key: result = ba[:i-len(key)].decode('utf-8') break return result # a function to contain the reconnect procedure, separate functions for # connect, disconnect would be a nice idea, but I need only this def reconnect(login_password, router_address, login_name, auth_realm, reconnect, store_pass): # pattern to find id id_pattern = re.compile(r'id=([^"]+)"') # pattern to find ip ip_pattern = re.compile(r'IP Address</b></td>[^<]*<td nowrap>' + '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})') key_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), os.path.splitext(__file__)[0] + '.key') # if password should be stored if store_pass: key, content = create_xor_data(login_password) try: with open(key_file, 'wb') as f: f.write(content) except IOError: print('The password could not be stored. An IO-error occured.') else: print('You can use "{key:s}" as new password instead to ' \ 'access your stored password.'.format(key=key)) # only if password should not bestored, try to receive store password elif os.path.exists(key_file): key = None try: with open(key_file, 'rb') as f: key = decrypt_xor_data(f.read(), login_password) except IOError: print('The password could not be read. An IO-error occured.') else: if key: login_password = key print('Using stored password.') else: print('Stored password could not be decrypted. you may want ' \ 'to delete the .key file and store again if you ' \ 'forgot.') # we need a password-manager, the admin pages are protected with # http basic auth password_manager = urllib.request.HTTPPasswordMgr() password_manager.add_password(auth_realm, router_address, login_name, login_password) # construct opener and install it http_handler = urllib.request.HTTPBasicAuthHandler(password_manager) page_opener = urllib.request.build_opener(http_handler) urllib.request.install_opener(page_opener) # no data for first GET (the connection status page) params = None # if anything error-like happens -> end the script try: # get the connection status page, extract the ID resp = urllib.request.urlopen( '{router_address:s}/setup.cgi?next_file=RST_st_poe.htm'.format( router_address=router_address), params) page = resp.read().decode('utf-8') # getting the old ip match = ip_pattern.search(page) if match: old_ip = match.group(1) else: raise ReconnectError('IP not found.') # if --reconnect is not set only the IP is displayed, reconnection # steps are skipped if not reconnect: print(old_ip) else: # getting id for disconnect match = id_pattern.search(page) if match: id = match.group(1) else: raise ReconnectError('ID not found.') # now execute a disconnect with the ID from last request params = urllib.parse.urlencode({ 'todo' : 'disconnect', 'this_file' : 'RST_st_poe.htm', 'next_file' : 'RST_st_poe.htm', 'SID' : '' }) resp = urllib.request.urlopen( '{router_address:s}/setup.cgi?id={id:s}'.format( router_address=router_address, id=id), params.encode('utf-8')) page = resp.read().decode('utf-8') # every GET/POST will change the ID so we have to extract it again # from the repsonse to the former POST match = id_pattern.search(page) if match: id = match.group(1) else: raise ReconnectError('ID not found.') # now execute a connect with the ID from last request params = urllib.parse.urlencode({ 'todo' : 'connect', 'this_file' : 'RST_st_poe.htm', 'next_file' : 'RST_st_poe.htm', 'SID' : '' }) # the disconnect is not immediately, better wait a little bit time.sleep(2) resp = urllib.request.urlopen( '{router_address:s}/setup.cgi?id={id:s}'.format( router_address=router_address, id=id), params.encode('utf-8')) page = resp.read().decode('utf-8') match = ip_pattern.search(page) if match: new_ip = match.group(1) if platform.system() == 'Windows': import winsound if old_ip == new_ip: winsound.Beep(2000,200) winsound.Beep(1500,200) winsound.Beep(1000,200) else: winsound.Beep(1000,200) winsound.Beep(1500,200) winsound.Beep(2000,200) print(new_ip) else: raise ReconnectError('IP not found.') except urllib.error.HTTPError as err: print('HTTP error ({code:d}) occured.'.format(code=err.code)) if err.code == 401: print('Password or login name may be incorrect.') except ReconnectError as err: print('An error ({error:s}) occured.'.format(error=err)) # argument parsing parser = argparse.ArgumentParser() parser.add_argument('--store-password', dest='store_pass', action='store_const', const=True, help='stores password in file "{fname:s}" and ' \ 'generates access password to use instead for ' \ 'future use.'.format(fname=__file__ + '.key'), default=False ) parser.add_argument('--reconnect', dest='reconnect', action='store_const', const=True, help='reconnects the adsl-modem', default=False ) parser.add_argument('--gui-address', metavar='HOST', dest='router_address', help='the address of GUI with http-prefix (default: \ http://192.168.0.1)', default='http://192.168.0.1' ) parser.add_argument('--login', metavar='LOGIN', help='the login name (default: admin)', default='admin', dest='login_name') parser.add_argument('--password', metavar='PASSWORD', dest='login_password', help='the password for login', required=True) parser.add_argument('--realm', metavar='REALM', help='the login realm (default: NETGEAR DGN2200Bv3)', default='NETGEAR DGN2200Bv3', dest='auth_realm') args = parser.parse_args() reconnect(router_address=args.router_address, auth_realm=args.auth_realm, login_name=args.login_name, login_password=args.login_password, reconnect=args.reconnect, store_pass=args.store_pass)
It can be used either to retrieve the IP of current connection only:
D:\Programme\Tools\_diverse>n300_dgn2200_reconnect.py --gui-address http//192.168.0.1 --login admin --password 123fb1ef11 84.60.110.181
Or it can be used to also perform a reconnect (beeping ascending on Windows platforms if IP adress changed):
D:\Programme\Tools\_diverse>n300_dgn2200_reconnect.py --reconnect --gui-address http//192.168.0.1 --login admin --password 123fb1ef11 84.60.110.181
You can also encrypt your password (not safe, just that your little brother cannot read it plain text) in an external file.
D:\Programme\Netzwerk\jdownloader>n300_dgn2200_reconnect.py --password 123fb1ef11 --store-password You can use "ziz4sk" as new password instead to access your stored password. 84.60.100.127
As you can see above the script generates a new password to access the stored password. This way you can call the script with your new password like in the first example without revealing it as plain as before. Be warned the encryption is not safe - it’s simple XOR with a known password, I could have used ROT13 instead. ;-)
D:\Programme\Tools\_diverse>n300_dgn2200_reconnect.py --reconnect --gui-address http//192.168.0.1 --login admin --password ziz4sk 84.60.110.181
0 notes
myexp-blog · 13 years
Text
Extracting PKZIP z01 z02 z03 ... zip without PKZIP if 7-zip won’t extract
First concatenate the files.
file with extension z01 is the first.
file with extension zip is the last.
files with extension zXX (if existing) are in between.
Use this command in console (replace first, last, concatfile files with actual filenames): copy /b first+files+last concatfile
Use the tool unzip (available from http://www.info-zip.org/unzip.html) to unzip the concatenated file: unzip.exe concatfile
Unzip will protest that the file has extra-bytes at the beginning of the archive but will extract.
0 notes
myexp-blog · 13 years
Text
Booting Acronis Backup & Recovery 10 with Syslinux
I read that some people had difficulties booting Acronis Backup & Recovery 10 with Syslinux. I had these difficulties, too. Why would you boot Acronis Backup & Recovery 10 with Syslinux? Because you want to make a bootable USB stick with more than Acronis Backup & Recovery 10. Here is how you can get Acronis Backup & Recovery 10 to boot with Syslinux.
Create an emergency disk image (extension .iso) with Acronis Rescue Media Builder.
In order to boot with Syslinux you need to setup a syslinux usb-stick (read about that in the documentation provided by syslinux. A basic syslinux.cfg for booting Acronis Backup & Recovery 10 looks like this:
MENU DEFAULT acronis LABEL acronis MENU LABEL Acronis: Backup & Recovery 10 KERNEL /boot/br10/kernel.dat APPEND initrd=/boot/br10/ramdisk.dat vga=794 ramdisk_size=49152 acpi=off product=bootagent media_for_windows quiet noapic
Of course you have to make the paths fitting to the location where you store the kernel.dat and the ramdisk.dat (or agent_ramdisk.dat).
Now, Acronis uses a trick to fool you. The files visible when looking in the ISO-file are not the real ones used too boot Acronis Backup & Recovery 10. These are the ones for the trial verison of the program. And if you use these, you will get an error message, saysing your license is deactivated.
Failed to check the License Key. The key is disabled
The real files are hidden in the ISO as well but made invisible by Acronis by manipulating the file table. I do not know which free programs can do this, but you need to extract two files from the ISO-image: one is dat2.dat (the ramdisk file) and the other dat3.dat (the kernel file). A workaround would be a hex-editor (like the free HxD) and search inside the ISO for the beginning of dat2.dat
1F 8B 08 08 E0 13 F5 4C 00 00 61 67 65 6E 74 5F
and the ending
FC 9F 7F 96 F2 BF B5 34 F1 23 44 09 CA 09
and copy everything between (including the bytes posted above) into a new file dat2.dat. Be aware that there are two locations in the ISO-file that match. You care only about the first one. The second is for the trial version file. Do the same for dat3.dat with the beginning
EA 05 00 C0 07 8C C8 8E D8 8E C0 8E D0 31 E4 FB
and the end
>00 00 00 00 00 00 00 00 00 00 00 00 B3 2B A8 58
rename dat2.dat to ramdisk.dat and rename dat3.dat to kernel.dat, place both files on the USB-stick and make sure the paths in the syslinux.cfg are set right.
You can use the following Python script (I am using Python 3.1.2, sorry, but maybe you can edit) to extract the files from the ISO-file, you only need to make sure to edit the filename constants in the script:
# -*- coding: utf-8 -*- # filename: extract.py import os import os.path from optparse import OptionParser N_RAMD = 'ramdisk.dat' N_KERN = 'kernel.dat' # helper class for struct-like object class Bunch: def __init__(self, **kwds): self.__dict__.update(kwds) # signatures of the different files dd11 = Bunch( kernel=Bunch(begin=b'\xea\x05\x00\xc0\x07\x8c\xc8\x8e\xd8\x8e\xc0\x8e\xd0\x31\xe4\xfb', end=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\xa4\x1e\xce', name=N_KERN), ramdisk=Bunch(begin=b'\x1f\x8b\x08\x00\xe0\xfc\x29\x4d\x02\x03\xb4\xbd\x7b\x73\x25\xd7', end=b'\x58\xff\x3f\x3e\xd5\xc7\xff\x00\x11\xdd\xa0\x53\x00\x06\x53\x05', name=N_RAMD)) tih2011 = Bunch( kernel=Bunch(begin=b'\xea\x05\x00\xc0\x07\x8c\xc8\x8e\xd8\x8e\xc0\x8e\xd0\x31\xe4\xfb', end=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\xf7\xc0\xc6', name=N_KERN), ramdisk=Bunch(begin=b'\x1f\x8b\x08\x08\x16\xe0\x86\x4c\x00\x00\x72\x61\x6d\x64\x69\x73', end=b'\x42\x16\xc0\xfc\x9f\x73\xce\x3b\x60\xb5\x88\x69\xbc\xf8\x79\x04', name=N_RAMD)) br10 = Bunch( kernel=Bunch(begin=b'\xea\x05\x00\xc0\x07\x8c\xc8\x8e\xd8\x8e\xc0\x8e\xd0\x31\xe4\xfb', end=b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x2b\xa8\x58', name=N_KERN), ramdisk=Bunch(begin=b'\x1f\x8b\x08\x08\xe0\x13\xf5\x4c\x00\x00\x61\x67\x65\x6e\x74\x5f', end=b'\x9a\x6a\xfc\x9f\x7f\x96\xf2\xbf\xb5\x34\xf1\x23\x44\x09\xca\x09', name=N_RAMD)) # helper function to copy bytes from one file to anonther def cp(iname, oname, pos, n_bytes): buffer_size = 2048 buffer = c_bytes = 0 with open(iname, 'rb') as ifile: with open(oname, 'wb') as ofile: ifile.seek(pos) while (1): if ((n_bytes - c_bytes) < buffer_size): buffer = ifile.read(n_bytes - c_bytes) else: buffer = ifile.read(buffer_size) if buffer: c_bytes += len(buffer) ofile.write(buffer) else: break # helper function to find position of string in a large file def fnd(fname, s, start=0): with open(fname, 'rb') as infile: size = os.path.getsize(fname) buffer_size = 4096 buffer = None infile.seek(start) prebuffer = len(s)-1 while (1): if (infile.tell() >= prebuffer and infile.tell() < size): infile.seek(infile.tell() - prebuffer) buffer = infile.read(buffer_size) if buffer: found = buffer.find(s) if found >= 0: return infile.tell()-(len(buffer)-found) else: return -1 # begin: option parsing parser = OptionParser(usage='Usage: %prog [options] ISOFILE', version='%prog 0.1') parser.add_option("--product", dest="product", help="PRODUCT is BR10 or DD11 or TIH2011 (for Backup & Recovery 10, Disk Director 10 or True Image Home 2011)", metavar="PRODUCT") (options, args) = parser.parse_args() if options.product == None or options.product == 'BR10': print('Assuming product: Acronis: Backup & Recovery 10') product = br10 elif options.product == 'DD11': print('Assuming product: Acronis: Disk Director 11') product = dd11 elif options.product == 'TIH2011': print('Assuming product: Acronis: True Image Home 2011') product = tih2011 else: parser.error('Invalid argument to option --product. Try --product followed by either BR10, DD11 or TIH2011.') if len(args) == 0: parser.error('Argument ISOFILE required.') if not os.path.exists(args[0]): parser.error('Argument ISOFILE must be a valid path to an existing file.') # end: option parsing error = False # finding and extracting the files for f in (product.ramdisk, product.kernel): if not error: b_pos = e_pos = 0 b_pos = fnd(args[0], f.begin) if (b_pos >= 0): e_pos = fnd(args[0], f.end, start=(b_pos + len(f.begin))) if (e_pos >= 0): print('Extracting file ({0}).'.format(f.name)) cp(args[0], os.path.join(os.path.dirname(os.path.abspath(args[0])),f.name), b_pos, (e_pos - b_pos + len(f.end))) if error: print('Error: Something went wrong. Maybe wrong product. See help for option --product.')
Converted Script as executable file (rapidsharecom)
Converted Script as executable file (netload.in)
21 notes · View notes
myexp-blog · 13 years
Text
Best file backup solution for me so far
I tried a lot of backup solutions in the past. Different programs, different scripts, partition imagers, folder synchronizers. I have found my favourite so far.
cwRsync is a port of the known unix tool rscync which let’s you synchronize folders over network while making sure you transfer as little data as needed to do the job. Normally you need a server and a client to let the latter connect to the server and transfer the file. But as I am doing my backups locally  I just need the client. Then I have a batch file that call the cwrsync command several times with different parameters to copy the folders I want to backup to an external drive. This has benefits:
The files are not packed into some archive file and therefore do not require special software to be recovered or searched.
Because of the way rsync works, only the parts of files that have been altered are transfered. This saves a lot of time when working with big files. Imagine an e-mail database file with 600 MB, you receive one e-mail and the files has changed. But instead of transferring 600 MB, the rsync command only transfers the portion of the files that has been changed.
If you like encryption you can use Truecrypt at the backup destination.
28 notes · View notes
myexp-blog · 13 years
Text
R-Studio says: MFT record child's claimed parent mismatch, aborting.
This can appear if something is seriously wrong with your drive. But I had this when I still could access the drive and there were no problems except that R-Studio complained. I wanted to get rid of it. I tried:
Rebooting with a Linux  CD called SystemRescueCD and tried the ntfsfix command on that partition but it didn’t fix the error.
Then I found two ways to fix the errror:
The free eraser tool eraser has a routine that is called ”wipe unused space“ (or something like this. I picked the simplest overwriting method (pseudorandom data) as I just wanted a side-effect of the routine and not deleteing sensitive data. The side-effect is that the MFT is compacted as well and the entries that led to a mismatch fell out of the MFT. This method takes a long time to finish and there is a lot of hd activity. Imageine a 250GB partition that is mostly empty and all the space has to be overwritten in order to compact the MFT later (the program does not allow to only compact the MFT).
The better method (but not free) is the program Total Defrag by software maker Paragon that has a method for comapcting the MFT. You can choose this without the need to defrag.
Both methods fixed that problem (was it really a problem?) for me.
3 notes · View notes