Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1359 lines
31 KiB

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
w9xtool.c
Abstract:
Implements a stub tool that is designed to run with Win9x-side
upgrade code.
Author:
<full name> (<alias>) <date>
Revision History:
<alias> <date> <comments>
--*/
#include "pch.h"
#include "shellapi.h"
typedef enum {
HW_INCOMPATIBLE,
HW_REINSTALL,
HW_UNSUPPORTED
} HWTYPES;
#define REPORTLEVEL_NONE 0
#define REPORTLEVEL_BLOCKING 1
#define REPORTLEVEL_ERROR 2
#define REPORTLEVEL_WARNING 3
#define REPORTLEVEL_INFORMATION 4
#define REPORTLEVEL_VERBOSE 5
BOOL
SaveReport (
IN HWND Parent, OPTIONAL
IN PCTSTR Path OPTIONAL
);
BOOL
InitCompatTable (
VOID
);
VOID
pExcludeDrive (
IN PTSTR Drive,
IN DWORD MsgId OPTIONAL
);
VOID
pAddIncompatibilityAlert (
DWORD MessageId,
PCTSTR Share,
PCTSTR Path
);
VOID
MsgSettingsIncomplete (
IN PCTSTR UserDatPath,
IN PCTSTR UserName, OPTIONAL
IN BOOL CompletelyBusted
);
BOOL
Init (
VOID
)
{
HINSTANCE hInstance;
hInstance = GetModuleHandle (NULL);
return InitToolMode (hInstance);
}
VOID
Terminate (
VOID
)
{
HINSTANCE hInstance;
hInstance = GetModuleHandle (NULL);
TerminateToolMode (hInstance);
}
VOID RegisterTextViewer (VOID);
WNDPROC g_Proc;
LRESULT
pWrapperProc (
IN HWND Hwnd,
IN UINT Msg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
if (Msg == WM_CLOSE) {
PostQuitMessage (0);
}
return g_Proc (Hwnd, Msg, wParam, lParam);
}
VOID
pAddChangedUserName (
PCTSTR DisplayGroupName,
PCTSTR OriginalName,
PCTSTR NewName
)
{
PCTSTR argArray[3];
PCTSTR blank;
PCTSTR rootGroup;
PCTSTR nameSubGroup;
PCTSTR baseGroup;
PCTSTR fullGroupName;
TCHAR encodedName[256];
argArray[0] = DisplayGroupName;
argArray[1] = OriginalName;
argArray[2] = NewName;
blank = GetStringResource (MSG_BLANK_NAME);
if (argArray[1][0] == 0) {
argArray[1] = blank;
}
if (argArray[2][0] == 0) {
argArray[2] = blank;
}
rootGroup = GetStringResource (MSG_INSTALL_NOTES_ROOT);
nameSubGroup = ParseMessageID (MSG_NAMECHANGE_WARNING_GROUP, argArray);
baseGroup = JoinPaths (rootGroup, nameSubGroup);
FreeStringResource (rootGroup);
FreeStringResource (nameSubGroup);
nameSubGroup = ParseMessageID (MSG_NAMECHANGE_WARNING_SUBCOMPONENT, argArray);
fullGroupName = JoinPaths (baseGroup, nameSubGroup);
FreePathString (baseGroup);
FreeStringResource (nameSubGroup);
encodedName[0] = TEXT('|');
StringCopy (encodedName + 1, OriginalName);
MsgMgr_ObjectMsg_Add(
encodedName, // Object name, prefixed with a pipe symbol
fullGroupName, // Message title
S_EMPTY // Message text
);
FreePathString (fullGroupName);
FreeStringResource (blank);
}
VOID
pAddDevice (
PCTSTR RegistryKey,
HWTYPES SupportedType,
PCTSTR DeviceDesc,
BOOL Online,
PCTSTR Class,
PCTSTR Mfg,
PCTSTR HardwareID,
PCTSTR FriendlyClass
)
{
PCTSTR argArray[6];
PCTSTR classAndName;
PCTSTR group;
UINT subGroup;
PCTSTR message;
BOOL unknownClass = FALSE;
PCTSTR modifiedDescription = NULL;
if (!Class) {
Class = GetStringResource (MSG_UNKNOWN_DEVICE_CLASS);
unknownClass = TRUE;
}
if (!Online) {
argArray[0] = DeviceDesc;
modifiedDescription = ParseMessageID (MSG_OFFLINE_DEVICE, argArray);
}
if (SupportedType == HW_INCOMPATIBLE) {
subGroup = MSG_INCOMPATIBLE_HARDWARE_PNP_SUBGROUP;
} else if (SupportedType == HW_REINSTALL) {
subGroup = MSG_REINSTALL_HARDWARE_PNP_SUBGROUP;
} else {
subGroup = MSG_UNSUPPORTED_HARDWARE_PNP_SUBGROUP;
}
argArray[0] = modifiedDescription ? modifiedDescription : DeviceDesc;
argArray[1] = S_EMPTY; // formerly Enumerator Text
argArray[2] = Class;
argArray[3] = Mfg;
argArray[4] = HardwareID;
argArray[5] = FriendlyClass;
classAndName = JoinPaths (argArray[5], argArray[0]);
group = BuildMessageGroup (
MSG_INCOMPATIBLE_HARDWARE_ROOT,
subGroup,
classAndName
);
FreePathString (classAndName);
message = ParseMessageID (MSG_HARDWARE_MESSAGE, argArray);
MsgMgr_ObjectMsg_Add (RegistryKey, group, message);
FreeStringResource (modifiedDescription);
FreeText (group);
FreeStringResource (message);
if (unknownClass) {
FreeStringResource (Class);
}
}
VOID
pBadOsVersion (
VOID
)
{
PCTSTR group = NULL;
PCTSTR message = NULL;
//
// Add a message to the Incompatibility Report.
//
group = BuildMessageGroup (MSG_BLOCKING_ITEMS_ROOT, MSG_UNKNOWN_OS_WARNING_SUBGROUP, NULL);
message = GetStringResource (MSG_UNKNOWN_OS);
MsgMgr_ObjectMsg_Add (TEXT("*UnknownOs"), group, message);
FreeText (group);
FreeStringResource (message);
}
VOID
pBlockingFile (
PCTSTR FileName,
PCTSTR SectNameForDisplay,
PCTSTR Message
)
{
PCTSTR group;
group = BuildMessageGroup (MSG_BLOCKING_ITEMS_ROOT, MSG_MUST_UNINSTALL_ROOT, SectNameForDisplay);
MsgMgr_ObjectMsg_Add (FileName, group, Message);
FreeText (group);
}
VOID
pBlockingHardware (
PCTSTR FileName,
PCTSTR SectNameForDisplay,
PCTSTR Message
)
{
PCTSTR group;
group = BuildMessageGroup (MSG_BLOCKING_ITEMS_ROOT, MSG_BLOCKING_HARDWARE_SUBGROUP, SectNameForDisplay);
MsgMgr_ObjectMsg_Add (FileName, group, Message);
FreeText (group);
}
VOID
pBackupDirs (
PCTSTR DirPath
)
{
PCTSTR backupDirsGroup;
backupDirsGroup = BuildMessageGroup (
MSG_INSTALL_NOTES_ROOT,
MSG_BACKUP_DETECTED_LIST_SUBGROUP,
DirPath
);
MsgMgr_ObjectMsg_Add(
DirPath,
backupDirsGroup,
S_EMPTY
);
FreeText (backupDirsGroup);
}
VOID
pManyBackupDirs (
UINT DirCount
)
{
PCTSTR backupDirsGroup;
PCTSTR argArray[2];
TCHAR buffer[32];
PCTSTR msg;
backupDirsGroup = BuildMessageGroup (
MSG_INSTALL_NOTES_ROOT,
MSG_BACKUP_DETECTED_SUBGROUP,
NULL
);
argArray[0] = "Windows 9X";
wsprintf (buffer, "%lu", DirCount);
argArray[1] = buffer;
msg = ParseMessageID (MSG_BACKUP_DETECTED, argArray);
MsgMgr_ObjectMsg_Add (
TEXT("*BackupDetected"),
backupDirsGroup,
msg
);
FreeStringResource (msg);
}
VOID
pHlpFile (
PCTSTR ModuleName,
PCTSTR HlpName,
PCTSTR FriendlyName,
PCTSTR Text
)
{
PCTSTR argList[3];
PCTSTR comp;
argList[0] = ModuleName;
argList[1] = HlpName;
argList[2] = FriendlyName;
comp = BuildMessageGroup (MSG_MINOR_PROBLEM_ROOT, MSG_HELPFILES_SUBGROUP, argList[2]);
MsgMgr_ObjectMsg_Add (HlpName, comp, Text);
FreeText (comp);
}
VOID
pProfileDir (
PCTSTR DirPath,
PCTSTR NewName
)
{
PCTSTR argArray[3];
PCTSTR message;
PCTSTR group;
argArray[0] = DirPath;
argArray[1] = NewName;
message = ParseMessageID (MSG_DIRECTORY_COLLISION_SUBCOMPONENT, argArray);
group = BuildMessageGroup (
MSG_INSTALL_NOTES_ROOT,
MSG_DIRECTORY_COLLISION_SUBGROUP,
message
);
MsgMgr_ObjectMsg_Add (TEXT("*RenameFolders"), group, S_EMPTY);
FreeText (group);
FreeStringResource (message);
}
VOID
pBadShell (
VOID
)
{
PCTSTR object;
PCTSTR message;
object = BuildMessageGroup (MSG_INSTALL_NOTES_ROOT, MSG_REPORT_SHELL_SUBGROUP, NULL);
message = GetStringResource (MSG_REPORT_SHELL_INCOMPATIBLE);
MsgMgr_ObjectMsg_Add (TEXT("*BadShell"), object, message);
FreeText (object);
FreeStringResource (message);
}
VOID
pBadScr (
PCTSTR FilePath,
PCTSTR SectLocalizedName, OPTIONAL
WORD ActType,
PCTSTR Message OPTIONAL
)
{
PTSTR friendlyName = NULL;
PTSTR extPtr = NULL;
PTSTR displayName = NULL;
PCTSTR reportEntry = NULL;
PTSTR component = NULL;
PCTSTR temp1, temp2;
BOOL reportEntryIsResource = TRUE;
if (SectLocalizedName) {
friendlyName = DuplicatePathString (SectLocalizedName, 0);
} else {
friendlyName = DuplicatePathString (GetFileNameFromPath (FilePath), 0);
extPtr = (PTSTR) GetFileExtensionFromPath (friendlyName);
if (extPtr != NULL) {
extPtr = _tcsdec (friendlyName, extPtr);
if (extPtr != NULL) {
*extPtr = 0;
}
}
displayName = (PTSTR)ParseMessageID (MSG_NICE_PATH_SCREEN_SAVER, &friendlyName);
FreePathString (friendlyName);
friendlyName = NULL;
}
switch (ActType) {
case ACT_REINSTALL:
temp1 = GetStringResource (MSG_REINSTALL_ROOT);
temp2 = GetStringResource (Message ? MSG_REINSTALL_DETAIL_SUBGROUP : MSG_REINSTALL_LIST_SUBGROUP);
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
case ACT_REINSTALL_BLOCK:
temp1 = GetStringResource (MSG_BLOCKING_ITEMS_ROOT);
temp2 = GetStringResource (MSG_REINSTALL_BLOCK_ROOT);
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
case ACT_MINORPROBLEMS:
reportEntry = GetStringResource (MSG_MINOR_PROBLEM_ROOT);
break;
case ACT_INCOMPATIBLE:
case ACT_INC_NOBADAPPS:
temp1 = GetStringResource (MSG_INCOMPATIBLE_ROOT);
temp2 = GetStringResource (Message ? MSG_INCOMPATIBLE_DETAIL_SUBGROUP : MSG_TOTALLY_INCOMPATIBLE_SUBGROUP);
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
}
component = JoinPaths (reportEntry, displayName?displayName:friendlyName);
MsgMgr_ObjectMsg_Add (FilePath, component, Message);
FreePathString (component);
if (reportEntryIsResource) {
FreeStringResource (reportEntry);
} else {
FreePathString (reportEntry);
}
if (displayName) {
FreeStringResourcePtrA (&displayName);
}
FreePathString (friendlyName);
}
VOID
pBadCpl (
PCTSTR FilePath,
PCTSTR FriendlyNameMultiSz,
PCTSTR SectLocalizedName, OPTIONAL
WORD ActType,
PCTSTR Message OPTIONAL
)
{
GROWBUFFER friendlyName = GROWBUF_INIT;
MULTISZ_ENUM namesEnum;
PTSTR displayName = NULL;
PCTSTR reportEntry = NULL;
PTSTR component = NULL;
BOOL reportEntryIsResource = TRUE;
BOOL padName = FALSE;
PCTSTR temp1, temp2;
if (SectLocalizedName) {
MultiSzAppend (&friendlyName, SectLocalizedName);
}
if (friendlyName.Buf == NULL) {
while (*FriendlyNameMultiSz) {
MultiSzAppend (&friendlyName, FriendlyNameMultiSz);
FriendlyNameMultiSz = GetEndOfString (FriendlyNameMultiSz) + 1;
}
padName = TRUE;
}
if (EnumFirstMultiSz (&namesEnum, friendlyName.Buf)) {
do {
if (padName) {
displayName = (PTSTR)ParseMessageID (MSG_NICE_PATH_CONTROL_PANEL, &namesEnum.CurrentString);
} else {
displayName = DuplicatePathString (namesEnum.CurrentString, 0);
}
switch (ActType) {
case ACT_MINORPROBLEMS:
reportEntry = GetStringResource (MSG_MINOR_PROBLEM_ROOT);
break;
case ACT_INCOMPATIBLE:
case ACT_INC_NOBADAPPS:
case ACT_INC_IHVUTIL:
case ACT_INC_PREINSTUTIL:
case ACT_INC_SIMILAROSFUNC:
temp1 = GetStringResource (MSG_INCOMPATIBLE_ROOT);
if (!temp1) {
break;
}
switch (ActType) {
case ACT_INC_SIMILAROSFUNC:
temp2 = GetStringResource (MSG_INCOMPATIBLE_UTIL_SIMILAR_FEATURE_SUBGROUP);
break;
case ACT_INC_PREINSTUTIL:
temp2 = GetStringResource (MSG_INCOMPATIBLE_PREINSTALLED_UTIL_SUBGROUP);
break;
case ACT_INC_IHVUTIL:
temp2 = GetStringResource (MSG_INCOMPATIBLE_HW_UTIL_SUBGROUP);
break;
default:
temp2 = GetStringResource (Message ? MSG_INCOMPATIBLE_DETAIL_SUBGROUP : MSG_TOTALLY_INCOMPATIBLE_SUBGROUP);
break;
}
if (!temp2) {
break;
}
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
case ACT_INC_SAFETY:
temp1 = GetStringResource (MSG_INCOMPATIBLE_ROOT);
if (!temp1) {
break;
}
temp2 = GetStringResource (MSG_REMOVED_FOR_SAFETY_SUBGROUP);
if (!temp2) {
break;
}
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
case ACT_REINSTALL:
temp1 = GetStringResource (MSG_REINSTALL_ROOT);
if (!temp1) {
break;
}
temp2 = GetStringResource (Message ? MSG_REINSTALL_DETAIL_SUBGROUP : MSG_REINSTALL_LIST_SUBGROUP);
if (!temp2) {
break;
}
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
case ACT_REINSTALL_BLOCK:
temp1 = GetStringResource (MSG_BLOCKING_ITEMS_ROOT);
if (!temp1) {
break;
}
temp2 = GetStringResource (MSG_REINSTALL_BLOCK_ROOT);
if (!temp2) {
break;
}
reportEntry = JoinPaths (temp1, temp2);
reportEntryIsResource = FALSE;
FreeStringResource (temp1);
FreeStringResource (temp2);
break;
}
component = JoinPaths (reportEntry, displayName);
MsgMgr_ObjectMsg_Add (FilePath, component, Message);
FreePathString (component);
if (reportEntryIsResource) {
FreeStringResource (reportEntry);
} else {
FreePathString (reportEntry);
reportEntryIsResource = TRUE;
}
if (padName) {
FreeStringResourcePtrA (&displayName);
} else {
FreePathString (displayName);
}
} while (EnumNextMultiSz (&namesEnum));
}
FreeGrowBuffer (&friendlyName);
}
VOID
pShowPacks (
PCTSTR UpgradePackName
)
{
PCTSTR group;
group = BuildMessageGroup (
MSG_INSTALL_NOTES_ROOT,
MSG_RUNNING_MIGRATION_DLLS_SUBGROUP,
UpgradePackName
);
MsgMgr_ObjectMsg_Add (
UpgradePackName,
group,
S_EMPTY
);
}
VOID
pOutOfDiskSpace (
VOID
)
{
PCTSTR group;
PCTSTR args[5];
PCTSTR msg;
args[0] = TEXT("C:\\");
args[1] = TEXT("300");
args[2] = TEXT("220");
args[3] = TEXT("120");
args[4] = TEXT("250");
msg = ParseMessageID (MSG_NOT_ENOUGH_DISK_SPACE_WITH_LOCALSOURCE_AND_BACKUP, args);
group = BuildMessageGroup (MSG_BLOCKING_ITEMS_ROOT, MSG_NOT_ENOUGH_DISKSPACE_SUBGROUP, NULL);
MsgMgr_ObjectMsg_Add (TEXT("*DiskSpace"), group, msg);
FreeText (group);
FreeStringResource (msg);
}
VOID
pOutOfRam (
VOID
)
{
PCTSTR args[3];
PCTSTR group;
PCTSTR message;
args[0] = TEXT("64");
args[1] = TEXT("48");
args[2] = TEXT("16");
group = BuildMessageGroup (MSG_BLOCKING_ITEMS_ROOT, MSG_NOT_ENOUGH_RAM_SUBGROUP, NULL);
message = ParseMessageID (MSG_NOT_ENOUGH_RAM, args);
MsgMgr_ObjectMsg_Add (TEXT("*Ram"), group, message);
FreeText (group);
FreeStringResource (message);
}
VOID
pMapi (
VOID
)
{
PCTSTR group;
PCTSTR message;
group = BuildMessageGroup (MSG_INSTALL_NOTES_ROOT, MSG_MAPI_NOT_HANDLED_SUBGROUP, NULL);
message = GetStringResource (MSG_MAPI_NOT_HANDLED);
MsgMgr_ObjectMsg_Add (TEXT("*MapiNotHandled"), group, message);
FreeText (group);
FreeStringResource (message);
}
VOID
pDarwin (
VOID
)
{
PCTSTR group;
PCTSTR message;
group = BuildMessageGroup (MSG_INSTALL_NOTES_ROOT, MSG_DARWIN_NOT_HANDLED_SUBGROUP, NULL);
message = GetStringResource (MSG_DARWIN_NOT_HANDLED);
MsgMgr_ObjectMsg_Add (TEXT("*DarwinNotHandled"), group, message);
FreeText (group);
FreeStringResource (message);
}
VOID
pRas (
PCTSTR EntryName
)
{
PCTSTR group;
group = BuildMessageGroup (
MSG_INSTALL_NOTES_ROOT,
MSG_CONNECTION_PASSWORD_SUBGROUP,
EntryName
);
MsgMgr_ObjectMsg_Add ( EntryName, group, S_EMPTY);
FreeText (group);
group = BuildMessageGroup (
MSG_LOSTSETTINGS_ROOT,
MSG_CONNECTION_BADPROTOCOL_SUBGROUP,
EntryName
);
MsgMgr_ObjectMsg_Add (
EntryName,
group,
S_EMPTY
);
FreeText (group);
}
VOID
pMultiMon (
BOOL Per
)
{
PCTSTR group;
PCTSTR message;
group = BuildMessageGroup (MSG_INSTALL_NOTES_ROOT, MSG_MULTI_MONITOR_UNSUPPORTED_SUBGROUP, NULL);
message = GetStringResource (Per?
MSG_MULTI_MONITOR_UNSUPPORTED_PER:
MSG_MULTI_MONITOR_UNSUPPORTED);
MsgMgr_ObjectMsg_Add (TEXT("*MultiMonitor"), group, message);
FreeText (group);
FreeStringResource (message);
}
VOID
pJoysticks (
PCTSTR FullPath,
PCTSTR JoystickName
)
{
PCTSTR group;
group = BuildMessageGroup (
MSG_INCOMPATIBLE_HARDWARE_ROOT,
MSG_JOYSTICK_SUBGROUP,
JoystickName
);
MsgMgr_ObjectMsg_Add (
FullPath,
group,
NULL
);
FreeText (group);
}
VOID
pTwain (
PCTSTR DataSourceModule,
PCTSTR DisplayName
)
{
PCTSTR group;
group = BuildMessageGroup (
MSG_INCOMPATIBLE_HARDWARE_ROOT,
MSG_TWAIN_SUBGROUP,
DisplayName
);
MsgMgr_ObjectMsg_Add (
DataSourceModule,
group,
NULL
);
FreeText (group);
}
VOID
pRecycleBin (
PCTSTR Recycled
)
{
PCTSTR args[1];
PCTSTR group;
PCTSTR message;
args[0] = Recycled;
group = BuildMessageGroup (MSG_INSTALL_NOTES_ROOT, MSG_RECYCLE_BIN_SUBGROUP, NULL);
message = ParseMessageID (MSG_RECYCLED_FILES_WILL_BE_DELETED, args);
MsgMgr_ObjectMsg_Add (TEXT("*RECYCLEBIN"), group, message);
FreeText (group);
FreeStringResource (message);
}
VOID
pTimeZone (
PCTSTR CurTimeZone // can be empty string
)
{
PCTSTR args[1];
PCTSTR component;
PCTSTR warning;
args[0] = CurTimeZone;
component = GetStringResource (MSG_TIMEZONE_COMPONENT);
if (*CurTimeZone) {
warning = ParseMessageID (MSG_TIMEZONE_WARNING, args);
}
else {
warning = GetStringResource (MSG_TIMEZONE_WARNING_UNKNOWN);
}
MYASSERT (component);
MYASSERT (warning);
MsgMgr_ObjectMsg_Add (TEXT("*TIMEZONE"), component, warning);
FreeStringResource (component);
FreeStringResource (warning);
}
VOID
pLostRasPassword (
PCTSTR EntryName
)
{
PCTSTR group;
group = BuildMessageGroup (
MSG_MISC_WARNINGS_ROOT,
MSG_CONNECTION_PASSWORD_SUBGROUP,
EntryName
);
MsgMgr_ObjectMsg_Add (EntryName, group, S_EMPTY);
FreeText (group);
}
VOID
pGenReport (
VOID
)
{
//
// Changed names
//
pAddChangedUserName ("User Name", "Guest", "Guest-1");
pAddChangedUserName ("Computer Name", "My Bad Computer Name", "MyBadComputerNa");
//
// Hardware
//
pAddDevice (
"HKLM\\Enum\\Key1",
HW_INCOMPATIBLE,
"PCMCIA Interrupt Sequencer",
TRUE,
"SysDevs",
"Texas Instruments",
"PCMCIA\\TI004000&DEV_1234",
"System Devices"
);
pAddDevice (
"HKLM\\Enum\\Key2",
HW_INCOMPATIBLE,
"PCMCIA Mass Storage Device",
FALSE,
"DiskDrives",
"Texas Instruments",
"PCMCIA\\TI005000&DEV_2000",
"Hard Disk Drives"
);
pAddDevice (
"HKLM\\Enum\\Key1A",
HW_INCOMPATIBLE,
"Matrox Century 1",
TRUE,
"Video",
"Matrox Inc.",
"PCI\\VEN_0010&DEV_0020",
"Display Devices"
);
pAddDevice (
"HKLM\\Enum\\Key2B",
HW_INCOMPATIBLE,
"Microsoft Enhanced Keyboard",
TRUE,
"Input",
"Microsoft Corporation",
"*PNP091C",
"Input Devices"
);
pAddDevice (
"HKLM\\Enum\\Key3",
HW_REINSTALL,
"Cannon Digital Camera",
FALSE,
"MF",
"Cannon",
"USB\\CANNON_DC_VID_0100&PID_0105&RID_6500",
"Multi Function Devices"
);
pAddDevice (
"HKLM\\Enum\\Key4",
HW_REINSTALL,
"Cannon Digital Camera Docking Station",
TRUE,
"MF",
"Cannon",
"USB\\CANNON_DC_VID_0100&PID_0105&RID_6501",
"Multi Function Devices"
);
pAddDevice (
"HKLM\\Enum\\Key5",
HW_UNSUPPORTED,
"Adaptec XX00",
FALSE,
"SCSI",
"Texas Instruments",
"PCMCIA\\TI004000&DEV_1234",
"SCSI Controllers"
);
//
// Bad OS version (Win95?)
//
pBadOsVersion();
//
// Blocking file
//
pBlockingFile (
"c:\\program files\\nueo\\DLAPP.EXE",
"Norton Your Eyes Only",
"Norton Your Eyes Only can cause serious problems during the upgrade to "
"Windows XP. Because of these incompatibilities, "
"you must uninstall this program from your system before continuing."
);
pBlockingFile (
"c:\\program files\\Sysmon32.exe",
"V3Pro 98",
"This virus scanner can cause serious problems during the upgrade to Windows XP. You must "
"uninstall V3 Professional 98 before continuing."
);
//
// Blocking hardware
//
pBlockingHardware (
"c:\\windows\\system\\NVARCH32.DLL",
"ALi AGP Controller",
"Setup has detected an incompatibility between your video card & computer's mainboard. "
"Because of this, your computer may not start up after the upgrade. Contact the "
"manufacturer of your hardware for technical assistance."
);
//
// Backup dirs
//
pBackupDirs ("c:\\myfiles");
pManyBackupDirs (55);
//
// HLP files
//
pHlpFile ("c:\\my app\\foo.hlp", "foo.hlp", "Foo Help File", NULL);
pHlpFile ("c:\\my app\\foo.hlp2", "foo.hlp2", "Foo Help File 2", "Test text");
//
// Dir collisions
//
pProfileDir ("c:\\Documents and Settings", "c:\\Documents and Settings.001");
//
// Replacement shell
//
pBadShell();
//
// Bad SCR
//
pBadScr ("c:\\windows\\system\\disney.scr", NULL, ACT_REINSTALL, NULL);
pBadScr ("c:\\windows\\system\\Clifford.scr", NULL, ACT_REINSTALL_BLOCK, NULL);
pBadScr ("c:\\windows\\system\\Stars and Stripes.scr", NULL, ACT_MINORPROBLEMS, "The animation mode will not work on Windows XP");
pBadScr ("c:\\windows\\system\\Light Tracer.scr", NULL, ACT_INCOMPATIBLE, NULL);
pBadScr ("c:\\windows\\system\\Big Fish.scr", NULL, ACT_INC_NOBADAPPS, NULL);
pBadScr ("c:\\windows\\system\\disney gfy.scr", "Disney's Goofy", ACT_REINSTALL, NULL);
//
// Bad CPL
//
pBadCpl (
"c:\\windows\\system\\chipcontrol.cpl",
"Chip Control\0Cache\0",
NULL,
ACT_REINSTALL,
NULL
);
pBadCpl (
"c:\\windows\\system\\antivirus.cpl",
"AntiVirus",
NULL,
ACT_REINSTALL_BLOCK,
NULL
);
pBadCpl (
"c:\\windows\\system\\antivirus2.cpl",
"Symantec AntiVirus",
NULL,
ACT_REINSTALL_BLOCK,
NULL
);
pBadCpl (
"c:\\windows\\system\\crash.cpl",
"Crash Applet",
NULL,
ACT_INC_SAFETY,
NULL
);
pBadCpl (
"c:\\windows\\system\\findfast.cpl",
"FindFast",
NULL,
ACT_INC_SIMILAROSFUNC,
NULL
);
pBadCpl (
"c:\\windows\\system\\easyaccess.cpl",
"Compaq EasyAccess",
NULL,
ACT_INC_PREINSTUTIL,
NULL
);
pBadCpl (
"c:\\windows\\system\\vdesk.cpl",
"Matrox Virtual Desktop",
NULL,
ACT_INC_IHVUTIL,
NULL
);
pBadCpl (
"c:\\windows\\system\\quicktime.cpl",
"Apple QuickTime 1.0",
NULL,
ACT_INC_NOBADAPPS,
NULL
);
pBadCpl (
"c:\\windows\\system\\celldialer.cpl",
"Motorola Cell Phone Dialer",
NULL,
ACT_MINORPROBLEMS,
"After upgrading, the Motorola Cell Phone Dialer won't redial if a busy signal is detected"
);
//
// Mig Dll IDs
//
pShowPacks ("Microsoft Upgrade Pack 2");
pShowPacks ("Front Page Server Extensions");
//
// Excluded drives
//
pExcludeDrive (TEXT("C:\\"), MSG_DRIVE_EXCLUDED_SUBGROUP);
pExcludeDrive (TEXT("D:\\"), MSG_DRIVE_INACCESSIBLE_SUBGROUP);
pExcludeDrive (TEXT("E:\\"), MSG_DRIVE_RAM_SUBGROUP);
pExcludeDrive (TEXT("F:\\"), MSG_DRIVE_NETWORK_SUBGROUP);
pExcludeDrive (TEXT("G:\\"), MSG_DRIVE_SUBST_SUBGROUP);
//
// Out of disk space or RAM
//
pOutOfDiskSpace();
pOutOfRam();
//
// MAPI and Darwin
//
pMapi();
pDarwin ();
//
// RAS
//
pRas(TEXT("My ISP"));
//
// Shares
//
pAddIncompatibilityAlert (MSG_INVALID_ACL_LIST, TEXT("MyShare"), TEXT("c:\\my share"));
pAddIncompatibilityAlert (MSG_LOST_SHARE_PASSWORDS, TEXT("MyShare2"), TEXT("c:\\my share2"));
pAddIncompatibilityAlert (MSG_LOST_ACCESS_FLAGS, TEXT("MyShare3"), TEXT("c:\\my share3"));
//
// Multiple monitors
//
pMultiMon (TRUE); // per
pMultiMon (FALSE); // pro
//
// Joysticks
//
pJoysticks ("c:\\windows\\system\\joy.vxd", "Microsoft Sidewinder");
//
// TWAIN
//
pTwain ("c:\\windows\\twain_32\\xeotec.ds", "Xeotec Digital Camera");
//
// Recycle Bin
//
pRecycleBin ("30");
//
// Bad user accounts
//
MsgSettingsIncomplete ("c:\\windows\\profiles\\joeuser", "joeuser", FALSE);
MsgSettingsIncomplete ("c:\\windows\\profiles\\maryuser", "maryuser", TRUE);
MsgSettingsIncomplete ("c:\\windows\\profiles\\a?b", NULL, TRUE);
//
// Time zone
//
pTimeZone ("");
pTimeZone ("Pacific Time (GMT -08:00)");
//
// Lost RAS password
//
pLostRasPassword ("AOL");
}
BOOL
pFillListControl (
IN HWND ListHandle
);
INT
__cdecl
main (
INT argc,
CHAR *argv[]
)
{
HWND hwnd;
UINT rc;
SuppressAllLogPopups (TRUE);
if (!Init()) {
printf ("Unable to initialize!\n");
return 255;
}
//
// TODO: Put your code here
//
RegisterTextViewer();
{
MSG msg;
PCTSTR text;
HANDLE file;
HANDLE map;
UINT size;
PTSTR textBuf;
MsgMgr_Init();
InitCompatTable();
pGenReport();
MsgMgr_Resolve();
SaveReport (NULL, TEXT("C:\\test.htm"));
SaveReport (NULL, TEXT("C:\\test.txt"));
pFillListControl (NULL);
text = (PCTSTR) MapFileIntoMemory (TEXT("C:\\test.htm"), &file, &map);
size = GetFileSize (file, NULL);
textBuf = AllocText (size + 1);
CopyMemory (textBuf, text, size);
textBuf[size] = 0;
hwnd = CreateWindowEx (
WS_EX_APPWINDOW|WS_EX_PALETTEWINDOW,
S_TEXTVIEW_CLASS,
textBuf,
WS_OVERLAPPED|WS_BORDER|WS_SYSMENU|WS_VISIBLE|WS_VSCROLL,
100, 100,
418, 215,
NULL,
NULL,
GetModuleHandle (NULL),
NULL
);
g_Proc = (WNDPROC) GetWindowLong (hwnd, GWL_WNDPROC);
SetWindowLong (hwnd, GWL_WNDPROC, (LONG) pWrapperProc);
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
Terminate();
return 0;
}