Blame src/windows/leashdll/leashdll.c

Packit fd8b60
#include <windows.h>
Packit fd8b60
#include "leashdll.h"
Packit fd8b60
#include <leashwin.h>
Packit fd8b60
#include "leash-int.h"
Packit fd8b60
Packit fd8b60
HINSTANCE hLeashInst;
Packit fd8b60
Packit fd8b60
HINSTANCE hKrb5 = 0;
Packit fd8b60
HINSTANCE hKrb524 = 0;
Packit fd8b60
HINSTANCE hSecur32 = 0;
Packit fd8b60
HINSTANCE hComErr = 0;
Packit fd8b60
HINSTANCE hService = 0;
Packit fd8b60
HINSTANCE hProfile = 0;
Packit fd8b60
HINSTANCE hPsapi = 0;
Packit fd8b60
HINSTANCE hToolHelp32 = 0;
Packit fd8b60
HINSTANCE hCcapi = 0;
Packit fd8b60
Packit fd8b60
// krb5 functions
Packit fd8b60
DECL_FUNC_PTR(krb5_change_password);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_alloc);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_free);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_init);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_set_tkt_life);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_set_renew_life);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_set_forwardable);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_set_proxiable);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_set_address_list);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_opt_set_out_ccache);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_init_creds_password);
Packit fd8b60
DECL_FUNC_PTR(krb5_build_principal_ext);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_get_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_resolve);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_default);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_default_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_set_default_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_initialize);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_destroy);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_close);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_store_cred);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_copy_creds);
Packit fd8b60
// DECL_FUNC_PTR(krb5_cc_retrieve_cred);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_get_principal);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_start_seq_get);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_next_cred);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_end_seq_get);
Packit fd8b60
// DECL_FUNC_PTR(krb5_cc_remove_cred);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_set_flags);
Packit fd8b60
// DECL_FUNC_PTR(krb5_cc_get_type);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_context);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_cred_contents);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_principal);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_in_tkt_with_password);
Packit fd8b60
DECL_FUNC_PTR(krb5_init_context);
Packit fd8b60
DECL_FUNC_PTR(krb5_parse_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_timeofday);
Packit fd8b60
DECL_FUNC_PTR(krb5_timestamp_to_sfstring);
Packit fd8b60
DECL_FUNC_PTR(krb5_unparse_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_credentials);
Packit fd8b60
DECL_FUNC_PTR(krb5_mk_req);
Packit fd8b60
DECL_FUNC_PTR(krb5_sname_to_principal);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_credentials_renew);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_data);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_data_contents);
Packit fd8b60
// DECL_FUNC_PTR(krb5_get_realm_domain);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_unparsed_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_os_localaddr);
Packit fd8b60
DECL_FUNC_PTR(krb5_copy_keyblock_contents);
Packit fd8b60
DECL_FUNC_PTR(krb5_copy_data);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_creds);
Packit fd8b60
DECL_FUNC_PTR(krb5_build_principal);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_renewed_creds);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_default_config_files);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_config_files);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_default_realm);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_ticket);
Packit fd8b60
DECL_FUNC_PTR(krb5_decode_ticket);
Packit fd8b60
DECL_FUNC_PTR(krb5_get_host_realm);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_host_realm);
Packit fd8b60
DECL_FUNC_PTR(krb5_c_random_make_octets);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_addresses);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_default_realm);
Packit fd8b60
DECL_FUNC_PTR(krb5_principal_compare);
Packit fd8b60
DECL_FUNC_PTR(krb5_string_to_deltat);
Packit fd8b60
DECL_FUNC_PTR(krb5_is_config_principal);
Packit fd8b60
DECL_FUNC_PTR(krb5_cccol_cursor_new);
Packit fd8b60
DECL_FUNC_PTR(krb5_cccol_cursor_free);
Packit fd8b60
DECL_FUNC_PTR(krb5_cccol_cursor_next);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_cache_match);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_get_type);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_new_unique);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_support_switch);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_switch);
Packit fd8b60
DECL_FUNC_PTR(krb5_cc_get_full_name);
Packit fd8b60
DECL_FUNC_PTR(krb5_free_string);
Packit fd8b60
DECL_FUNC_PTR(krb5int_cc_user_set_default_name);
Packit fd8b60
Packit fd8b60
// ComErr functions
Packit fd8b60
DECL_FUNC_PTR(com_err);
Packit fd8b60
DECL_FUNC_PTR(error_message);
Packit fd8b60
Packit fd8b60
// Profile functions
Packit fd8b60
DECL_FUNC_PTR(profile_init);
Packit fd8b60
DECL_FUNC_PTR(profile_release);
Packit fd8b60
DECL_FUNC_PTR(profile_get_subsection_names);
Packit fd8b60
DECL_FUNC_PTR(profile_free_list);
Packit fd8b60
DECL_FUNC_PTR(profile_get_string);
Packit fd8b60
DECL_FUNC_PTR(profile_release_string);
Packit fd8b60
DECL_FUNC_PTR(profile_get_integer);
Packit fd8b60
Packit fd8b60
// Service functions
Packit fd8b60
DECL_FUNC_PTR(OpenSCManagerA);
Packit fd8b60
DECL_FUNC_PTR(OpenServiceA);
Packit fd8b60
DECL_FUNC_PTR(QueryServiceStatus);
Packit fd8b60
DECL_FUNC_PTR(CloseServiceHandle);
Packit fd8b60
DECL_FUNC_PTR(LsaNtStatusToWinError);
Packit fd8b60
Packit fd8b60
// LSA Functions
Packit fd8b60
DECL_FUNC_PTR(LsaConnectUntrusted);
Packit fd8b60
DECL_FUNC_PTR(LsaLookupAuthenticationPackage);
Packit fd8b60
DECL_FUNC_PTR(LsaCallAuthenticationPackage);
Packit fd8b60
DECL_FUNC_PTR(LsaFreeReturnBuffer);
Packit fd8b60
DECL_FUNC_PTR(LsaGetLogonSessionData);
Packit fd8b60
Packit fd8b60
// CCAPI Functions
Packit fd8b60
DECL_FUNC_PTR(cc_initialize);
Packit fd8b60
DECL_FUNC_PTR(cc_shutdown);
Packit fd8b60
DECL_FUNC_PTR(cc_get_NC_info);
Packit fd8b60
DECL_FUNC_PTR(cc_free_NC_info);
Packit fd8b60
Packit fd8b60
FUNC_INFO k5_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(krb5_change_password),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_alloc),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_free),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_init),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_tkt_life),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_renew_life),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_forwardable),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_proxiable),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_address_list),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_opt_set_out_ccache),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_init_creds_password),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_build_principal_ext),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_get_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_resolve),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_default),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_default_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_set_default_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_initialize),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_destroy),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_close),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_copy_creds),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_store_cred),
Packit fd8b60
// MAKE_FUNC_INFO(krb5_cc_retrieve_cred),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_get_principal),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_start_seq_get),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_next_cred),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_end_seq_get),
Packit fd8b60
// MAKE_FUNC_INFO(krb5_cc_remove_cred),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_set_flags),
Packit fd8b60
// MAKE_FUNC_INFO(krb5_cc_get_type),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_context),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_cred_contents),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_principal),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_in_tkt_with_password),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_init_context),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_parse_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_timeofday),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_timestamp_to_sfstring),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_unparse_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_credentials),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_mk_req),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_sname_to_principal),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_credentials_renew),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_data),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_data_contents),
Packit fd8b60
//  MAKE_FUNC_INFO(krb5_get_realm_domain),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_unparsed_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_os_localaddr),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_copy_keyblock_contents),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_copy_data),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_creds),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_build_principal),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_renewed_creds),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_addresses),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_default_config_files),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_config_files),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_default_realm),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_ticket),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_decode_ticket),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_get_host_realm),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_host_realm),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_c_random_make_octets),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_default_realm),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_principal_compare),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_string_to_deltat),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_is_config_principal),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cccol_cursor_new),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cccol_cursor_next),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cccol_cursor_free),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_cache_match),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_get_type),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_new_unique),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_support_switch),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_switch),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_cc_get_full_name),
Packit fd8b60
    MAKE_FUNC_INFO(krb5_free_string),
