The Startup Data tab controls how to manage Critical Sections in DLLs loaded prior to Thread Validator's stub being loaded.
When Thread Validator attaches to an already running process or is injected at the start of an application's execution, other DLLs have already been loaded into the target application's address space.
Any of those DLLs that use critical sections will have initialized and may even have entered those critical sections.
Thread Validator monitors the initialization and destruction of critical sections and depends on knowing about their existence prior to usage in order to detect many of its thread errors.
If Thread Validator doesn't see the initialization but then does see the critical section being used, a possible error condition will be raised.
To prevent this you can acquire information about all critical sections when Thread Validator starts the target application (or attaches to it). For consistency, information about all threads in the application can be obtained at the same time.
Typically, when launching the target application in the normal way, you don't need to acquire all critical sections at startup. However, if attaching to an already running application (using inject or wait for application), you should acquire all critical sections at startup.
Two options allow Thread Validator to determine all the threads or critical sections that exist when Thread Validator attaches to the target application:
•Acquire all threads at startup check to determine all the threads that exist
•Acquire all critical sections at startup check to determine all the critical sections that exist
If your DLLs initialize or destroy critical sections inside DllMain, there are two options for tracking these critical sections.
One method deals with Microsoft DLLs and the other with non-Microsoft DLLs.
•Acquire critical sections inside DllMain... check to determine all the critical sections initialised when a DLL is loaded using LoadLibrary
(Microsoft DLLs) when a Microsoft DLL is loaded
(non Microsoft DLLs) when a non-Microsoft DLL is loaded
Reset All - Resets all global settings, not just those on the current page.
Reset - Resets the settings on the current page.