C++ Memory Validator x64 / x86 Change History

All customers requested features are shown in blue. We have added this colour coding so that you
can see that we really do listen to our customers. If you want a feature and another vendor has let you
down ask us. There are features listed below that have been requested in competing products, but which
the vendor could not see the purpose.

Version 7.17Version 7.17 includes the following functionality:

Updated DLLs found in System 32 dialog with a choice of actions for how to treat the DLLs.

Renamed Configure menu to Settings.

Added option to re-run the Startup Settings Wizard to the Settings menu.

Added User Interface Mode setup to the Startup Settings Wizard.

Version 7.16Version 7.16 includes the following functionality:

New release that does not store any Software Verify DLLs in Windows system directories. This should reduce the likelihood that our software tools are mistaken for viruses/trojans.

Updated NT Service API and related documentation.

Version 7.15Version 7.15 includes the following functionality:

Bug fix for incorrect new/free mismatch report.

Bug fix for C/C++ source code parsing.

Bug fix for dependency checking.

Version 7.14Version 7.14 includes the following functionality:

Display bug fixes for High DPI (4K plus) screens.

Bug fix for filters.

Bug fix for crash with callstack leaf filters.

Version 7.13Version 7.13 includes the following functionality:

Change of behaviour for filtering on Memory and Objects tabs. Filters can't be inverted. But whole filter groups can be configured to show or hide data. This is much more powerful filtering than the previous implementation.

Bug fix for potential crash during shutdown.

Bug fix for memory leak.

Performance improvement.

Version 7.12Version 7.12 includes the following functionality:

Maintenance release

Version 7.11Version 7.11 includes the following functionality:

Bug fix for potential (very rare) crash when trying to inject into another process (or wait for application).

Version 7.10Version 7.10 includes the following functionality:

Performance improvement for MAP file reading.

Version 7.09Version 7.09 includes the following functionality:

Multi-threading bug fix for process monitor.

Bug fix for handling of deallocation/reallocation of NULL pointers/handles.

Version 7.08Version 7.08 includes the following functionality:

Bug fix for crash with Filters context menu.

Bug fix for global hook DLL detection.

Version 7.07Version 7.07 includes the following functionality:

Change to the options controlling when debug information is missing dialogs are show to you. You now have more control over when this happens.

Bug fix for PE format inspection DLL to prevent crashes when inspecting a DLL with an unusual data layout.

Improvements to STABS debug information handling.

Improvements to COFF debug information handling.

Version 7.06Version 7.06 includes the following functionality:

Improved error messages for software installer in the unlikely event the software updater fails for some reason.

Bug fix for STABS symbol demangling

Updated diagnostic messages.

Version 7.05Version 7.05 includes the following functionality:

Additional warning about /DEBUG:FASTLINK built executables at start of run (after hooking) rather than at end of run.

Version 7.04Version 7.04 includes the following functionality:

Support for Visual Studio 2017. Previous versions had implicit support for VS 2017, now we provide explicit support for VS 2017.

Bug fix for DLL not found message to handle the case where the DLL is on the PATH being set by the environement variable set from the launch dialog.

Re-implemented filters. This improves filter robustness and also fixes some bugs in the filter manager GUI.

Bug fix for trying to launch NameWithA Space.exe launching NameWithA.exe instead. Both .exes need to be in same dir to see this bug.

Version 7.03Version 7.03 includes the following functionality:

Performance improvement during launching. Replaced brute force assembly check with correct checking of manifest contents and WinSxS assemblies. This is faster and more reliable than previous implementation (which on some machines was very slow).

Version 7.02Version 7.02 includes the following functionality:

Bug fix for stack walker. Very rare bug for anyone to encounter.

Version 7.01Version 7.01 includes the following functionality:

Bug fix for potential crash on some systems due to DLL loading order.

Bug fix for DLL dependency checker - now includes scan of WinSxS to handle manifests.

Updated documentation, now includes correct error codes, all 66 of them.

Version 7.00Version 7.00 includes the following functionality:

Addition of Instrumentation Logging. Updated settings dialog and new dialog on Tools menu. This allows you identify when filters prevent something from being instrumented.

Improved UX in a few areas.

Improvement to Launch Dialog. Applications with missing DLL dependencies are now checked for. If a missing dependency is found you are warned about the failure and given the option to cancel the launch or continue trying to launch.

Change to DbgHelp failure to find debug information reporting to include PDB file location information - this will draw your attention to the fact you may need to specify this information, for example if you keep your PDB files in a separate directory to the your EXE/DLLs.

Version 6.98Version 6.98 includes the following functionality:

Bug fix for flicker on the Memory Coverage display.

Bug fix for crash when deleting watermarks.

Bug fix for possible crash during shutdown of application being monitored.

Bug fix possible crash when handling reading modern format PDB files with older (incompatible) versions of DbgHelp.dll if the wrong version of DbgHelp.dll is chosen (or loaded by the OS loader).

Debug information created with Visual Studio's /DEBUG:FASTLINK is now detected and a warning displayed on the Diagnostic tab indicarting that /DEBUG needs to be used to create usable debug information.

Bug fix for symbol handling (copying DbgHelp.dll so that it can be found).

Addition of support for EventLog monitoring to identify why some applications fail to start properly. This is available if you are using Vista or more recent operating systems.

Version 6.72Version 6.72 includes the following functionality:

Bug fix for accessing COFF and STABS format debug information.

Inject dialog bug fix.

Bug fix for thread naming.

Version 6.71Version 6.71 includes the following functionality:

Bug fix for handling unable to write to temporary files when fetching symbols from symbol servers and symbol files.

Bug fix for handling faulty .svlord files resulting in empty function names. Now you get something useful even if it's not what should be in the .svlord file. (Better error handling).

Bug fix for some handle leaks.

Bug fix for memory statistics relating to failed memory allocations.

Bug fix for reporting memory leaks for failed memory reallocations.

Better data reporting for failed memory allocations.

Bug fix for CryptMemReAlloc() and CryptMemFree() handling.

