|
|
/*++
Copyright (c) 2000 Microsoft Corporation All rights reserved.
Module Name:
Nt.c
Abstract:
Routines to migrate Win95 printing components to NT
Author:
Keisuke Tsuchida (KeisukeT) 10-Oct-2000
Revision History:
--*/
#include "precomp.h"
//
// Extern
//
extern LPCSTR g_WorkingDirectory; extern LPCSTR g_SourceDirectory; extern LPCSTR g_MediaDirectory;
//
// Typedef
//
typedef BOOL (WINAPI *PMIGRATEDEVICE)(PDEVICE_INFO); typedef DWORD (WINAPI *PSHDELETEKEY)(HKEY, LPCSTR);
LONG CALLBACK InitializeNT( IN LPCWSTR pszWorkingDir, IN LPCWSTR pszSourceDir, IN LPCWSTR pszMediaDir ) { LONG lError;
//
// Initialize local.
//
lError = ERROR_SUCCESS;
//
// Save given parameters.
//
g_WorkingDirectory = AllocStrAFromStrW(pszWorkingDir); g_SourceDirectory = AllocStrAFromStrW(pszSourceDir); g_MediaDirectory = AllocStrAFromStrW(pszMediaDir);
if(NULL == g_WorkingDirectory){ SetupLogError("WIA Migration: InitializeNT: ERROR!! insufficient memory.\r\n", LogSevError); lError = ERROR_NOT_ENOUGH_MEMORY; goto InitializeNT_return; }
InitializeNT_return:
if(ERROR_SUCCESS != lError){ //
// Can't process migration. Clean up.
//
if(NULL != g_WorkingDirectory){ FreeMem((PVOID)g_WorkingDirectory); g_WorkingDirectory = NULL; }
if(NULL != g_SourceDirectory){ FreeMem((PVOID)g_SourceDirectory); g_SourceDirectory = NULL; }
if(NULL != g_MediaDirectory){ FreeMem((PVOID)g_MediaDirectory); g_MediaDirectory = NULL; } } // if(ERROR_SUCCESS != lError)
return lError; }
LONG CALLBACK MigrateUserNT( IN HINF hUnattendInf, IN HKEY hUserRegKey, IN LPCWSTR pszUserName, LPVOID Reserved ) { return ERROR_SUCCESS; }
LONG CALLBACK MigrateSystemNT( IN HINF hUnattendInf, LPVOID Reserved ) { LONG lError; HANDLE hFile; CHAR szFile[MAX_PATH];
//
// Initialize local.
//
lError = ERROR_SUCCESS; hFile = (HANDLE)INVALID_HANDLE_VALUE;
//
// Check global initialization.
//
if(NULL == g_WorkingDirectory){ lError = ERROR_NOT_ENOUGH_MEMORY; MyLogError("WIA Migration: MigrateSystemNT: ERROR!! Initialize failed. Err=0x%x\n", lError);
goto MigrateSystemNT_return; } // if(NULL == g_WorkingDirectory)
//
// Create path to the files.
//
// wsprintfA(szFile, "%s\\%s", g_WorkingDirectory, NAME_WIN9X_SETTING_FILE_A);
_snprintf(szFile, sizeof(szFile), "%s\\%s", g_WorkingDirectory, NAME_WIN9X_SETTING_FILE_A);
//
// Make sure the string is NULL terminated.
//
szFile[sizeof(szFile)/sizeof(szFile[0]) -1] = '\0';
//
// Open migration file.
//
hFile = CreateFileA(szFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hFile == INVALID_HANDLE_VALUE){ lError = GetLastError(); MyLogError("WIA Migration: MigrateSystemNT: ERROR!! Unable to open migration file. Err=0x%x\n", lError);
goto MigrateSystemNT_return; } // if (hFile == INVALID_HANDLE_VALUE)
//
// Process migration info file created on Win9x.
//
lError = MigNtProcessMigrationInfo(hFile);
//
// Remove certain reg if inbox Kodak Imaging for Win9x is installed.
//
if(MigNtIsWin9xImagingExisting()){ MigNtRemoveKodakImagingKey(); } // if(MigNtIsWin9xImagingExisting())
MigrateSystemNT_return:
//
// Clean up.
//
if(INVALID_HANDLE_VALUE == hFile){ CloseHandle(hFile); }
return lError; } // MigrateSystemNT()
LONG MigNtProcessMigrationInfo( HANDLE hFile ) { LONG lError; DEVICE_INFO MigrateDevice; HMODULE hInstaller; PMIGRATEDEVICE pfnMigrateDevice;
//
// Initialize local.
//
lError = ERROR_SUCCESS; hInstaller = (HMODULE)NULL; pfnMigrateDevice = NULL;
memset(&MigrateDevice, 0, sizeof(MigrateDevice));
//
// Load STI_CI.DLL.
//
hInstaller = LoadLibrary(NAME_INSTALLER_A); if(NULL == hInstaller){ //
// Unable to load sti_ci.dll.
//
lError = GetLastError(); MyLogError("WIA Migration: MigNtProcessMigrationInfo: ERROR!! Unable to load sti_ci.dll. Err=0x%x\n", lError);
goto MigNtProcessMigrationInfo_return;
} // if(NULL == hInstaller)
//
// Get address of MigrateDevice()
//
pfnMigrateDevice = (PMIGRATEDEVICE)GetProcAddress(hInstaller, NAME_PROC_MIGRATEDEVICE_A); if(NULL == pfnMigrateDevice){ //
// Unable to get proc address.
//
lError = GetLastError(); MyLogError("WIA Migration: MigNtProcessMigrationInfo: ERROR!! Unable to get proc address. Err=0x%x\n", lError);
goto MigNtProcessMigrationInfo_return;
} // if(NULL == pfnMigrateDevice)
//
// Query migrating device.
//
while(ERROR_SUCCESS == MigNtGetDevice(hFile, &MigrateDevice)){
//
// Install only COM/LPT device.
//
if( (NULL != strstr(MigrateDevice.pszCreateFileName, "COM")) || (NULL != strstr(MigrateDevice.pszCreateFileName, "LPT")) || (NULL != strstr(MigrateDevice.pszCreateFileName, "AUTO")) ) { pfnMigrateDevice(&MigrateDevice); }
/***********
{ PPARAM_LIST pTemp;
printf("\"%s\" = \"%s\"\r\n", NAME_FRIENDLYNAME_A, MigrateDevice.pszFriendlyName); printf("\"%s\" = \"%s\"\r\n", NAME_CREATEFILENAME_A, MigrateDevice.pszCreateFileName); printf("\"%s\" = \"%s\"\r\n", NAME_INF_PATH_A, MigrateDevice.pszInfPath); printf("\"%s\" = \"%s\"\r\n", NAME_INF_SECTION_A, MigrateDevice.pszInfSection); for(pTemp = MigrateDevice.pDeviceDataParam; pTemp != NULL;){ printf("\"%s\" = \"%s\"\r\n", pTemp->pParam1, pTemp->pParam2); pTemp = (PPARAM_LIST)pTemp->pNext; } // for(pTemp = MigrateDevice.pDeviceDataParam; pTemp != NULL;)
printf("\r\n");
} ***********/
//
// Clean up.
//
MigNtFreeDeviceInfo(&MigrateDevice);
} // while(ERROR_SUCCESS == MigNtGetDevice(hFile, &MigrateDevice))
MigNtProcessMigrationInfo_return:
//
// Clean up.
//
if(NULL != hInstaller){ FreeLibrary(hInstaller); } return lError; } // MigNtProcessMigrationInfo()
LONG MigNtGetDevice( HANDLE hFile, PDEVICE_INFO pMigrateDevice ) { LONG lError; LPSTR pParam1; LPSTR pParam2; BOOL bFound; LPSTR pszFriendlyName; LPSTR pszCreateFileName; LPSTR pszInfPath; LPSTR pszInfSection; DWORD dwNumberOfDeviceDataKey; PPARAM_LIST pDeviceDataParam; PPARAM_LIST pTempParam; //
// Initialize local.
//
lError = ERROR_SUCCESS; pParam1 = NULL; pParam2 = NULL; bFound = FALSE; pszFriendlyName = NULL; pszCreateFileName = NULL; pszInfPath = NULL; pszInfSection = NULL; pDeviceDataParam = NULL; pTempParam = NULL; dwNumberOfDeviceDataKey = 0;
//
// Find "Device = BEGIN"
//
while(FALSE == bFound){ ReadString(hFile, &pParam1, &pParam2); if( (NULL != pParam1) && (NULL != pParam2) ){ //
// Both parameter exist.
//
if( (0 == MyStrCmpiA(pParam1, NAME_DEVICE_A)) && (0 == MyStrCmpiA(pParam2, NAME_BEGIN_A)) ) { //
// Found begining of device description.
//
bFound = TRUE; } } else { // if( (NULL != pParam1) && (NULL != pParam2) )
if( (NULL == pParam1) && (NULL == pParam2) ){
//
// Error or EOF.
//
lError = ERROR_NO_MORE_ITEMS; goto MigNtGetDevice_return; } else {
//
// A line with single parameter. Just ignore.
//
} }
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; } } // while(FALSE == bFound)
//
// Get FriendlyName
//
ReadString(hFile, &pParam1, &pParam2); if( (NULL == pParam1) || (NULL == pParam2) ){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if( (NULL == pParam1) || (NULL == pParam2) )
if(0 != MyStrCmpiA(pParam1, NAME_FRIENDLYNAME_A)){ //
// Invalid migration file.
//
lError = ERROR_INVALID_PARAMETER; goto MigNtGetDevice_return; } //if(0 != MyStrCmpiA(pParam1, NAME_FRIENDLYNAME_A))
//
// Copy to allocated buffer.
//
pszFriendlyName = AllocStrA(pParam2);
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; }
//
// Get CreateFileName
//
ReadString(hFile, &pParam1, &pParam2); if( (NULL == pParam1) || (NULL == pParam2) ){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if( (NULL == pParam1) || (NULL == pParam2) )
if(0 != MyStrCmpiA(pParam1, NAME_CREATEFILENAME_A)){ //
// Invalid migration file.
//
lError = ERROR_INVALID_PARAMETER; goto MigNtGetDevice_return; } //if(0 != MyStrCmpiA(pParam1, NAME_CREATEFILENAME_A))
//
// Copy to allocated buffer.
//
pszCreateFileName = AllocStrA(pParam2);
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; }
//
// Get InfPath
//
ReadString(hFile, &pParam1, &pParam2); if( (NULL == pParam1) || (NULL == pParam2) ){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if( (NULL == pParam1) || (NULL == pParam2) )
if(0 != MyStrCmpiA(pParam1, NAME_INF_PATH_A)){ //
// Invalid migration file.
//
lError = ERROR_INVALID_PARAMETER; goto MigNtGetDevice_return; } //if(0 != MyStrCmpiA(pParam1, NAME_INF_PATH_A))
//
// Copy to allocated buffer.
//
pszInfPath = AllocStrA(pParam2);
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; }
//
// Get InfSection
//
ReadString(hFile, &pParam1, &pParam2); if( (NULL == pParam1) || (NULL == pParam2) ){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if( (NULL == pParam1) || (NULL == pParam2) )
if(0 != MyStrCmpiA(pParam1, NAME_INF_SECTION_A)){ //
// Invalid migration file.
//
lError = ERROR_INVALID_PARAMETER; goto MigNtGetDevice_return; } //if(0 != MyStrCmpiA(pParam1, NAME_INF_SECTION_A))
//
// Copy to allocated buffer.
//
pszInfSection = AllocStrA(pParam2);
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; }
//
// Get DeviceData section.
//
bFound = FALSE; while(FALSE == bFound){ ReadString(hFile, &pParam1, &pParam2); if( (NULL == pParam1) || (NULL == pParam2) ){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if( (NULL == pParam1) || (NULL == pParam2) )
if(0 == MyStrCmpiA(pParam1, REGKEY_DEVICEDATA_A)){ //
// Found beginning of DeviceData section.
//
bFound = TRUE; } // if(0 == MyStrCmpiA(pParam1, REGKEY_DEVICEDATA_A))
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; } } // while(FALSE == bFound)
//
// Process until DeviceData = END is found.
//
bFound = FALSE; while(FALSE == bFound){ ReadString(hFile, &pParam1, &pParam2); if( (NULL == pParam1) || (NULL == pParam2) ){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if( (NULL == pParam1) || (NULL == pParam2) )
if( (0 == MyStrCmpiA(pParam1, REGKEY_DEVICEDATA_A)) && (0 == MyStrCmpiA(pParam2, NAME_END_A)) ) { //
// Found beginning of DeviceData section.
//
bFound = TRUE;
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; } break; } // if(0 == MyStrCmpiA(pParam1, REGKEY_DEVICEDATA_A))
//
// Increment counter.
//
dwNumberOfDeviceDataKey++;
//
// Allocate new structure for parameters.
//
pTempParam = (PPARAM_LIST)AllocMem(sizeof(PARAM_LIST)); if(NULL == pTempParam){ lError = ERROR_NOT_ENOUGH_MEMORY; goto MigNtGetDevice_return; } // if(NULL == pTempParam)
//
// Set parameters.
//
pTempParam->pNext = NULL; pTempParam->pParam1 = AllocStrA(pParam1); pTempParam->pParam2 = AllocStrA(pParam2);
//
// Add this parameter to list.
//
if(NULL == pDeviceDataParam){ pDeviceDataParam = pTempParam; } else { // if(NULL == pDeviceDataParam)
PPARAM_LIST pTemp; //
// Find the last data, and add.
//
for(pTemp = pDeviceDataParam; NULL !=pTemp->pNext; pTemp=(PPARAM_LIST)pTemp->pNext); pTemp->pNext = (PVOID)pTempParam;
} // else(NULL == pDeviceDataParam)
//
// Free allocated memory.
//
if(NULL != pParam1){ FreeMem(pParam1); pParam1 = NULL; }
if(NULL != pParam2){ FreeMem(pParam2); pParam2 = NULL; } } // while(FALSE == bFound)
//
// Copy all data.
//
pMigrateDevice->pszFriendlyName = pszFriendlyName; pMigrateDevice->pszCreateFileName = pszCreateFileName; pMigrateDevice->pszInfPath = pszInfPath; pMigrateDevice->pszInfSection = pszInfSection; pMigrateDevice->dwNumberOfDeviceDataKey = dwNumberOfDeviceDataKey; pMigrateDevice->pDeviceDataParam = pDeviceDataParam;
//
// Operation succeeded.
//
lError = ERROR_SUCCESS;
MigNtGetDevice_return:
//
// Clean up.
//
if(ERROR_SUCCESS != lError){ PPARAM_LIST pTemp; //
// Free all allocated parameters.
//
if(NULL != pszFriendlyName){ FreeMem(pszFriendlyName); } if(NULL != pszCreateFileName){ FreeMem(pszCreateFileName); } if(NULL != pszInfPath){ FreeMem(pszInfPath); } if(NULL != pszInfSection){ FreeMem(pszInfSection); } if(NULL != pDeviceDataParam){ pTemp = pDeviceDataParam; while(NULL != pTemp){ pDeviceDataParam = (PPARAM_LIST)pDeviceDataParam->pNext; FreeMem(pTemp); pTemp = pDeviceDataParam; } // while(NULL != pTemp)
} // if(NULL != pDeviceDataParam)
} // if(ERROR_SUCCESS != lError)
if(NULL != pParam1){ FreeMem(pParam1); }
if(NULL != pParam2){ FreeMem(pParam2); } return lError; } // MigNtGetDevice()
VOID MigNtFreeDeviceInfo( PDEVICE_INFO pMigrateDevice ) { PPARAM_LIST pCurrent; PPARAM_LIST pNext;
if(NULL == pMigrateDevice){ goto MigNtFreeDeviceInfo_return; } // if(NULL == pMigrateDevice)
//
// Free all allocated parameters.
//
if(NULL != pMigrateDevice->pszFriendlyName){ FreeMem(pMigrateDevice->pszFriendlyName); } if(NULL != pMigrateDevice->pszCreateFileName){ FreeMem(pMigrateDevice->pszCreateFileName); } if(NULL != pMigrateDevice->pszInfPath){ FreeMem(pMigrateDevice->pszInfPath); } if(NULL != pMigrateDevice->pszInfSection){ FreeMem(pMigrateDevice->pszInfSection); } if(NULL != pMigrateDevice->pDeviceDataParam){ pCurrent = pMigrateDevice->pDeviceDataParam; while(NULL != pCurrent){ pNext = (PPARAM_LIST)pCurrent->pNext; FreeMem(pCurrent); pCurrent = pNext; } // while(NULL != pTemp)
} // if(NULL != pDeviceDataParam)
//
// Null out the buffer.
//
memset(pMigrateDevice, 0, sizeof(DEVICE_INFO));
MigNtFreeDeviceInfo_return: return; } // MigNtFreeDeviceInfo()
BOOL CALLBACK MigNtIsWin9xImagingExisting( VOID ) { BOOL bRet; LONG lError; HKEY hkKodak; TCHAR szWindowsDirectory[MAX_PATH]; TCHAR szKodakImaging[MAX_PATH]; DWORD dwVersionInfoSize; DWORD dwDummy; PVOID pVersion; PVOID pFileVersionInfo; DWORD dwFileVersionInfoSize;
//
// Initialize local.
//
bRet = FALSE; lError = ERROR_SUCCESS; dwVersionInfoSize = 0; dwFileVersionInfoSize = 0; pVersion = NULL; pFileVersionInfo = NULL;
memset(szWindowsDirectory, 0, sizeof(szWindowsDirectory)); memset(szKodakImaging, 0, sizeof(szKodakImaging));
//
// Get Windows directory.
//
if(0 == GetWindowsDirectory(szWindowsDirectory, sizeof(szWindowsDirectory)/sizeof(TCHAR))){ lError = GetLastError(); MyLogError("WIA Migration: MigNtIsWin9xImagingExisting: ERROR!! GetWindowsDirectory() failed. Err=0x%x\n", lError);
goto MigNtIsWin9xImagingExisting_return; } // if(0 == GetWindowsDirectory(szTemp, sizeof(szTemp)/sizeof(TCHAR)))
//
// Create path to Kodak Imaging.
//
// wsprintf(szKodakImaging, "%s\\%s", szWindowsDirectory, NAME_KODAKIMAGING);
_sntprintf(szKodakImaging, sizeof(szKodakImaging)/sizeof(TCHAR), TEXT("%s\\%s"), szWindowsDirectory, NAME_KODAKIMAGING);
//
// Make sure the string is NULL terminated.
//
szKodakImaging[sizeof(szKodakImaging)/sizeof(szKodakImaging[0]) -1] = TEXT('\0');
//
// Get size of version resource of the file.
//
dwVersionInfoSize = GetFileVersionInfoSize(szKodakImaging, &dwDummy); if(0 == dwVersionInfoSize){ //
// Unable to get version info of the file. Most probably the file doesn't exist.
//
lError = GetLastError(); if(ERROR_FILE_NOT_FOUND == lError){
//
// File doesn't exist. Now it's safe to remove regkey for kodakimg.exe.
//
bRet = TRUE;
} // if(ERROR_FILE_NOT_FOUND == lError)
// MyLogError("WIA Migration: MigNtIsWin9xImagingExisting: ERROR!! GetFileVersionInfoSize() failed. Err=0x%x\n", lError);
goto MigNtIsWin9xImagingExisting_return; } // if(0 == dwVersionInfoSize)
//
// Allocate required size of buffer.
//
pVersion = AllocMem(dwVersionInfoSize); if(NULL == pVersion){ lError = ERROR_INSUFFICIENT_BUFFER; MyLogError("WIA Migration: MigNtIsWin9xImagingExisting: ERROR!! InsufficientBuffer. Err=0x%x\n", lError);
goto MigNtIsWin9xImagingExisting_return; } // if(NULL == pVersion)
//
// Get version info.
//
if(FALSE == GetFileVersionInfo(szKodakImaging, 0, dwVersionInfoSize, pVersion)){ lError = GetLastError(); MyLogError("WIA Migration: MigNtIsWin9xImagingExisting: ERROR!! GetVersionInfo() failed. Err=0x%x\n", lError);
goto MigNtIsWin9xImagingExisting_return; } // if(FALSE == GetVersionInfo(szKodakImaging, 0, dwVersionInfoSize, pVersion))
//
// See if the binary is Win9x inbox.
//
if(FALSE == VerQueryValue(pVersion, TEXT("\\"), &pFileVersionInfo, &dwFileVersionInfoSize)){ lError = GetLastError(); MyLogError("WIA Migration: MigNtIsWin9xImagingExisting: ERROR!! VerQueryValue() failed. Err=0x%x\n", lError);
goto MigNtIsWin9xImagingExisting_return; } // if(FALSE == VerQueryValue(pVersion, TEXT("\\"), &pFileVersionInfo, &dwFileVersionInfoSize))
if( (FILEVER_KODAKIMAGING_WIN98_MS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwFileVersionMS) && (FILEVER_KODAKIMAGING_WIN98_LS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwFileVersionLS) && (PRODVER_KODAKIMAGING_WIN98_MS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwProductVersionMS) && (PRODVER_KODAKIMAGING_WIN98_LS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwProductVersionLS) ) { //
// This is Win98 inbox Kodak Imaging. Process regkey removal.
//
bRet = TRUE; } else if( (FILEVER_KODAKIMAGING_WINME_MS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwFileVersionMS) && (FILEVER_KODAKIMAGING_WINME_LS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwFileVersionLS) && (PRODVER_KODAKIMAGING_WINME_MS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwProductVersionMS) && (PRODVER_KODAKIMAGING_WINME_LS == ((VS_FIXEDFILEINFO *)pFileVersionInfo)->dwProductVersionLS) ) { //
// This is WinMe inbox Kodak Imaging. Process regkey removal.
//
bRet = TRUE; }
MigNtIsWin9xImagingExisting_return: //
// Cleanup.
//
if(NULL != pVersion){ FreeMem(pVersion); } // if(NULL != pVersion)
return bRet;
} // MigNtIsWin9xImagingExisting()
VOID CALLBACK MigNtRemoveKodakImagingKey( VOID ) {
HMODULE hmShlwapi; PSHDELETEKEY pfnSHDeleteKey;
//
// Initialize local.
//
hmShlwapi = (HMODULE)NULL; pfnSHDeleteKey = (PSHDELETEKEY)NULL;
//
// Load shlwapi.dll.
//
hmShlwapi = LoadLibrary(TEXT("shlwapi.dll")); if(NULL == hmShlwapi){ MyLogError("WIA Migration: MigNtRemoveKodakImagingKey: ERROR!! Unable to load hmShlwapi.dll. Err=0x%x.\n", GetLastError());
goto MigNtRemoveKodakImagingKey_return; } // if(NULL == hmShlwapi)
//
// Get proc address of SHDeleteKey.
//
pfnSHDeleteKey = (PSHDELETEKEY)GetProcAddress(hmShlwapi, TEXT("SHDeleteKeyA")); if(NULL == pfnSHDeleteKey){ MyLogError("WIA Migration: MigNtRemoveKodakImagingKey: ERROR!! Unable to find SHDeleteKeyA. Err=0x%x.\n", GetLastError());
goto MigNtRemoveKodakImagingKey_return; } // if(NULL == hmShlwapi)
//
// Delete key.
//
if(ERROR_SUCCESS != pfnSHDeleteKey(HKEY_LOCAL_MACHINE, REGSTR_PATH_KODAKEVENT_A)){ MyLogError("WIA Migration: MigNtRemoveKodakImagingKey: ERROR!! Unable to delete key. Err=0x%x.\n", GetLastError());
goto MigNtRemoveKodakImagingKey_return; } // if(ERROR_SUCCESS != pfnSHDeleteKey(HKEY_LOCAL_MACHINE, REGSTR_PATH_KODAKEVENT_A))
MigNtRemoveKodakImagingKey_return: if(NULL != hmShlwapi){ FreeLibrary(hmShlwapi); hmShlwapi = NULL; } // if(NULL != hmShlwapi)
} // MigNtRemoveKodakImagingKey()
//
// The following are to make sure if setup changes the header file they
// first tell me (otherwise they will break build of this)
//
P_INITIALIZE_NT pfnInitializeNT = InitializeNT; P_MIGRATE_USER_NT pfnMigrateUserNt = MigrateUserNT; P_MIGRATE_SYSTEM_NT pfnMigrateSystemNT = MigrateSystemNT;
|