Packit fd8b60
    MAKE_FUNC_INFO(krb5int_cc_user_set_default_name),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
FUNC_INFO profile_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(profile_init),
Packit fd8b60
    MAKE_FUNC_INFO(profile_release),
Packit fd8b60
    MAKE_FUNC_INFO(profile_get_subsection_names),
Packit fd8b60
    MAKE_FUNC_INFO(profile_free_list),
Packit fd8b60
    MAKE_FUNC_INFO(profile_get_string),
Packit fd8b60
    MAKE_FUNC_INFO(profile_release_string),
Packit fd8b60
    MAKE_FUNC_INFO(profile_get_integer),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
FUNC_INFO ce_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(com_err),
Packit fd8b60
    MAKE_FUNC_INFO(error_message),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
FUNC_INFO service_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(OpenSCManagerA),
Packit fd8b60
    MAKE_FUNC_INFO(OpenServiceA),
Packit fd8b60
    MAKE_FUNC_INFO(QueryServiceStatus),
Packit fd8b60
    MAKE_FUNC_INFO(CloseServiceHandle),
Packit fd8b60
    MAKE_FUNC_INFO(LsaNtStatusToWinError),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
FUNC_INFO lsa_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(LsaConnectUntrusted),
Packit fd8b60
    MAKE_FUNC_INFO(LsaLookupAuthenticationPackage),