Performance improvement for high DPI scaling handling.

Data display improvement for Memory and Analysis tabs.

Version 6.70Version 6.70 includes the following functionality:

Addition of two new sort types on the Memory tab. Sort by Num Allocations at callstack. Sort by Total Size at a callstack.

Performance improvement for processing data from stub in GUI. For many non-C++ and non-HeapAlloc() allocations, processing of this data has been speeded up enormously. For some applications that allocate a lot of memory, performance improvement is easily 10x and nearly 100x in some cases.

Bug fix for some rare deadlock like conditions (not caused ciritcal sections, but a combination of other events). These are rare and tend to occur when closing one session and launching a new test session.

Bug fix for some mangled symbols in callstacks that should be elided.

Version 6.69Version 6.69 includes the following functionality:

Bug fix for double click behaviour on various dialogs.

Bug fix for loading/saving of settings data.

Bug fix for session manager.

Version 6.68Version 6.68 includes the following functionality:

Change to shared memory transport. Now more considerate with memory usage. Also has improved out of memory fail-over handling.

Bug fix for two data race memory corruptions (that could cause crashes) in the GUI. This is a recommended download.

Version 6.67Version 6.67 includes the following functionality:

Change to UI global hook defeat mechanism so that Winsock is not interfered with.

Addition of ability to specify a different application to monitor than the application that is being launched. This allows you to monitor applications launched by a different application.

Addition of -programToMonitor and -programToMonitorLaunchCount command line arguments.

Bug fix for TDS Symbol Reader when Validator DLL is not loaded from Validator install directory.

Change to hooking of statically linked Delphi memory allocation functions - we've made the matching of function names a bit more lax to accomodate a recently found alternative style of symbol representation in the TDS sysmbols.

Version 6.49Version 6.49 includes the following functionality:

Bug fix for serialization - you can't load a session that is already loaded in the session manager.

Copy from grid now uses TAB to separate columns rather than SPACE. This is for improved copy/paste with Excel.

Loading a session will now detect when attempts are made sessions saved with an incompatible product (example: loading 64 bit session into 32 bit tool). Valid for all sessions from this version onwards.

Memory coverage now detects files that are part of Microsoft Visual Studio CRT and excludes them from memory coverage.

Bug fix for potential crash with manifest handling.

Version 6.46Version 6.46 includes the following functionality:

New configuration of DbgHelp DLLs for VS 2013 and VS 2015 to provide better performance.

Support for the alias CreateDialog/A/W in memory coverage statistics.

Version 6.45Version 6.45 includes the following functionality:

Bug fix for error message.

Version 6.44Version 6.44 includes the following functionality:

Bug fix for settings very large environment variable values.

Bug fix for bug during undecorate.

Bug fix for symbol handling.

Version 6.43Version 6.43 includes the following functionality:

Bug fix for process monitoring when target is elevated and Validator is non-elevated.

Additional user warning when momitored process is elevated and Validator is non-elevated.

Bug fix for a special case of quoted command line arguments.

Fix for very slow behaviour on some machine due to disk cache.

Bug fix for comctl32 related crash on Windows 7.

Addition of -monitorAService command line argument.

Version 6.42Version 6.42 includes the following functionality:

Maintenance update.

Version 6.41Version 6.41 includes the following functionality:

Support for Visual Studio 2015

Bug fix for command line options processing.

Version 6.40Version 6.40 includes the following functionality:

New implementation for launching and injecting into executables. This method removes some technical limitations, opening the way for future improvements to the software.

API change: If you are using the Memory Validator API you need to call startProfiler(); to start Memory Validator.

Version 6.39Version 6.39 includes the following functionality:

Improvements to Memory Coverage.

Addition of the relations query sub menu to the context menu on the Memory tab. All the relations queries from the Memory Analysis window can now be done from the Memory window.

Bug fix for crash in lower Memory Analysis window.

Version 6.38Version 6.38 includes the following functionality:

Change to HeapDestroy() behaviour. You can now choose between marking all non-deallocated memory in the heap as collected or as leaked. This allows for two different use cases: High performance heap destruction without individual HeapFree() calls, and also for use a memory allocator backing store where you care about missing HeapFree() calls. See the Heap section of the Settings dialog.

User experience improvements to Memory Coverage - now has colour coding similar to C++ Coverage Validator.

Bug fix for Memory Coverage.

Bug fix for UI Defeat Global hook.

Version 6.37Version 6.37 includes the following functionality:

Change to how launch history is stored and managed. Principle reason for this is to fix a long standing, hard to reproduce bug that mixes up data from one launch with another launch.

Automatic provision of symbols for Microsoft DLLs linked with Ordinals when no PDB symbols availabile.

Automatic display of symbols missing information dialog the first time (for any session) when a callstack is displayed that has missing symbol information.

Bug fix for potential crash with copy to clipboard.

UX changes for In-Place Leak Detect.

Improvement to Inject into Process dialog.

Version 6.21Version 6.21 includes the following functionality:

New build with Visual Studio 2010. Support for Operating Systems from Windows XP onwards. Windows NT4 and Windows 2000 are no longer supported, except with a special build..

Additional security checks.

Improved performance with some VirtualQuery() calls.

Bug fix for slow hooking on some systems when hooking CryptoAPI functions.

Bug fix for user defined reference counts.

Version 6.20Version 6.20 includes the following functionality:

Support for Next Generation Crypto API.

Addition of tooltips to the icons on the Memory and Analysis views.

Bug fix for Hide All menu option on the Data Views menu.

Bug fix for restoring Data Views.

Version 6.19Version 6.19 includes the following functionality:

Support for Crypt32 crypto API.

Bug fix for registry handling.

Bug fix for launch dialog.

Version 6.18Version 6.18 includes the following functionality:

New menu, "Data Views" allowing you to show, hide or reset all tabbed views.

Ability to hide any data view to simplify the screen layout.

Data view visibility preserved between sessions.

