diff --git a/crypto/rand/rand_win.c b/crypto/rand/rand_win.c index 5ef197341f0f0c9974bd8b7f7f7f69eaa2b87a8e..5793098a7c29c6ef9c0d5a78f65205b90166144d 100644 --- a/crypto/rand/rand_win.c +++ b/crypto/rand/rand_win.c @@ -184,17 +184,17 @@ int RAND_poll(void) HWND h; HMODULE advapi, kernel, user, netapi; - CRYPTACQUIRECONTEXT acquire; - CRYPTGENRANDOM gen; - CRYPTRELEASECONTEXT release; - NETSTATGET netstatget; - NETFREE netfree; + CRYPTACQUIRECONTEXT acquire = 0; + CRYPTGENRANDOM gen = 0; + CRYPTRELEASECONTEXT release = 0; + NETSTATGET netstatget = 0; + NETFREE netfree = 0; /* load functions dynamically - not available on all systems */ - advapi = GetModuleHandle("ADVAPI32.DLL"); - kernel = GetModuleHandle("KERNEL32.DLL"); - user = GetModuleHandle("USER32.DLL"); - netapi = GetModuleHandle("NETAPI32.DLL"); + advapi = LoadLibrary("ADVAPI32.DLL"); + kernel = LoadLibrary("KERNEL32.DLL"); + user = LoadLibrary("USER32.DLL"); + netapi = LoadLibrary("NETAPI32.DLL"); if (netapi) { @@ -218,6 +218,9 @@ int RAND_poll(void) } } + if (netapi) + FreeLibrary(netapi); + /* Read Performance Statistics from NT/2000 registry */ /* The size of the performance data can vary from call to call */ /* so we must guess the size of the buffer to use and increase */ @@ -289,6 +292,9 @@ int RAND_poll(void) } } + if (advapi) + FreeLibrary(advapi); + /* timer data */ readtimer(); @@ -347,6 +353,8 @@ int RAND_poll(void) w = queue(QS_ALLEVENTS); RAND_add(&w, sizeof(w), 0); } + + FreeLibrary(user); } /* Toolhelp32 snapshot: enumerate processes, threads, modules and heap @@ -443,6 +451,8 @@ int RAND_poll(void) CloseHandle(handle); } + + FreeLibrary(kernel); } #ifdef DEBUG