windows-nt/Source/XPSP1/NT/base/ntsetup/win95upg/migdlls/setup/kkimgpro.c
2020-09-26 16:20:57 +08:00

285 lines
7.5 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
kkimgpro.c
Abstract:
This source file implements the operations needed to properly migrate Kodak Imaging Pro from
Windows 9x to Windows NT. This is part of the Setup Migration DLL.
Author:
Calin Negreanu (calinn) 15-Mar-1999
Revision History:
--*/
#include "pch.h"
#define S_MIGRATION_PATHS "Migration Paths"
#define S_KODAKIMG_FILE1 "KODAKIMG.EXE"
#define S_KODAKIMG_FILE2 "KODAKPRV.EXE"
#define MEMDB_CATEGORY_KKIMGPRO "KodakImagingPro"
#define S_COMPANYNAME "CompanyName"
#define S_PRODUCTVER "ProductVersion"
#define S_KKIMG_COMPANYNAME1 "Eastman Software*"
#define S_KKIMG_PRODUCTVER1 "2.*"
#define S_KKIMG_COMPANYNAME2 "Eastman Software*"
#define S_KKIMG_PRODUCTVER2 "2.*"
static GROWBUFFER g_FilesBuff = GROWBUF_INIT;
PSTR
QueryVersionEntry (
IN PCSTR FileName,
IN PCSTR VersionEntry
)
/*++
Routine Description:
QueryVersionEntry queries the file's version structure returning the
value for a specific entry
Arguments:
FileName - File to query for version struct.
VersionEntry - Name to query in version structure.
Return value:
Value of specified entry or NULL if unsuccessful
--*/
{
VERSION_STRUCT Version;
PCSTR CurrentStr;
PSTR result = NULL;
MYASSERT (VersionEntry);
if (CreateVersionStruct (&Version, FileName)) {
__try {
CurrentStr = EnumFirstVersionValue (&Version, VersionEntry);
if (CurrentStr) {
CurrentStr = SkipSpace (CurrentStr);
result = DuplicatePathString (CurrentStr, 0);
}
else {
__leave;
}
}
__finally {
DestroyVersionStruct (&Version);
}
}
return result;
}
BOOL
KodakImagingPro_Attach (
IN HINSTANCE DllInstance
)
{
return TRUE;
}
BOOL
KodakImagingPro_Detach (
IN HINSTANCE DllInstance
)
{
FreeGrowBuffer (&g_FilesBuff);
return TRUE;
}
LONG
KodakImagingPro_QueryVersion (
IN PCSTR *ExeNamesBuf
)
{
HKEY key = NULL;
PCTSTR fullFileName = NULL;
PCTSTR fileName = NULL;
DWORD result = ERROR_SUCCESS;
MultiSzAppendA (&g_FilesBuff, S_KODAKIMG_FILE1);
MultiSzAppendA (&g_FilesBuff, S_KODAKIMG_FILE2);
*ExeNamesBuf = g_FilesBuff.Buf;
return result;
}
LONG
KodakImagingPro_Initialize9x (
IN PCSTR WorkingDirectory,
IN PCSTR SourceDirectories
)
{
INFSTRUCT context = INITINFSTRUCT_GROWBUFFER;
PCSTR fullFileName = NULL;
PCSTR fileName = NULL;
PCSTR companyName = NULL;
PCSTR productVer = NULL;
LONG result = ERROR_NOT_INSTALLED;
//
// Let's find out where are our files located
//
if (g_MigrateInf != INVALID_HANDLE_VALUE) {
if (InfFindFirstLineA (g_MigrateInf, S_MIGRATION_PATHS, NULL, &context)) {
do {
fullFileName = InfGetStringFieldA (&context, 1);
if (fullFileName) {
__try {
fileName = GetFileNameFromPathA (fullFileName);
if (StringIMatchA (fileName, S_KODAKIMG_FILE1)) {
companyName = QueryVersionEntry (fullFileName, S_COMPANYNAME);
if ((!companyName) ||
(!IsPatternMatchA (S_KKIMG_COMPANYNAME1, companyName))
) {
continue;
}
productVer = QueryVersionEntry (fullFileName, S_PRODUCTVER);
if ((!productVer) ||
(!IsPatternMatchA (S_KKIMG_PRODUCTVER1, productVer))
) {
continue;
}
result = ERROR_SUCCESS;
MemDbSetValueExA (MEMDB_CATEGORY_KKIMGPRO, fullFileName, NULL, NULL, 0, NULL);
FreePathStringA (productVer);
productVer = NULL;
FreePathStringA (companyName);
companyName = NULL;
}
if (StringIMatchA (fileName, S_KODAKIMG_FILE2)) {
companyName = QueryVersionEntry (fullFileName, S_COMPANYNAME);
if ((!companyName) ||
(!IsPatternMatchA (S_KKIMG_COMPANYNAME2, companyName))
) {
continue;
}
productVer = QueryVersionEntry (fullFileName, S_PRODUCTVER);
if ((!productVer) ||
(!IsPatternMatchA (S_KKIMG_PRODUCTVER2, productVer))
) {
continue;
}
result = ERROR_SUCCESS;
MemDbSetValueExA (MEMDB_CATEGORY_KKIMGPRO, fullFileName, NULL, NULL, 0, NULL);
FreePathStringA (productVer);
productVer = NULL;
FreePathStringA (companyName);
companyName = NULL;
}
}
__finally {
if (productVer) {
FreePathStringA (productVer);
productVer = NULL;
}
if (companyName) {
FreePathStringA (companyName);
companyName = NULL;
}
}
}
} while (InfFindNextLine (&context));
InfCleanUpInfStruct (&context);
}
if (result == ERROR_NOT_INSTALLED) {
DEBUGMSGA ((DBG_VERBOSE, "Kodak Imaging Pro migration DLL: Could not find needed files."));
}
} else {
DEBUGMSGA ((DBG_ERROR, "Kodak Imaging Pro migration DLL: Could not open MIGRATE.INF."));
}
return result;
}
LONG
KodakImagingPro_MigrateUser9x (
IN HWND ParentWnd,
IN PCSTR UnattendFile,
IN HKEY UserRegKey,
IN PCSTR UserName
)
{
return ERROR_NOT_INSTALLED;
}
LONG
KodakImagingPro_MigrateSystem9x (
IN HWND ParentWnd,
IN PCSTR UnattendFile
)
{
MEMDB_ENUMA e;
CHAR pattern[MEMDB_MAX];
// Handle all files from MEMDB_CATEGORY_KKIMGPRO
MemDbBuildKeyA (pattern, MEMDB_CATEGORY_KKIMGPRO, "*", NULL, NULL);
if (MemDbEnumFirstValueA (&e, pattern, MEMDB_ALL_SUBLEVELS, MEMDB_ENDPOINTS_ONLY)) {
do {
// write this file to Handled
if (!WritePrivateProfileStringA (S_HANDLED, e.szName, "FILE", g_MigrateInfPath)) {
DEBUGMSGA ((DBG_ERROR, "Kodak Imaging Pro migration DLL: Could not write one or more handled files."));
}
} while (MemDbEnumNextValueA (&e));
}
return ERROR_NOT_INSTALLED;
}
LONG
KodakImagingPro_InitializeNT (
IN PCWSTR WorkingDirectory,
IN PCWSTR SourceDirectories
)
{
MYASSERT (FALSE);
return ERROR_SUCCESS;
}
LONG
KodakImagingPro_MigrateUserNT (
IN HINF UnattendFile,
IN HKEY UserRegKey,
IN PCWSTR UserName
)
{
MYASSERT (FALSE);
return ERROR_SUCCESS;
}
LONG
KodakImagingPro_MigrateSystemNT (
IN HINF UnattendFile
)
{
MYASSERT (FALSE);
return ERROR_SUCCESS;
}