Addition of command line argument -doNotInteractWithUser. Use this to prevent the stub or the GUI from displaying error dialogs during runs. This is useful when setting up automated testing on a server.

Lock handling change for symbol handler. Spend less time in lock. Reduce likelihood of deadlock in stub.

Bug fix for exception in hook for ExtractIconEx(A/W) if the function fails to return any icons.

Licensing code update.

Version 5.76Version 5.76 includes the following functionality:

Changed application and Hooked DLLs bug fix and behaviour change.

Bug fixes and minor ux changes for Objects tab.

Bug fixes and minor ux changes for Sizes tab.

Maintenance: Licensing code update. Code cleanup. Code removal.

Version 5.75Version 5.75 includes the following functionality:

Editor settings dialog bug fix.

Subst drives settings dialog bug fix.

Version 5.74Version 5.74 includes the following functionality:

Changed how file extensions are displayed in File Open / File Save dialog.

Speed improvement for all tree/grid controls. This will improve the performance tree controls with large datasets greatly.

Version 5.73Version 5.73 includes the following functionality:

Bug fix for symbol handling.

Improved combo box population algorithm for watermarks, tag trackers, and all Objects and Sizes combo boxes. These will now only populate if they do not have focus, so if you are manipulating a combo it shouldn't update while you are doing that. Should also be faster.

Filter behaviour change for root and leaf callstack filters created from context menu.

Bug fix for early detach from target application during shutdown inside ExitProcess(). Can cause (in certain applications) certain deallocation data to not be sent to MV user interface, resulting in what looks like leaks.

Bug fix for DbgHelp.dll crash inside ExitProcess on Windows 7 (only affects some applications). A side effect of this bug is that some memory can be reported as a leak when it is not a leak.

Major performance improvement if you are using the memory monitoring API and you are collecting significant amounts of data using this API.

Version 4.99Version 4.99 includes the following functionality:

Bug fix for statically linked realloc() data tracking.

Bug fix for statically linked realloc() data tracking when passing NULL as the address to realloc.

Bug fix for watermarks not displaying if watermark created as first ever data item (via API or GUI).

Version 4.93Version 4.93 includes the following functionality:

Addition of Memory Paragraph sub tab to Virtual view.

Bug fix for handle leak with ToolHelp32.

Bug fix for failure with socket() when incorrectly hooking resource DLLs that have more than one section (example: mfc80enu.dll).

Version 4.92Version 4.92 includes the following functionality:

HTML/XML export changed to export mutliple duplicate callstack information. This makes the resulting files just as useful, but more compact.

Bug fix for environment variable handling.

Bug fix for license installer software.

Version 4.91Version 4.91 includes the following functionality:

Improved handling of "Allocation Greater Than" breakpoint handling.

New option on the callstack collection settings dialog - the ability to discard entries at the start of a callstack that have no module, no function name
and no filename - these are often .Net trampoline functions from .Net code into native code.

Bug fix for data corruption caused by incorrect data item being deleted - bug only happens when collectings CRT data
and collecting other types of memory data AND a particular sequence of allocations occurs in a certain order.

Minor bug fixes.

Version 4.76Version 4.77 includes the following functionality:

Bug fix for DLLs combo on Objects tab.

Bug fix for session comparison dialog.

Bug fix for licensing bug.

Bug fix for Semaphore close bug - preventing comms between test application and Memory Validator GUI on
some computers.

Update to licensing dialog to prevent confusion with example application.

Minor bug fixes.

Version 4.59Version 4.59 includes the following functionality:

Replacement of all 3rd party grid/tree controls with the same virtual grid/tree control used for the main displays.
This change has been made for consistency of user interface and also to facilitate future ports of the software to alternate
operating systems and widget toolkits.

Bug fix for stack corruption on Memory Analysis tab if search for type with very long name.

Bug fix for stack overflow bug inspecting dependent DLLs on very large applications.

Provisional support for Visual Studio 9.0/2008

Version 4.51Version 4.51 includes the following functionality:

Bug fix for crash on FileSettingsDialog.

Change to grid control Select-All behaviour.

Bug fix for Objects export information.

Bug fix for allocation size statistics gather for LocalFree().

Version 4.50Version 4.50 includes the following functionality:

Bug fix for Allocator Alias settings return key interaction.

Change of instrumentation behaviour for uninitialised data, AddRef/Release, corrupt memory detection, deleted this detection to prevent
an unusual crash when the same DLL is loaded, unloaded, load, unloaded etc in rapid succession (always gets the same load address).

Data display bug fix for memory tab.

Bug fix for uninitialised data, data member detector.

Bug fix for race condition (causes crash) for inter process comms one multi core/cpu machines. Bug is not visible on HyperThreaded machines or
single cores CPUs. Bug has been seen on dual core CPUs, but is more obvious on dual core quad CPU machines.

Bug fix for incorrect behaviour in realloc hook for Visual Studio 7.0, 7.1, 8.0 when a multi-threaded application is run on a hyper threaded or
multi CPU machine and the application makes a series of reallocations in close succession in multiple threads.

Automatic disabling of Visual Leak Detector (VLD.DLL) to prevent conflict between Visual Leak Detector and Memory Validator when running with Memory Validator. This only works if VLD.DLL is loaded via LoadLibrary(). If VLD.DLL is implicitly linked it will still cause problems - in this case we warn you about the problem.

Version 4.38Version 4.38 includes the following new functionality:

Support for monitoring unmanaged allocations in unmanaged DLLs in .Net 1.0/1.1/2.0 applications.

Bug fix for hotspots tab.

Version 4.37Version 4.37 includes the following new functionality:

IMproved HTML Help handling.

Version 4.36Version 4.36 includes the following new functionality:

"Help PDF" added to Help menu if PDF help file is present in installation directory.

Bug fix for functions previously loaded by delay load hooking but in Visual Studio 8.0 are now loaded by
GetProcAddress by MFC. Examples of this are ImageList_Destroy().

Bug fix: Any .NET DLLs loaded by the instrumented process will be ignored.

