285 lines
7.5 KiB
C
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;
|
||
|
}
|
||
|
|