195 lines
4.6 KiB
C
195 lines
4.6 KiB
C
//*************************************************************
|
|
// File name: INIT.C
|
|
//
|
|
// Description: Initialization code for Profile control panel
|
|
// applet
|
|
//
|
|
//
|
|
// Microsoft Confidential
|
|
// Copyright (c) Microsoft Corporation 1992-1994
|
|
// All rights reserved
|
|
//
|
|
//*************************************************************
|
|
#include <windows.h>
|
|
#include <cpl.h>
|
|
#include "profile.h"
|
|
|
|
|
|
//*************************************************************
|
|
//
|
|
// DllInitialize()
|
|
//
|
|
// Purpose: Main entry point
|
|
//
|
|
//
|
|
// Parameters: HINSTANCE hInstDLL - Instance handle of DLL
|
|
// DWORD dwReason - Reason DLL was called
|
|
// LPVOID lpvReserved - NULL
|
|
//
|
|
//
|
|
// Return: BOOL
|
|
//
|
|
//*************************************************************
|
|
|
|
BOOL DllInitialize(HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpvReserved)
|
|
{
|
|
if (dwReason != DLL_PROCESS_ATTACH) {
|
|
return TRUE;
|
|
}
|
|
|
|
hInstance = hInstDLL;
|
|
|
|
DisableThreadLibraryCalls(hInstDLL);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//*************************************************************
|
|
//
|
|
// CPlApplet()
|
|
//
|
|
// Purpose: Control Panel entry point
|
|
//
|
|
//
|
|
// Parameters: HWND hwnd - Window handle
|
|
// WORD wMsg - Control Panel message
|
|
// LPARAM lParam1 - Long parameter
|
|
// LPARAM lParam2 - Long parameter
|
|
//
|
|
//
|
|
// Return: LONG
|
|
//
|
|
//*************************************************************
|
|
|
|
LONG CPlApplet( HWND hwnd, WORD wMsg, LPARAM lParam1, LPARAM lParam2)
|
|
{
|
|
|
|
LPNEWCPLINFO lpNewCplInfo;
|
|
LPCPLINFO lpCplInfo;
|
|
|
|
switch (wMsg) {
|
|
|
|
case CPL_INIT:
|
|
if (CheckProfileType()) {
|
|
uiShellHelp = RegisterWindowMessage (szShellHelp);
|
|
return TRUE;
|
|
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case CPL_GETCOUNT:
|
|
return (LONG)NUM_APPLETS;
|
|
|
|
case CPL_INQUIRE:
|
|
|
|
lpCplInfo = (LPCPLINFO)lParam2;
|
|
|
|
lpCplInfo->idIcon = ID_ICON;
|
|
lpCplInfo->idName = IDS_NAME;
|
|
lpCplInfo->idInfo = IDS_INFO;
|
|
lpCplInfo->lData = 0L;
|
|
|
|
return (LONG)TRUE;
|
|
|
|
case CPL_NEWINQUIRE:
|
|
|
|
lpNewCplInfo = (LPNEWCPLINFO)lParam2;
|
|
|
|
lpNewCplInfo->hIcon = LoadIcon( hInstance, MAKEINTRESOURCE(ID_ICON));
|
|
|
|
if (!LoadString( hInstance, IDS_NAME, lpNewCplInfo->szName,
|
|
sizeof(lpNewCplInfo->szName))) {
|
|
lpNewCplInfo->szName[0] = TEXT('\0');
|
|
}
|
|
|
|
if(!LoadString( hInstance, IDS_INFO, lpNewCplInfo->szInfo,
|
|
sizeof(lpNewCplInfo->szInfo))) {
|
|
lpNewCplInfo->szInfo[0] = TEXT('\0');
|
|
}
|
|
|
|
lpNewCplInfo->dwSize = sizeof(NEWCPLINFO);
|
|
lpNewCplInfo->dwHelpContext = HELP_CONTEXT;
|
|
if(!LoadString( hInstance, IDS_INFO, lpNewCplInfo->szHelpFile,
|
|
sizeof(lpNewCplInfo->szHelpFile))) {
|
|
lpNewCplInfo->szHelpFile[0] = TEXT('\0');
|
|
}
|
|
|
|
return (LONG)TRUE;
|
|
|
|
case CPL_DBLCLK:
|
|
RunApplet(hwnd);
|
|
break;
|
|
}
|
|
return (LONG)0;
|
|
|
|
}
|
|
|
|
//*************************************************************
|
|
//
|
|
// CheckProfileType()
|
|
//
|
|
// Purpose: Checks to see if this user has a floating
|
|
// personal profile. This is done by looking
|
|
// in the registry for the "ProfileType" entry.
|
|
//
|
|
// 0 = local non-floating profile
|
|
// 1 = personal floating (.usr) profile
|
|
// 2 = manditory profile
|
|
//
|
|
// Parameters: void
|
|
//
|
|
//
|
|
// Return: BOOL - TRUE if this applet should load
|
|
// FALSE if not
|
|
//
|
|
//*************************************************************
|
|
|
|
BOOL CheckProfileType (void)
|
|
{
|
|
LONG lResult;
|
|
HKEY hKey;
|
|
DWORD dwType, dwMaxBufferSize;
|
|
TCHAR szTempBuffer [MAX_TEMP_BUFFER];
|
|
|
|
//
|
|
// Open the registry key
|
|
//
|
|
|
|
lResult = RegOpenKeyEx (HKEY_CURRENT_USER, szProfileRegInfo, 0,
|
|
KEY_ALL_ACCESS, &hKey);
|
|
|
|
if (lResult != ERROR_SUCCESS) {
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Query for the profile path
|
|
//
|
|
|
|
dwMaxBufferSize = MAX_TEMP_BUFFER;
|
|
szTempBuffer[0] = TEXT('\0');
|
|
lResult = RegQueryValueEx (hKey, szProfileType, NULL, &dwType,
|
|
(LPBYTE) szTempBuffer, &dwMaxBufferSize);
|
|
|
|
//
|
|
// Close the registry key and return the appropriate response.
|
|
//
|
|
|
|
RegCloseKey (hKey);
|
|
|
|
if (lResult != ERROR_SUCCESS) {
|
|
return FALSE;
|
|
}
|
|
|
|
if (szTempBuffer[0] == PERSONAL_PROFILE_TYPE) {
|
|
return TRUE;
|
|
|
|
} else {
|
|
return FALSE;
|
|
}
|
|
|
|
}
|