Modified launch, inject and wait for application topics to include references to new help topics explaining possible reasons
for failure to inject. Updated help topics relating to working with services.
New Help topics on:

What causes Inject or launch to fail?

Version 4.32Version 4.32 includes the following new functionality:

Bug fix for delay loaded hooking.

Bug fix for CancelWaitableTimer hook.

Bug fix for Borland static C library hooks.

Bug fix for COFF/CodeView debugging info reading.

Updated scrollbar handling for editor component.

Version 4.30Version 4.31 includes the following new functionality:

Bug fix for C++/C datatype/allocation parser.

Bug fix for uninitialised data member reporting.

Version 4.30Version 4.30 includes the following new functionality:

Customer Request: Addition of 7 new contextx menu items on the Pages tab to allow queries to be performed on data in the
fragmentation display.

Bug fix for FALSE Win32 heap memory leaks reported from RPCRT4.DLL

Version 4.29Version 4.29 includes the following new functionality:

Bug fix for Objects tab when switching between threads, DLLs and Watermarks.

Bug fix for session manager dialog.

Version 4.28Version 4.28 includes the following new functionality:

Feature improvement: When tracing handles any data display for a DLL handle will be followed by the
DLL name (if the DLL is loaded).

Behaviour change: When tracing VirtualAlloc(Ex) Memory Validator would only trace those allocations with
MEM_RESERVE in the allocation type flags. Now if you specify MEM_COMMIT and the first page in the region you
want to commit is not currently commited Memory Validator will track that region as well (since it will be
automatically treated as having the MEM_RESERVE flag by the Operating system).

Change to callstack walking: Callstack walk ending has been improved. Callstack walks for CRT allocations
are now more complete.

Rebuilt help file to remove potentially dangerous bookmark characters and use new help compiler.
This action is in response to a few users complaining that HTML Help crashed for them.

Bug fix for UI Global Hook intercept dialog.

Bug fix for DLL Hooking.

Version 4.18Version 4.18 includes the following new functionality:

Bug fix for memory corruption detection.

Version 4.17Version 4.17 includes the following new functionality:

Bug fix for stack walking.

Addition of support for Metrowerks 9.0 C/C++ compiler.

Version 4.16Version 4.16 includes the following new functionality:

Bug fix for object type statistics for SafeArray. If you have non-leaking SafeArrays but the Object Count tab shows increasing
SafeArray counts this bug is fixed.

Addition of support for Compaq Visual Fortran (also known as Digital Visual Fortran).

Version 4.15Version 4.15 includes the following new functionality:

Bug fix for object type statistics when type unknown and object is deallocated.

Version 4.13Version 4.14 includes the following new functionality:

Support for custom user builds of C runtime DLLs (support for the "sample" DLLs that
Microsoft has released as a temporary fix due to the memory leaks inside MSVCRT80.DLL). See the
Warning tab in the settings dialog for details. F1 for Help. This feature was a customer request.

Objects tab - Objects of type "Unknown" are now represented (if file and line are known) as filename:line, for example: xmemory.cpp:40.
This provides for better statistics, feedback and query facilities.

Bug fix for size display for SafeArrays when Group By Callstack enabled on Memory Tab.

New diagnostic warning when LoadLibrary(Ex) fails. This can be useful for helping to diagnose why Memory Validator
can successfully inject into a running application but the same application silently fails when launched by Memory Validator
(this happens for a few very large applications with large numbers of DLLs).

New Feature - ability to export the information displayed on the Data sub-tab of the Virtual tab. Data can be
exported in HTML, XML and CSV file formats.

Feature improvement - HTML and XML Session Export can now be filtered.
Command line parameters for these features are provided:

-filterSessionObjectsHTML

-filterSessionObjectsXML

Forced prevention of loading of Window Blinds WBOCX.OCX module. If this module loads after Memory Validator has
launched/attached to the target program WBOCX.OCX will crash. This is caused by a bug in WBOCX.OCX not expecting other hooks to be present.
If Memory Validator attaches to the program after WBOCX.OCX has loaded then all works OK.

Feature improvement - Session Comparison improved to allow the use of session filters and global filters during session comparison.
Additional command line parameters added to support this from the command line:

-compareUseBaselineFilters

-compareUseGlobalFilters

Feature improvement - Addition of <EVENT id="nnn"> tag to XML Session Export and XML Session Compare Export
reports to make XML parsing easier. This is an optional feature, the old file format is still available. Command line parameters for these features
are also provided:

-flatXMLSessionExport

-flatXMLSessionCompareExport

New Feature - additional command line arguments to export the objects tab as HTML or XML.

Bug fix for DestroyMenu when destroying a menu with submenus - the submenus were incorrectly
reported as leaked unless and explicit Detach had been performed.

Bug fix for filters by file and line.

Bug fix for filters by handle type for some handle types.

Bug fix for MAP file handling.

Version 3.78Version 3.78 includes the following new functionality:

Licensing bug fix - only affects evaluation versions.

Version 3.77Version 3.77 includes the following new functionality:

Bug fix for working with omniORB.

Version 3.76Version 3.76 includes the following new functionality:

Bug fix for CreateIoCompletionPort hook.

Bug fix installer.

Bug fix for licensing.

Bug fix for callstacks walking on Windows XP, SP2.

Removal of SE_SECURITY_NAME privilege requirement for working with services.

Updated help.

Rearranged some hooks between Misc and SysAllocHook to improve logical grouping of hooks.

Version 3.75Version 3.75 includes the following new functionality:

Bug fix for "Group by callstack" on Memory and Analysis tabs.

Version 3.74Version 3.74 includes the following new functionality:

Changed injection feedback mechanism to improve hooking.

Improved error reporting during hooking.

Version 3.73Version 3.73 includes the following new functionality:

Context menu on tooltip support.

Version 3.72Version 3.72 includes the following new functionality:

Bug fix for crash on Analysis tab when Allocation History settings allow purging.

Version 3.71Version 3.71 includes the following new functionality:

