We are often asked about limitations as to the number of concurrent services that can be run under FireDaemon Pro. FireDaemon Pro imposes no limit; however CPU, RAM and non-interactive window station desktop heap play important roles in determining the actual limits.


If you are running a large number of interactive/non-interactive services under FireDaemon, you may experience various errors where services fail to start. You might see errors similar to: "FireDaemon.exe - Application Error: The application failed to initialize properly (0xc0000142)" or the service just starts and then stops. Other symptoms include:

  1. You try to open an application but it refuses to load or it starts to load and then it disappears!

  2. You try to open or use an application but you get an "Out Of Memory" error message!

  3. One of your running applications inexplicably quits!

  4. When you right-click on your application, nothing happens! The command menu refuses to pop-up!

  5. Your web browser simply refuses to load any more windows or tabs!

  6. Your application is missing some menus or toolbars!

  7. You get the following error messages :


Initialization of the dynamic library <system>\system32\user32.dll failed. The process is terminating abnormally.
Initialization of the dynamic library <system>\system32\kernel32.dll failed. The process is terminating abnormally.


Whilst at first this might seem like a problem with FireDaemon Pro,  it is actually because the default size of the non-interactive window  station desktop heap is too small.

 The desktop heap is a section of memory reserved for the storage of  menus, hooks, strings and windows. This heap is allocated memory from a  fixed 48MB system buffer that is also used to store printer data and  font drivers.

 By default, Windows allocates a total of 4.5MB of memory for the desktop  heap. But if the system ever runs out of space in the desktop heap, it  won't be able to load new windows. It's as simple as that!

 In order to fix this you need to increase the size of the desktop heap  for each desktop that is associated with a "noninteractive" window  station. Please note that this fix requires a direct modification to the  Windows Registry. If you are not familiar with the Registry, Registry  editors and editing keys and values then you should probably not attempt  this. For a complete technical discussion of this registry modification  and its ramifications please refer to this these two articles:

Desktop Heap Part 1
Desktop Heap Part 2

 You should definitely read and understand those articles prior to making these modifications:

  • Start the registry editor: Start/Run/regedt32
  • Find the value: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
  • Modify the SharedSection of this value to read (or similar): SharedSection=1024,3072,4096
  • Reboot the machine


 The first value of the SharedSection is the shared heap size, common to  all desktops. It's used to store the global handle table and shared  system settings. By default, it's set to 1024KB. You generally do not  need to modify this value.

 The second value is the desktop heap size for each desktop associated  with the "interactive" window station. It's used to store user objects  like hooks, menus, strings and windows. By default, it's set to 3072KB.  The more users log into the system, the more desktops are created.  Consequently, the total "interactive" desktop heap size will increase to  reflect the number of desktops created. But each desktop will only have  an "interactive" desktop heap of 3072KB.

 The third value is the desktop heap size for each desktop associated  with the "non-interactive" window station. By default, it's set to  512KB. But if this value is not present, the size of the  "non-interactive" window station will be the same as that of the  "interactive" window station.

 Every service process created under a user account will be given a new  desktop in a "non-interactive" window station created by the Service  Control Manager (SCM). Therefore, each of these services will consume  the amount of desktop heap, as specified in the third SharedSection  value.

 The total desktop heap used in both interactive and non-interactive window stations must fit into the 48MB system-wide buffer.

 Consequently, decreasing the second or third SharedSection values will  increase the number of desktops that can be created. But it will reduce  the number of hooks, menus, strings and windows that can be created  within each desktop.

 On the other hand, increasing the second of third SharedSection values  will reduce the number of desktops that can be created. But it will  increase the number of hooks, menus, strings and windows that can be  created within each desktop.

 In addition, increasing the third SharedSection value will reduce the  number of user account services that can run successfully on the system.  To solve the problem we are facing, just increase the desktop heap for  "interactive" window stations, which is the second SharedSection value.  By default, it's set to 3072KB. Try increasing it to 4096KB or to a  higher value that addresses your problem. But please note that  increasing this value will reduce the number of desktops that can be  created.

 Reboot the system for the changes to take effect. Some experimentation  will be required to fine tune the values to your installation.

 Microsoft also supplies a Desktop Heap Monitoring Tool. Use it to determine whether your desktop heap is exhausted.

 If you are running the tool remotely, ensure you connect to the shadow  console or switch to Session 0 FIRST before running the tool.

 Related but dated Microsoft Knowledgebase article here.