Packit fd8b60
    MAKE_FUNC_INFO(LsaCallAuthenticationPackage),
Packit fd8b60
    MAKE_FUNC_INFO(LsaFreeReturnBuffer),
Packit fd8b60
    MAKE_FUNC_INFO(LsaGetLogonSessionData),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
// CCAPI v2
Packit fd8b60
FUNC_INFO ccapi_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(cc_initialize),
Packit fd8b60
    MAKE_FUNC_INFO(cc_shutdown),
Packit fd8b60
    MAKE_FUNC_INFO(cc_get_NC_info),
Packit fd8b60
    MAKE_FUNC_INFO(cc_free_NC_info),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
// psapi functions
Packit fd8b60
DECL_FUNC_PTR(GetModuleFileNameExA);
Packit fd8b60
DECL_FUNC_PTR(EnumProcessModules);
Packit fd8b60
Packit fd8b60
FUNC_INFO psapi_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(GetModuleFileNameExA),
Packit fd8b60
    MAKE_FUNC_INFO(EnumProcessModules),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
// toolhelp functions
Packit fd8b60
DECL_FUNC_PTR(CreateToolhelp32Snapshot);
Packit fd8b60
DECL_FUNC_PTR(Module32First);
Packit fd8b60
DECL_FUNC_PTR(Module32Next);
Packit fd8b60
Packit fd8b60
FUNC_INFO toolhelp_fi[] = {
Packit fd8b60
    MAKE_FUNC_INFO(CreateToolhelp32Snapshot),
Packit fd8b60
    MAKE_FUNC_INFO(Module32First),
Packit fd8b60
    MAKE_FUNC_INFO(Module32Next),
Packit fd8b60
    END_FUNC_INFO
Packit fd8b60
};
Packit fd8b60
Packit fd8b60
BOOL WINAPI
Packit fd8b60
DllMain(
Packit fd8b60
    HANDLE hinstDLL,
Packit fd8b60
    DWORD fdwReason,
Packit fd8b60
    LPVOID lpReserved
Packit fd8b60
    )