Addition of User Privilege checks when accessing the Registry and setting debugging privileges.

Bug fix for rare crash in source code parsing.

Bug fix for Virtual tab.

Version 3.70Version 3.70 includes the following new functionality:

Customer Request: Feature Improvement: Improved Virtual Tab. The Virtual Tab now has two sub-tabs. The first sub-tab
provides the graphical display of previous versions of Memory Validator. The second sub-tab provides
a new textual representation of the graphical data.

Version 3.69Version 3.69 includes the following new functionality:

Support for Visual Studio 8.0 (.Net 2005) Beta.

Bug fix for divide by zero in Current Objects dialog.

Bug fix for filter manager dialog.

Version 3.68Version 3.68 includes the following new functionality:

Addition of hook for monitoring GlobalFree() inside of CreateStreamOnHGlobal().

Feature improvement: Multiple Memory Validator sessions can run concurrently. Previously
all data was logged by the first instance of Memory Validator, with all other instances only available
for viewing saved sessions.

Feature improvement: New command line parameters for controlling session export in HTML and XML.

Modified Export Dialog to allow exporting of leaked data only.

Addition of new command line arguments to control exporting of HTML and XML data during regression testing.

Serialization bug fix.

Ctrl+C (Copy to clipboard) bug fix.

Allocation history bug fix.

Version 3.50Version 3.50 includes the following new functionality:

Bug fix: Broken message map detector now works with Visual Studio 7.0 style message maps. Microsoft
changed the enumeration order and number of values in message map enumeration. This meant that depending
on which message map macros were run Memory Validator would work correctly or erroneously report an
error against a valid message map entry.

Bug fix for crash on Memory Analysis View.

Version 3.49Version 3.49 includes the following new functionality:

Bug fix: GetQueuedCompletionStatus().

Bug fix: for memory corruption.

Version 3.48Version 3.48 includes the following new functionality:

Performance improvement: Memory Validator now uses very much less memory to store sessions. Large
sessions (many millions of events) will notice dramatic memory usage reduction.

Performance improvement: Symbol fetching from stub improved.

Bug fix: Memory View when in "Group by Callstack" mode did not display totals at the top
of the screen properly.

Version 3.47Version 3.47 includes the following new functionality:

Bug fix: C++ member functions with variable argument lists did not track "this" correctly
for "Deleted this Detection".

Bug fix: Kernel 32 hooks.

Minor user interface textual changes.

Version 3.46Version 3.46 includes the following new functionality:

Times displayed in Local Time or UTC. Selectable on settings dialog.

Group by callstack feature improvement, works for automatic display updates as well as Refresh.

Performance improvement: Mismatched free/delete/delete[] error detection now consumes much less
memory and is very much faster.

Version 3.45Version 3.45 includes the following new functionality:

Bug fix for allocations by Windows XP themes dialog boxes.

Bug fix: Memory allocated using HeapAlloc in a Win32 Heap which is subsequently destroyed using HeapDestroy()
is not shown as leaked (previously the heap would not be shown as leaked, but the memory would be shown as
leaked). (This is an addition to the V3.44 work)

Version 3.44Version 3.44 includes the following new functionality:

Bug fix: CRT HeapAllocs performed inside CRT allocations (malloc/new/etc) being shown as
leaks when they are not leaks.

Bug fix: Memory allocated using HeapAlloc in a Win32 Heap which is subsequently destroyed using HeapDestroy()
is not shown as leaked (previously the heap would not be shown as leaked, but the memory would be shown as
leaked).

Version 3.43Version 3.43 includes the following new functionality:

Bug fix for uninitialised data detection.

Additional support for Borland BPL files.

Version 3.42Version 3.42 includes the following new functionality:

Improved uninitialised data detection. C++ objects on the stack are now correctly identified as
having uninitialised data members.

New hooks for SysAllocStringByteLen, SysAllocStringLen, SysReAllocStringLen.

Version 3.41Version 3.41 includes the following new functionality:

Bug fix for stack trace when Memory Corruption detection is enabled and memory/handles is
allocated/deallocated inside DLLs callstack with no symbol data for any of the DLLs.

Version 3.40Version 3.40 includes the following new functionality:

Bug fix for SafeArrayPutElement.

Bug fix for SafeArrayGetElement.

Bug fix for invalid handle passed to CloseHandle().

Version 3.39Version 3.39 includes the following new functionality:

Bug fix for Memory Corruption detection.

Bug fix for Memory Validator API mvSetWatermark().

Bug fix for Memory Validator API mvSetBookmark().

Bug fix for Memory Validator API apiLeakDetectFromWatermark().

Version 3.38Version 3.38 includes the following new functionality:

Addition of hook for DeregisterEventSource.

Version 3.37Version 3.37 includes the following new functionality:

Customer Request: New Feature: Support for Large Address Aware applications on computers booted with the /3GB boot.ini switch.

Bug fix for BSTRs allocated in ActiveX and deallocated by Visual Basic.

Bug fix for crash in hotspot window.

Bug fix for custom hooks using GetProcAddress.

Bug fix for occasionally incorrect stack symbols.

Version 3.36Version 3.36 includes the following new functionality:

Bug fix for export session dialog.

Bug fix for custom hooks reading/writing to/from registry/archive.

Version 3.35Version 3.35 includes the following new functionality:

Custom Hooks: Support for hooking by ordinal.

Custom Hooks: Support for the AllocMore concept - as in MAPIAllocateMore.

Custom Hooks: User interface update, help manual update.

Multi-select on various file dialogs.

Version 3.34Version 3.34 includes the following new functionality:

Customer Request: New Feature: Custom Hooks. You can now hook 3rd party and unsupported memory allocation and handle allocation functions and monitor these functions using Memory Validator.

Default Session bug fixes.

Updated help.

New tutorial section on Custom Hooks.

Version 3.33Version 3.33 includes the following new functionality:

New Feature: Support for Borland C++ Builder 5.5 and free command line tools 5.5.

