StableBit Scanner Change Log ================= RELEASE ======= 1.0.6.2636 ---------- * Release final. BETA ==== 1.0.6.2635 ---------- * [Issue #2162] QSM can throw an InvalidOperationException when we ask it if a disk is part of the backup database. * Fixed service crash on disk signature collision. * Added GPT support. RELEASE ======= 1.0.5.2601 ---------- * License transfer fix. * Put error trapping around WHS queries that are crashing on some systems. * Thread priority is being ignored by .NET. Updated code to use Win32 and made it optional in the config. 1.0.4.2590 ---------- * Do not re-attempt Direct I/O if the last attempt failed. * Reduced the thread priority of the AppDomain runner used by the file scanner. * Fixed native call for USB pass-through. Would cause some USB devices not to work with Direct I/O. * Addressed NTFS file time parsing errors. 1.0.3.2585 ---------- * Manual config switch to turn off WMI SMART permanently. * If WMI locks up retrieving SMART, do now spawn additional threads. * Added ability to create user dump files from the new Support tab in settings for ALPHA and BETA versions. * Added config option for maximum number of trace lines to log on error report. * Fixed rare access violation in native code handler. * Fixed insane bytes per sector value on one particular USB enclosure (based on auto error report). * Fixed omni-store tree node delete. 1.0.2.2542 ---------- * Fixed issue with sector map not re-drawing. * Updated SMART attribute formats / warnings to bring it in sync with the latest BitFlock.com (Cloud). * Fixed deadlock that could potentially lock up the service in some rare cases (and by proxy the console if user tries to interact with the service). 1.0.1.2530 ---------- * On fresh install, cloud integration dialog should be shown right after licensing. * Keep at most 20 error reports saved at all times. * Only show UI error dialog if the error actually came from us. Prior to this, the StableBit Scanner would show the error dialog no matter which add-in crashed the console. This will reduce false positives. * Errors from client-service synchronization will not crash the console. This had the potential of crashing the console while disk removal was in progress. * WHS Missing disks will be reported as missing. 1.0.0.2490 ---------- * Archive disks running low on space will no longer be reported as damaged. WHS APIs return "FAILING" in this case. 1.0.0.2488 ---------- * Activation ID will update instantly. * Trial extension will be offered for beta trial -> release trial. BETA 1.0.0.2480 ---------- * Prepared for retail license purchases. * "Ignore this issue" for StableBit Scanner WHS notifications now stick after reboot. 1.0.0.2477 ---------- * 30-day license renewing is now more explicit. * Based on user feedback, the licensing engine was changed to rely less on hardware factors. This means that if you have a Retail license (the few of you who do), you will need to transfer it into the new licensing system. This can be done by following the simple transfer wizard that will be automatically presented to you. Since the new system does not rely on HW as much, you will NEED to save you activation ID in case you have trouble with your license or you need to reformat your system. The idea here is to make the system as hassle free as possible. This change will hopefully resolve some of the issues people have been seeing with licensing. 1.0.0.2473 ---------- * Licensing factor tweak as a result of some error reports. * Revamped console UI error message. 1.0.0.2472 ---------- * Fixed a bug where if you opened the StableBit Scanner settings before opening the main tab it would appear as if your license was not found. 1.0.0.2467 ---------- * Remove service dependency on WHS Backup Service. * Corrected a problem with service not starting properly if it can't retrieve all the USB hardware IDs. * Added more detailed error reporting for Paul's bug. 1.0.0.2462 ---------- * A corrupt user config file would prevent the client from connecting to the service. Any corruption to the user config file will not prevent the console from connecting to the service. Note that this is not the file that stores user settings, but an internal file used to store connection state information. 1.0.0.2443 ---------- * In Settings, hours are now formatted 00-23 for places without AM/PM designators. 1.0.0.2439 ---------- * Fixed service connection issues for non-english systems. * Fixed performance graph drawing artifact. 1.0.0.2416 ---------- * Tweaked internal error reporting structures. * Fixed a bug where if while scanning, you made a change to the settings, that would need to stop the current scan, the scanner would freeze momentarily and abort all the current scans, loosing the progress it had made. 1.0.0.2405 ---------- * Tweaked the comm layer to try and resolve the connection problems that people have been having. * Added a TCP communications channel that will be used if the IPC (named pipes) one fails. * This build will reset your disk check state. 1.0.0.2351 ---------- * Disabled some non-usb Direct I/O methods because of potential for a bad driver interaction causing a system crash. They can be manually re-enabled in the .config file. 1.0.0.2350 ---------- * Fixed non-critical issue with IPC channel registration on server (sometimes it would keep retrying even if everything was ok). * Fix in notifications clear routine. * Fixed disk enumeration issue when disk has no known model. 1.0.0.2347 ---------- * Better error logging for pre-startup crashes, for both the service and console UI. * In addition to the automatic reporting infrastructure, all error reports are now saved to: * Service - C:\Documents and Settings\All Users\Application Data\OmniDriveGuard\Service\ErrorReports * ConsoleUi - C:\Documents and Settings\All Users\Application Data\OmniDriveGuard\ConsoleUi\ErrorReports * All caught errors are now written to the Application event log with the appropriate source name. * If you're having trouble getting the service to start / or console tab to appear, grab the reports from the directories above and send them via. stablebit.com/contact. Thanks. 1.0.0.2314 ---------- * Fixed overflow error in line chart. * Fixed recurring error on systems with WMI not functioning properly (COM error shutdown in progress). Direct I/O will be used instead. 1.0.0.2300 ---------- * Fixed bug in notification check. 1.0.0.2295 ---------- * Trial license tweaks. * Moved download servers to dl.covecube.com. 1.0.0.2280 ---------- * Corrected re-scan progress percentage. * Added option to simulate reads. * Added code to scan using ATA Read Verify Sector. Not enabled. * Wrapped Service IPC in reporting actions. * Implemented custom licensing system. * Licensing fixes. * Misc. fixes. * Got rid of DiskSettings, merged properties into ScannerSettings. * Changed bus saturation scan suspend code to be more pessimistic. Will suspend scan if >= 70% of bus speed is being consumed by the current scan and another disk starts being accessed using disk thrashing rules. * Fixed temperature display on details panel (was not showing up for drives that were reporting complex temperature values). * Added file recovery engine, asynchronous in separate app domain sandbox (same as file level scanner). * Recovers files by first writing out known good sectors. * Then attempts different combinations of strategies at reading the bad sectors. Some strategies are: * Linear / Non-Linear reads. * Near / Far reads. * Backward reading / Forward reading. * Currently there are 11 strategies for attempting to recover each bad sector. * Added file recovery wizard. It's accessible when selecting a damaged file in the StableBit Scanner damage report. You can open the damage report when there are unreadable sectors on any disk by clicking on one of the health status labels displayed in the info panels on the bottom, or by just right clicking on the disk. * Solidified SATA / PATA identification by putting it in sync with the convoluted evolution of the SATA "standard". * In summary: * ATA-5+ is possible SATA 1.0a+. * SATA 2.5+ can be identified, can exists over ATA-6+. * ATA-8+ implement SATA flags. * Moved SMART update to thread pool, should not block performance gathering. * When scan throttling, show correct status icon. * Swapped disk status icon priority. Overheating is now more important than a SMART warning. * Fixed sector map drawing race condition. * Improved throttling algorithm to be smoother. * Throttled disks (because of overheating) will now yield properly to bus saturation and thrashing. * Hard disks with firmware bugs will not be identified. * Stop scan button responds better. * Connect to service time was counted from when the console was loaded, not when connecting actually started. * Add .config file will override settings to enable/disable error reporting, direct I/O, SMART and disk identify override. * Service will now automatically restart on failure. * Cloud integration dialog will appear after the licensing wizard, not on top of it. 1.0.0.1971 ---------- * StableBit Scanner re-branding. * Implemented reverse scanning. Together with cluster coalescing should create a fast and reliable scanning engine. * Less flickering for tooltips in sector map. * Setting for 'Suspend on Hot Disk' and 'Maximum Disk Temperature'. * Better management of Hot disks. Will not switch between disks if they are all hot at the same temperature. * Disk throttling on overheating at user's request. * Temperature equalization. Attempts to equalize temperature when scanning multiple disks on the same controller. * Always re-check unreadable sectors, since the drive can re-map them and they can become readable again. * Fixed recovery from UI update error. * New purple block to indicate that damage detection is in progress. * Modifying sector state (readable / unchecked) now correctly starts scanning disk if in automatic mode. * Fixed graphics cutoff for overheating. * Added a bunch of settings in multiple categories. * Added new notifications related to overheating and SMART. Made the existing unreadable warning per disk. 1.0.0.1833 ---------- * Fixed serial number display with no Direct I/O (again). * Fixes to Omni-Store having to do with synchronization. Versions were not being used properly between client / server. * Cloud integration. * Error reporting can go into non-cloud mode. In manual mode, user is presented with option to send report / save locally if error occurs in UI. If error occurs in service while in non-cloud mode, no error report is generated. * USB pass-through method is queried from cloud. If cloud is disabled USB pass-through will be limited. * SMART attributes are cloud enabled and powered by BitFlock.com. This works in 2 ways: * 1. The human readable value is interpreted on a per model basis. Interpretation is updated from the cloud every 30 days. * E.g. For SSD disks, the lifetime percentage is shows. * For select Samsung disks Seek error rate is shown in terms of percent. * 2. Every hard disk model can have attributes that are "warning signs" of trouble. These warning signs are interpreted on a per model basis and every model has different warning types. * E.g. SSDs with lifetime indicators will set off a warning if their life is nearing 100%. * HDDs will set of a warning if there was a unreadable sector detected by an offline scan. 1.0.0.1680 ---------- * Display device storage descriptor in ATAPI1 panel, even if there is no Direct I/O. This will always show the disk serial number. * Error on disk removal when more than 1 disk on the controller that the disk was removed from. * Not-sane temperature will not be displayed with 'C' marker. Will not be accurate on some models until Omni-Cloud is implemented. * When service disconnected, the Omni-Store would not reset itself properly causing all kinds of crashes. * New type of error reporting. Any piece of code can be wrapped in a "ReportableAction". When that piece of code throws an Exception, an error report will be automatically sent out. The type of error report depends on whether the code was processed by SmartAssembly. If it was, we get line numbers with stack. Also, a reportable action can be told to only report a failure once, during the entire program run. This can be useful in failing drawing code. The reportable action itself can be instructed to throw an Exception after the error happens or just continue silently. * Put in reportable actions and reportable functions around pieces of code in UI and service that can potentially fail, but their failure is not critical. E.g. if we can't enumerate USB vendor IDs, or if we can't synchronize the UI. * If UI synchronization fails, and an error is reported, the Omni-Store is reset and re-synchronized on the next attempt. 1.0.0.1664 ---------- * Restarting service now resets UI's Omni-Store down to v.0. * Removing objects from the Omni-Store did not synchronize the removal. * Removing disk did not work. It would be removed before its controller was queried, this caused an error. * Fixed removing disk while scanning. Scan aborted, scan progress is saved, no errors at the end. * Fixed removing then re-adding same disk. Would not load up the previous disk check info without restarting console. Worked on the writer (server), but Omni-Store reader would not respect persistent key of the disk. * Scan progress is now reported in the list. * Fixed file scanner with large clusters. * When Direct I/O fails, use IOCTL_STORAGE_QUERY_PROPERTY to get device info such as serial number. This should work for all PnP devices. * When a disk is connected through a USB bus, the parent device node of the disk is the USB disk controller. We now get the PnP hardware IDs of all USB disk controllers. This information is now displayed in Technical Details when the user hovers their mouse over the USB attribute icon. The HIDs are going to be used in the upcoming Omni-Cloud to determine what USB bridge chip an external enclosure has and decide how to best communicate directly to the device depending on the manufacturer of the bridge chip. This is important for getting SMART info from USB devices or performing any Direct I/O over USB. 1.0.0.1526 ---------- * Optimized summary panel to not use excessive CPU cycles when idling. * Optimized IPC layer with new backing-store synchronization approach. * All objects that can be transferred via. IPC now exist in a backing store. Instead of transferring all the objects every time, the backing store is synchronized and only the changed objects are transferred. * As a result of this change, the disk check info's format has changed and all disk check history will be reset. * Upgraded the IPC backing-store to an Omni-Store. Omni-Store features: * Stores arbitrary objects in memory, and retrieve them later. Much like a dictionary. Stored Objects must implement IStorable and report any changes to their members by raising an event. * Stored objects are grouped by type and are retrieved in groups of objects by type. * The system understands inheritance and can map an object to any of its inherited types. * Any stored object can be a child of another stored object. A parent stored object can have one of more children. * Children of parents are grouped by type, and a parent can have more than one group of type specific children. * Any object in the store can be persistent. Persistent objects are saved to disk and are loaded automatically. * Persistent objects can be children of other persistent or-non persistent objects. * When a persistent object has a parent, the parent must implement IPersistentParentStorable. * The parent MUST return a static unique key that does not change between store restarts. * Persistent objects are loaded when the store loads and are auto-associated with their parents when / if the parent is ever added to the store. This association happens using the unique static key that every parent has. * Stores can either be writable or read-only. * Any changed to a store can be synchronized to one or more read-only stores. * All changes are versioned, so more than one store can be synchronized from a single store if need be at different intervals. * Synchronization can be either poll-based or push-based. * Synchronization of stores can cascade across multiple stores. E.g. Writer -> Reader1 -> Reader2 -> Reader3 Omni-Store accessors: * The data in an Omni-Store can be organized into different data structures using accesors. * Since the data in an omni-store is basically a loose collection of objects with very little structure, an accessors are collections of classes that let you read the data in a more structured manner. * An acessor separates data from structure. * A Tree accessor is currently implemented. * Each node in a tree has one or more objects of a given type and each object can have child nodes or not. * Separation of data from structure is important to provide for efficient data synchronization. * E.g. If you have a tree symbolizing all the people you know and their contact information, and one person changes their phone number, you don't want to send the entire tree in order to convey the new information. The Omni-Store solves the common CS problems of how to easily store persistent data, and how to efficiently synchronize structured data sets with an arbitrary organization. * Revamped the service and UI code to use the Omni-Store for any controller / disk information (this is BIG). This ensures that only the necessary changes are sent up to the UI from the service. * All program settings are now stored as persistent objects in the Omni-Store. * All settings will be reset to defaults. * Performance for disks / controllers is now only measured when the service requires it or the user is observing it. 1.0.0.1340 ---------- * For ATA pass-through, USB devices will ONLY be queried with USB specific pass through methods, non-usb devices will be queried with non-USB specific device methods. * Improved ATA pass-through disk verification. Now it will specifically use the same pass-through method for verifying the correctness of the pass-through information. * Extended tracing infrastructure to support multiple areas / components, each area having its own switchable tracing level. * Tracing levels: None, Errors, Warnings, Information, Verbose. * Similar to standard .NET. * Enabled the new tracing system in the most important areas of the service. * Added automatic error reporting to callback / timer / thread pool type of activities in the service. 1.0.0.1329 ---------- * When update fails, if it fails after the uninstall then the user is instructed to log out. They cannot continue to use the UI. User must re-install the add-on after logging back in. The old working version is kept intact. * Changed obfuscation settings to fix some native code interop problems. * Improved UI error trapping, tested with various scenarios, timers, threads, UI update errors. * Extended service error reporting system. * In addition to a full stack trace and local variable contents at the time of the crash, error reports now can attach a trace log file to themselves. * Performance timeout error reports are sent out if an action takes too long. * Custom error reports are sent out if a task fails, even if the service doesn't crash. E.g. file scanner has an error. * Informational / performance tracing reports are sent out for code sequences. E.g. Service start. To determine what happens and how long it takes. * All this happens automatically in the background, if there is user consent. For BETA / ALPHA this is mandatory. * To target zero practical bugs / zero performance problems. 1.0.0.1196 ---------- * Fix to disappearing volume mount points, depending on the order that they come back from the system. * Fix to detection of backup database file damage. When unreadable sectors damage backup database files, they are marked as so. * Direct I/O will perform the same validity check as SMART for validating correct disk access, to make sure that a port replicator behind a USB bridge is not involved. * When there is any type of error in the file scanner, error will be reported properly to the user and user can retry. * Service will now do most of the start-up work asynchronously. UI now understands more service startup states such as, starting, running, unable to start. * ATA pass-through selection is now smarter. It will use a pass-through mode that was successful before for that command. If none, it will take a hint from other commands, if none were successful, it will take a hint from other disks, if none successful, only then will it try all methods. ATA pass through is used when querying disk info and for SMART. * Lowered ATA pass through timeout to 3 seconds per command. 1.0.0.1144 ---------- * NTFS support for matching file records to sectors and clusters (LCNs). * Appdomain task runner. Asynchronously runs any task in a separate app domain. * 48-bit LBA support for ATA pass through. * Omni-drive guard health report. - Shows sector damage along with associated data damage and file duplication status for shared files. - Shows data structure map for each damaged data structure. - Shows damage information about each type of damage detected. * Tweaked hard disk info / SMART info in main details panel. * USB Jmicron ATA pass-through support. * Implemented a way of verifying whether pass-through is targeting the correct drive in enclosure. * Enabled all supported ATA pass-through over USB. Supported USB devices will show up with Direct I/O and SMART enabled (SAT/Sunplus/Jmicron). * Many fixes, along with an obscure auto-update fix that happens only if the user is auto-updating from an RDP session to the server and closes the console before the auto-update completes. * Overall error trapping and reporting for the UI. 1.0.0.332 --------- * Fixed error when showing drive details if serial number / firmware null. 1.0.0.299 --------- * Direct I/O for S.M.A.R.T. data, if not found using WMI. * S.M.A.R.T. summary error log internal data. * ATA pass-through over SCSI using SAT-2 draft standard T10/1826-D (Revision 09). This means Direct I/O for supported USB devices. * ATA pass-through over USB Sunplus bridge chip. But no way to target specific drive in enclosure. Not enabled. * Automatic error reporting for console tab UI. 1.0.0.28 -------- * First beta release. * Limited to 15 days. * Automatic updating, user does not need to run MSI. Optional binary signing. * Raw sectors disk scanner, with sector coalescing. * Scheduler supports scanning within a time window. * Parallelized multi-threaded scanner. Scans multiple disks at the same time over different controllers. * Disk thrashing detection and smart back off. * Disk overheating detection and smart back off. * Smart back off will try to find a "better" disk to scan, if there is one, and will start scanning it. * Bus speed measurement. This is approximate and may not be accurate for high speed busses. Important for low speed busses such as USB. * Using measured bus speed disk scanner will be suspended when another disk is being accessed, that is on the same bus as the one being scanned. * Raw ATA pass through support for disk identification and SMART data. Will try multiple methods depending on driver architecture in use by controller driver, one will probably succeed. * WHS user notification will be set when a bad sector is detected. * Automatic new disk detection / disk removal detection. Newly detected disks can be automatically scanned when detected. * Sector map of each disk, showing current health status and scan status. Including individual sector ranges for each type of sector status (e.g. readable / unchecked). * Sector map can be cleared / set using controls. User can tell the system that a disk is OK, or force a re-check. * SMART information panel with overall status and attribute data. Will warn when certain attributes become suspicious (e.g. off line uncorrectable > 0), or if the disk becomes hot. * Disk details will display the ATA / ACS-2 IDENTIFY data, if available and SMART capability data. Also, will show performance comparison for Controller vs. Disk vs. Scanner. * Summary panels (can be turned off) outline the state of the system in natural language and simple OK/Not OK states. User need not go further than this to know what is going on.