PRB: Resource Leaks in System Components

ID: Q171145


The information in this article applies to:
  • Microsoft Win32 Application Programming Interface (API), used with:
    • Microsoft Windows NT versions 3.51, 4.0


SYMPTOMS

If you load and free a system DLL (for example, USER32.DLL, ADVAPI32.DLL, or GDI32.DLL) repeatedly in your Win32 application, a resource leak occurs under Windows NT. There are two ways to work around this problem:

  • Change the design of your application or DLL so as to not Load/Free System DLLs repeatedly.

    -or-


  • If your application's design cannot be changed, then call LoadLibrary on the system DLL before any other actions are performed in your application. Call FreeLibray on the system DLL as the last action before your application terminates. Now, when your application loads and frees the system DLL, only its reference count will be incremented and decremented--no new resources are allocated.



CAUSE

This behavior is by design. The Windows NT system DLLs ADVAPI32.DLL, USER32.DLL, and GDI32.DLL are meant to be loaded only once, that is, when your application is loaded. System DLLs make no attempt to clean up resources when they are unloaded. System DLLs rely on the operating system to clean up all their resources when the associated process terminates.


REFERENCES

For additional information, please see the following article in the Microsoft Knowledge Base:

Q184807 BUG: User32.dll Leaks Memory

Additional query words:

Keywords : kbprg kbtshoot kbDLL kbKernBase kbDSupport kbGrpKernBase
Version : winnt:3.51,4.0
Platform : winnt
Issue type : kbprb


Last Reviewed: December 29, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.