Support for a new symbol collection method. The current method sometimes fails to acquire file and line information in services, for example inside IIS. The new method acquires symbols in the stub (in your application) and sends them to the UI. We also employ caching of the symbol data to improve performance on subsequent runs. You can choose to use the original symbol collection method, the new method, and to use caching or not.

New "IIS Tools" menu, which is enabled on NT Server systems. This menu provides useful helper actions for controlling IIS, SMTP, NNTP, FTP services when working with IIS. This means a software developer will not need to keep using the command prompt to type "net start ...." etc.

Customer request: Show GDI Objects context menu on Objects view.

Inject dialog remembers the name of last injected process and pre-selects this process the next time the Inject dialog is used.

Bug fix for working with services. Configuration data for working with services is now stored under HKEY_USERS\.DEFAULT. Previously services worked with the default Memory Validator settings if the service did not run as a user account. With the bug fix, the service can run as System account and will access the configuration data correctly.

Updated help to include information about working with Internet Information Services (IIS).

Version 3.09Version 3.09 includes the following new functionality:

Customer request: Display ASCII/Unicode text at right hand side of Show Data At... window.

Feature improvement: svlMemoryValidatorStubLib.lib can be linked to DLLs as well as EXEs.

Speedup: When data is displayed on various displays, data processing (and post processing) speed
has been improved.

Helper application included in install directory to allow configuration of data transfer from stub to
user interface.

Bug fix: Prevent rare deadlock inside time() during attach.

Version 3.03Version 3.03 includes the following new functionality:

New Feature: Re-Launch button. This was a customer request.

New toolbar icons, including disabled state icons for 32x32 sizes.

Performance improvement. Some applications allocate and deallocate data many times, leading to
millions of data items being processed, even though very little memory is consumed by the application.
This area has been improved allowing Memory Validator to process much more information.

Version 3.02Version 3.02 includes the following new functionality:

Bug fix for Pages tab when displaying from an archived session.

Version 3.01Version 3.01 includes the following new functionality:

Improved terminate application procedure.

Version 3.00Version 3.00 includes the following new functionality:

Context menu help for items on Memory tab. This was a customer request.

Leak summary at top of Memory tab. This was a customer request.

Context menu on Objects tab. Options allow query based on object type with results displayed on the analysis tab. This was a customer request.

Addition to GDI viewing: Ability to view HMENU (menu) and HWND (window) objects. This was a customer request.

New toolbar icons.

Updated help for above items.

Bug fix for search icon ("binoculars") when using Analysis tab.

Bug fix for crash if Memory Validator is shutting down and the global hook detection system identifies a global
hook loading at the same time.

Bug fix for incorrect behaviour inside SafeArrayPutElement().

Version 2.99Version 2.99 includes the following new functionality:

Bug fix for Filter Manager user interface.

Bug fixes for Filter handling.

Customer request: Ability to filter a range of traces. If a range is selected and the filter type
is "instant" or "temporary", the whole range of traces has a filter added for each entry.

Version 2.98Version 2.98 includes the following new functionality:

Subtle change to the logic for display of memory errors on Memory tab.

Bug fix for COM Reference count checking.

Bug fix for symbol handling.

Version 2.97Version 2.97 includes the following new functionality:

New Show GDI Objects... option on context menu for Memory tab. This option allows you to view
the GDI object in your application. This is a customer requested feature.

New implementation for Uninitialised data hooking. New implementation creates less FALSE positives,
and also hooks more constructors and destructors.

Removal of speculative leak detect feature. The feature works correctly, but is unrealistically
slow with large datasets, rendering the feature unusable. A modified form of this feature will be
reintroduced when we have identified how to improve the speed of this feature.

Resource fix for message dialog for in-place-leak detect dialog.

Version 2.96Version 2.96 includes the following new functionality:

Bug fix for COM Reference hooking. New implementation using DbgHelp.dll rather than
relying on class vtable structure. New implementation is more robust and has the added bonus
that you only track interfaces/classes for which you have debug information, which means you don't track
interfaces/classes that you don't control.

Version 2.95Version 2.95 includes the following new functionality:

Minor improvement to global hook interceptor.

Version 2.94Version 2.94 includes the following new functionality:

New global hook interceptor to stop global hooks intercepting the Memory Validator user interface. Some global hooks are not well written and cause problems. This feature was added after
we spent 2 weeks looking for a problem in Memory Validator, only to find the root of the problem
was a 3rd party global hook.

Memory Validator will now detect global hooks trying to load and ask the user for permission to load the global hook.

Various minor bug fixes.

Version 2.93Version 2.93 includes the following new functionality:

Maintenance build.

Version 2.92Version 2.92 includes the following new functionality:

Maintenance build.

Version 2.91Version 2.91 includes the following new functionality:

Maintenance build.

Version 2.90Version 2.90 includes the following new functionality:

Feature improvement: Services can now be attached to using the "inject" method and "wait for application" methods.
You do not need to use the Memory Validator API to monitor services.

Memory Corruption detection bug fix. Previously only worked correctly for MSDEV 6.0 Debug and Release. Now also
works correctly for Visual Studio .Net/7.0, Visual Studio .Net/7.1 Debug. A bug fix for the V7.0/V7.1 release mode memory
will be time consuming to create, and will be released at a future date.

Improved detection of functions in code sections. Previous algorithm had the potential to
incorrectly identify data in code blocks as code. New algorithm use new PDB API to correctly identify
functions.

Bug fix for broken handle leak detection for MSVCRT(D).DLL.

Version 2.81Version 2.81 includes the following new functionality:

We have reorganised how certain allocations are handled so that the heaps underlying CRT allocations and the
virtual allocations underlying heap allocations cannot interact with each other. The previous design should
have prevented any interaction, we have no knowledge of any adverse interaction with the previous design. The
new design improves performance and guarantees no interaction between the allocation tracking for different allocators.

Data processing for HeapAlloc() family of allocators modified to improve performance and prevent potential
address collision with addresses from VirtualAlloc().