Packit fd8b60
{
Packit fd8b60
    hLeashInst = hinstDLL;
Packit fd8b60
Packit fd8b60
    switch (fdwReason)
Packit fd8b60
    {
Packit fd8b60
    case DLL_PROCESS_ATTACH:
Packit fd8b60
    {
Packit fd8b60
        OSVERSIONINFO osvi;
Packit fd8b60
        LoadFuncs(KRB5_DLL, k5_fi, &hKrb5, 0, 1, 0, 0);
Packit fd8b60
        LoadFuncs(COMERR_DLL, ce_fi, &hComErr, 0, 0, 1, 0);
Packit fd8b60
        LoadFuncs(SERVICE_DLL, service_fi, &hService, 0, 1, 0, 0);
Packit fd8b60
        LoadFuncs(SECUR32_DLL, lsa_fi, &hSecur32, 0, 1, 1, 1);
Packit fd8b60
	LoadFuncs(PROFILE_DLL, profile_fi, &hProfile, 0, 1, 0, 0);
Packit fd8b60
	LoadFuncs(CCAPI_DLL, ccapi_fi, &hCcapi, 0, 1, 0, 0);
Packit fd8b60
Packit fd8b60
        memset(&osvi, 0, sizeof(OSVERSIONINFO));
Packit fd8b60
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
Packit fd8b60
        GetVersionEx(&osvi);
Packit fd8b60
Packit fd8b60
        // XXX: We should really use feature testing, first
Packit fd8b60
        // checking for CreateToolhelp32Snapshot.  If that's
Packit fd8b60
        // not around, we try the psapi stuff.
Packit fd8b60
        //
Packit fd8b60
        // Only load LSA functions if on NT/2000/XP
Packit fd8b60
        if(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
Packit fd8b60
        {
Packit fd8b60
            // Windows 9x
Packit fd8b60
            LoadFuncs(TOOLHELPDLL, toolhelp_fi, &hToolHelp32, 0, 1, 0, 0);
Packit fd8b60
            hPsapi = 0;
Packit fd8b60
        }
Packit fd8b60
        else if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
Packit fd8b60
        {
Packit fd8b60
            // Windows NT
Packit fd8b60
            LoadFuncs(PSAPIDLL, psapi_fi, &hPsapi, 0, 1, 0, 0);
Packit fd8b60
            hToolHelp32 = 0;
Packit fd8b60
        }
Packit fd8b60
Packit fd8b60
Packit fd8b60
        /*
Packit fd8b60
         * Register window class for the MITPasswordControl that
Packit fd8b60
         * replaces normal edit controls for password input.
Packit fd8b60
         * zero any fields we don't explicitly set
Packit fd8b60
         */
Packit fd8b60
        hLeashInst = hinstDLL;
Packit fd8b60
Packit fd8b60
        Register_MITPasswordEditControl(hLeashInst);
Packit fd8b60
Packit fd8b60
        return TRUE;
Packit fd8b60
    }
Packit fd8b60
    case DLL_PROCESS_DETACH:
Packit fd8b60
        if (hKrb5)
Packit fd8b60
            FreeLibrary(hKrb5);
Packit fd8b60
	if (hCcapi)
Packit fd8b60
	    FreeLibrary(hCcapi);
Packit fd8b60
	if (hProfile)
Packit fd8b60
	    FreeLibrary(hProfile);
Packit fd8b60
        if (hComErr)
Packit fd8b60
            FreeLibrary(hComErr);
Packit fd8b60
        if (hService)
Packit fd8b60
            FreeLibrary(hService);
Packit fd8b60
        if (hSecur32)
Packit fd8b60
            FreeLibrary(hSecur32);
Packit fd8b60
        if (hPsapi)
Packit fd8b60
            FreeLibrary(hPsapi);
Packit fd8b60
        if (hToolHelp32)
Packit fd8b60
            FreeLibrary(hToolHelp32);
Packit fd8b60
Packit fd8b60
        return TRUE;
Packit fd8b60
    default:
Packit fd8b60
        return TRUE;
Packit fd8b60
    }
Packit fd8b60
}