PRB: Resource Leaks in System Components
Article ID: 171145
Article Last Modified on 11/21/2006
APPLIES TO
- Microsoft Win32 Application Programming Interface, when used with:
- Microsoft Windows NT 3.51 Service Pack 5
- Microsoft Windows XP Professional
This article was previously published under Q171145
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 and Windows XP. 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 and Windows XP 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.
Keywords: kbdll kbkernbase kbpending kbprb kbprogramming kbtshoot KB171145