Data processing for User Defined family of allocators modified to improve performance and prevent potential
address collision with addresses from VirtualAlloc().

Data processing for VirtualAlloc(), VirtualAllocEx() family of allocators modified to improve performance and prevent potential
address collision with addresses from other allocators.

Performance improvement for processing CoTaskMemAlloc, MiscAlloc and IMalloc family of allocations.

Version 2.77Version 2.77 includes the following new functionality:

Bug fix for off-by-one error on Objects tab. Symptoms of this are random crashes or Memory
Validator simply disappearing with no warning whilst updating the display on the objects tab. This appear
to be quite a rare to see and is data specific.

Performance improvement for processing SysAllocHook, BSTR and Variant family of allocations.

Version 2.76Version 2.76 includes the following new functionality:

Modified internal routines in the stub to increase robustness when handling VariantClear().

Version 2.75Version 2.75 includes the following new functionality:

Include Microsoft STL support DLL (MSVCPnn(D).DLL) for tracking memory allocations.

Version 2.74Version 2.74 includes the following new functionality:

Addition of new functionality: Memory Corruption Detection. This includes new display mechanisms for
data collected about memory corruption, two new settings tabs to control the memory corruption detection,
options for filtering on memory corruption detection.

Version 2.73Version 2.73 includes the following new functionality:

Bug fix for ImageList_Destroy() hook.

2 Bug fixes for shutdown code for console apps.

Improved map file handling.

Improved symbol handling for MFC DLLs - some users were not getting symbols for MFC DLLs. This
was dependent on many factors including the O.S. and dll version. MFC symbols are now always sourced
from the application under test, resulting in accurate symbols all the time.

For the case where MFC DLLs generate OrdinalNNN symbols, these symbols are automatically mapped
via the .def files installed with Dev Studio, to generate symbol names even when the PDB files cannot
supply them.

Various internal bug fixes

Version 2.72Version 2.72 includes the following new functionality:

Implementation change for SafeArrayGetElement() hook .

New hook:SafeArrayPutElement().

New hook:VariantChangeType().

New hook:VariantChangeTypeEx().

New warning dialog associated with IMallocSpy options. Help information relating to IMallocSpy updated.

Bug fix for BSTRs in SAFEARRAY when contents are destroyed using SafeArrayDestroyData() or SafeArrayDestroy(). The
bug was that the BSTRs in the array where shown as leaks, when in reality they were cleaned up.

Version 2.66Version 2.66 includes the following new functionality:

Bug fix for move filter dialog when no session.

Version 2.65Version 2.65 includes the following new functionality:

Bug fix for the global hook rejection filter on LoadLibrary(Ex). For the cases where the
filter prevented the loading of a DLL, it was possible for some registers to be corrupted, resulting
in unpredictable application behaviour.

Bug fix for hooking CRT operator delete [].

Version 2.64Version 2.64 includes the following new functionality:

Bug fix for SAFEARRAYs inside VARIANTs. Prior to this bug fix, a SAFEARRAY inside a variant (COleSafeArray)
may have shown up (incorrectly) as a memory leak.

Bug fix for PDB error message handling.

Version 2.63Version 2.63 includes the following new functionality:

Speed up for virtual tree control deleting rows.

Extra error reporting relating to symbol tracking on diagnostic tab.

Internal minor bug fixes.

Bug fix for "automatically add to PDB search path". Paths are reset to match the file settings dialog/wizard
prior to launching/injecting/waiting on an application. Paths are then rediscovered. This means that for situations
where you have multiple versions of the same DLL in your development environment, the correct paths to your PDBs
are used, rather than paths to PDBs in potentially other directories on your system than the particular DLL
in use at the time.

Bug fix for SAFEARRAYs of BSTRs, these were not correctly accounted for when the SAFEARRAY was
passed to ::VariantClear(). This resulted in BSTRs incorrectly being marked as leaked when they were not
leaked. Typically this manifests when using COleSafeArray to hold BSTRs.

New hook for SafeArrayGetElement(), so that BSTRs returned from a SAFEARRAY are tracked.

Default for hooking delay loaded functions is now TRUE.

Default for hooking delay loaded DLLs is now TRUE.

New messages on diagnostic tab when delay loaded functions are not hooked due to user settings.

Bug fix for calling GetFileVersionInfoSizeW() on Windows 2K and Windows XP. Windows NT systems do not suffer from this bug. Symptoms of the bug are applications failing to start properly (long pause then disappear or crash) on Windows 2000 and Windows XP.

Version 2.59Version 2.59 includes the following new functionality:

Addition of various CRT hooks for the global namespace. In MFC applications these functions would
not normally be called, as the MFC equivalent would be called. For applications not using MFC, memory
allocated via these functions would not be tracked. Version 2.59 fixes this.

Bug fix for crash on hotspot display when threshold value not set to "All".

Version 2.29Version 2.29 includes the following new functionality:

Addition of detection of memory leaks for the SysAllocString() family of functions. These functions
allocate, reallocate and deallocate BSTR objects. All main interfaces, options dialogs and allocator alias
facilities have been modified to accomodate SysAllocString.

New popup menu option on pages tab. Edit Source Code. This is consistent with other user interface.

Improved data display on memory tab. Display of data is more consistent with display tab settings.

Improved module load and unload handling in stub.

Filtering code implementation change. Recursion has been replaced with looping to
avoid exhausting stack space when filtering long callstacks.

Addition of exception handler dialog to present a callstack and register dump if Memory Validator crashes.

Version 2.27Version 2.27 includes the following new functionality:

Internal maintenance bug fixes.

Version 2.25Version 2.26 includes the following new functionality:

The syntax coloured editor now highlights the edited line with an arrow and a different
background colour for the edited line.

Colour selection dialog bug fix.

Various maintenance bug fixes.

When an application is started using 'launch' with CreateProcess() mode the feedback
dialog is displayed. This makes the CreateProcess() behave the same (with respect to
feedback) as the other modes.

