Microsoft KB Archive/171145

{|
 * width="100%"|

PRB: Resource Leaks in System Components

 * }

Q171145

-

The information in this article applies to:


 * Microsoft Win32 Application Programming Interface (API), used with:
 * the operating system: 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.