PRB: Resource Leaks in System Components (171145)



The information in this article applies to:

  • Microsoft Win32 Application Programming Interface (API), when used with:
    • the operating system: Microsoft Windows NT 3.51
    • the operating system: Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows XP

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.

Modification Type:MajorLast Reviewed:3/15/2004
Keywords:kbDLL kbKernBase kbpending kbprb kbProgramming kbtshoot KB171145