Version 2.25Version 2.25 includes the following new functionality:

Improved robustness for the function hooking code that alters machine code to insert hooks.
This results in better reliability for the uninitialised data detection code and for the code
that tracks COM object reference counts.

Performance increase for unhooking uninitialised data hooks when a DLL is unloaded. Performance is
now Order N rather than Order N2.

Addition of a simple tutorial on the help menu. The tutorial will be improved in future releases.

Addition of this file on the help menu.

Novice user interface settings are retained between each time the novice wizard is displayed.
Previously the wizard always reset the settings, which confused some people.

When you switch to the Novice user interface, you are asked to configure the settings to work
with.

Leak detect and garbage collect buttons have been removed because they were causing too much
confusion - leaks detected more accurately and faster by running the program to completion rather
than trying to detect the leaks in situ.

Addition of a raw stack walk, to aid in stack walking when no frame pointer information is available.
Please note that when this is enabled stack traces may have unusual entries in them.

Version 2.24Version 2.24 includes the following new functionality:

Minor maintenance improvements.

Bug fix for discard stack traces for freed data.

Performance improvement for discard stack traces for freed data.

Version 2.23Version 2.23 includes the following new functionality:

New logic for handling uninitialised data detect when first object found is on the stack or is statically
allocated.

Uninitialised data detect now includes memory allocated using HeapAlloc().

New example code demonstrating overloading of new and delete operators so that class objects can
be allocated on a HeapAlloc() heap. This example demonstrates tracking of allocations/deallocations of
these objects and the detection of uninitialised data in these classes.

Version 2.22Version 2.22 includes the following new functionality:

Bug fix for crash in stub whilst PDB walking. This bug only affected uninitialised data detection for some applications.

Version 2.21Version 2.21 includes the following new functionality:

More robust heap scanning.

Bug fix for very rare crash when instrumenting CRT heap.

Multi threaded bug fix in user interface.

Session Manager user interface logic improvements.

Internal changes to improve data management.

Version 2.20Version 2.20 includes the following new functionality:

Improved progress dialogs indicating alloc/realloc/free progress.

Watermark manager now updates all tabs with the watermark settings.

Filter definition dialog, fixed bug with file and line number specification.

Improved symbol, datatype and coverage handling for the case when a DLL is unloaded
and another DLL is loaded into the same address space. Previously, the symbol cache addresses would resolve to
the addresses supplied for the first DLL. The correct symbols are now resolved.

Version 2.15Version 2.15 includes the following new functionality:

Search for data bug fix.

User interface mode bug fix.

Tree expand not adjusting scrollbar bug fix.

Version 2.14Version 2.14 includes the following new functionality:

New functionality on the Pages tab to show objects and unused heap space, with the
ability to highlight unused areas larger than a threshold.

Improved buffer overrun/underrun error detection.

Bug fix for cut/copy/paste from editing window.

Bug fix for rare crash on objects view.

Bug fix when shutting down the stub.

Version 2.13Version 2.13 includes the following new functionality:

Dependent DLLs that are loaded as a dependency of another DLL are hooked. The dependent DLLs do not get loaded via
a call to LoadLibrary() and were not being hooked. This is now fixed.

The Objects view has been reworked. The new implementation displays more statistics including type, size, number of allocations,
maximum number of allocations, cumulative number of allocations, cumulative size percentage, cumulative object count percentage.

The search path used to find PDB files is now automatically updated as DLLs are found.

Version 2.12Version 2.12 includes the following new functionality:

Support for NT Services. Memory Validator can now detect memory leaks, etc. in NT Services.

Sample NT Service showing how to use Memory Validator with NT Services.

Sample client for the NT Service.

Sample utility to control if Memory Validator is loaded by the Sample NT Service.

Bug fix for CreateProcess() startup method. Some applications would get a single step exception using this
method because of incorrect calls to VirtualProtect(). This has been fixed.

A very rare bug that may occur after a tested application has shutdown has been fixed. Memory Validator has a high speed memory allocator
that is used for managing interprocess communications work packages. If an allocation request for more than 128KB is made under specific conditions a crash may
occur when using the memory allocated. This has been fixed.

The launch wizard for Novice and Intermediate modes sometimes would not enable the Next >> button. This has been fixed.

Version 2.11Version 2.11 includes the following new functionality:

Add support for PDB files in any directory.

Bug fix for a very rare crash during program shutdown after MSVCRT.DLL has unloaded. Most customers will not have seen this bug.

Bug fix for a incorrectly truncated DLL name sent from stub to user interface. This bug resulted in corrupt DLL names being displayed in the dll hook status dialog.

Bug fix for background memory scan. When a corrupted memory block is found it is now correctly displayed when automatic display of errors is selected.

Version 2.10Version 2.10 includes the following new functionality:

New launch mode, CreateProcess that is more robust and starts all programs by modifying the program's startup code. This new mode does not fail on the 1% of programs that did fail with the previous Suspend mode.

New user interface modes. User can now choose between Novice, Intermediate and Expert modes.

New user interface wizards for setting options and launching applications.

Fixed crash caused by race condition. This was a very rare bug.

Fixed symbol parsing bug introduced by new VisualStudio.

Net DbgHelp engine. This bug only affected the detection of uninitialised data.

Version 2.09Version 2.09 includes the following fixes:

Supply the most up-to-date dbghelp.dll so that Memory Validator will give correct symbols when used
with applications built with VisualStudio.

Net

Fix crash when session deleted when new graphics dialogs are populated with statistics data.

Version 2.08Version 2.08 includes the following fixes:

Graphical dialogs on the Objects tab now function correctly.

Version 2.06Version 2.07 includes the following fixes:

Memory Validator held onto the process handle of the process being monitored after the process had finished executing. This prevented the process from being rebuilt without closing Memory Validator. This has been fixed.

Miscellaneous bug fixes.

Version 2.06Version 2.06 includes the following fixes:

Speed improvements to stub and user interface data processing.

Both stub and user interface require less memory to store the collected data.