//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1995 - 1995. // // File: dllmain.hxx // // Contents: DLL initialization entrypoint and global variables // // History: 4-Apr-95 BruceFo Created // //-------------------------------------------------------------------------- #include "headers.hxx" #pragma hdrstop #include #include #include "resource.h" #include "util.hxx" const TCHAR c_szShellIDList[] = CFSTR_SHELLIDLIST; //+-------------------------------------------------------------------------- // // Function: DllMain // // Synopsis: Win32 DLL initialization function // // Arguments: [hInstance] - Handle to this dll // [dwReason] - Reason this function was called. Can be // Process/Thread Attach/Detach. // // Returns: BOOL - TRUE if no error. FALSE otherwise // // History: 4-Apr-95 BruceFo Created // //--------------------------------------------------------------------------- extern "C" BOOL DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved ) { switch (dwReason) { case DLL_PROCESS_ATTACH: { #if DBG == 1 InitializeDebugging(); // SharingInfoLevel = DEB_ERROR | DEB_TRACE; SharingInfoLevel = DEB_ERROR; SetWin4AssertLevel(ASSRT_BREAK | ASSRT_MESSAGE); #endif // DBG == 1 appDebugOut((DEB_TRACE, "shareui.dll: DllMain enter\n")); // Disable thread notification from OS DisableThreadLibraryCalls(hInstance); g_hInstance = hInstance; InitCommonControls(); // get up/down control setlocale(LC_CTYPE, ""); // set the C runtime library locale, for string operations g_cfHIDA = RegisterClipboardFormat(c_szShellIDList); // Determine the maximum number of users g_uiMaxUsers = IsWorkstationProduct() ? MAX_USERS_ON_WORKSTATION : MAX_USERS_ON_SERVER ; break; } case DLL_PROCESS_DETACH: appDebugOut((DEB_TRACE, "shareui.dll: DllMain leave\n")); #if DBG == 1 UninitializeDebugging(); #endif // DBG == 1 break; } return TRUE; } // // Procedure for uninstalling this DLL (given an INF file). Note: this DLL // really should dynamically load setupapi.dll, to avoid its overhead all the // time. // void WINAPI UninstallW( HWND hwndStub, HINSTANCE hInstance, LPTSTR lpszCmdLine, int nCmdShow ) { RUNDLLPROC pfnCheckAPI = UninstallW; // let compiler check the prototype if (!lpszCmdLine || lstrlen(lpszCmdLine) >= MAX_PATH) { return; } TCHAR szSure[200]; LoadString(g_hInstance, IDS_SUREUNINST, szSure, ARRAYLEN(szSure)); TCHAR szTitle[200]; LoadString(g_hInstance, IDS_MSGTITLE, szTitle, ARRAYLEN(szTitle)); if (MessageBox(hwndStub, szSure, szTitle, MB_YESNO | MB_ICONSTOP) != IDYES) { return; } HINF hinf = SetupOpenInfFile( lpszCmdLine, // should be the name of the inf NULL, // optional Version section CLASS info INF_STYLE_WIN4, NULL); // optional error line info if (INVALID_HANDLE_VALUE == hinf) { appDebugOut((DEB_ERROR, "SetupOpenInfFile failed, 0x%x\n", GetLastError())); return; } PVOID pContext = SetupInitDefaultQueueCallback(hwndStub); BOOL ret = SetupInstallFromInfSection( hwndStub, // optional, handle of a parent window hinf, // handle to the INF file TEXT("DefaultUninstall"), // section of the INF file to install SPINST_REGISTRY | SPINST_FILES, // which lines to install from section HKEY_CURRENT_USER, // optional, key for registry installs NULL, // optional, path for source files SP_COPY_FORCE_NEWER, // optional, specifies copy behavior SetupDefaultQueueCallback, // optional, specifies callback routine pContext, // optional, callback routine context NULL, // optional, device information set NULL); // optional, device info structure if (!ret) { appDebugOut((DEB_ERROR, "SetupInstallFromInfSection failed, 0x%x\n", GetLastError())); } SetupCloseInfFile(hinf); }