167 lines
4.1 KiB
C
167 lines
4.1 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995 Microsoft Corporation
|
||
|
All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
Win95.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Routines for installing win95 driver files
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Muhunthan Sivapragasam (MuhuntS) 30-Nov-1995
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
|
||
|
//
|
||
|
// Keys to search for in Win95 Infs
|
||
|
//
|
||
|
TCHAR cszAllInfs[] = TEXT("*.inf");
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
InstallWin95Driver(
|
||
|
IN HWND hwnd,
|
||
|
IN LPCTSTR pszModel,
|
||
|
IN LPCTSTR pszServerName,
|
||
|
IN LPCTSTR pszDiskName
|
||
|
)
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
List all the printer drivers from Win95 INF files and install the
|
||
|
printer driver selected by the user
|
||
|
|
||
|
Arguments:
|
||
|
hwnd : Window handle that owns the UI
|
||
|
pszModel : Printer driver model (UNREFERECED)
|
||
|
pszServerName : Server for which driver is to be installed (NULL : local)
|
||
|
pszDiskName : Name of the disk to prompt for and use in title
|
||
|
|
||
|
Return Value:
|
||
|
On succesfully installing files ERROR_SUCCESS, else the error code
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
DWORD dwNeeded, dwRet = ERROR_CANCELLED;
|
||
|
TCHAR szInfPath[MAX_PATH], szTargetPath[MAX_PATH];
|
||
|
LPDRIVER_INFO_3 pDriverInfo3 = NULL;
|
||
|
PSELECTED_DRV_INFO pSelectedDrvInfo = NULL;
|
||
|
LPTSTR pszTitle = NULL, pszFormat = NULL;
|
||
|
HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
|
||
|
|
||
|
//
|
||
|
// Build strings to use in the path dialog ..
|
||
|
//
|
||
|
pszFormat = GetStringFromRcFile(IDS_DRIVERS_FOR_PLATFORM);
|
||
|
if ( pszFormat ) {
|
||
|
|
||
|
pszTitle = AllocMem((lstrlen(pszFormat) + lstrlen(pszDiskName) + 2)
|
||
|
* sizeof(*pszTitle));
|
||
|
if ( pszTitle )
|
||
|
wsprintf(pszTitle, pszFormat, pszDiskName);
|
||
|
}
|
||
|
|
||
|
if ( !PSetupGetPathToSearch(hwnd, pszTitle, pszDiskName,
|
||
|
cszAllInfs, szInfPath) ) {
|
||
|
|
||
|
goto Cleanup;
|
||
|
}
|
||
|
|
||
|
hDevInfo = CreatePrinterDevInfo();
|
||
|
|
||
|
if ( !hDevInfo ||
|
||
|
!SetSelectDevParams(hDevInfo, TRUE, pszModel) ||
|
||
|
!SetDevInstallParams(hDevInfo, hwnd, szInfPath) ||
|
||
|
!BuildClassDriverList(hDevInfo) ) {
|
||
|
|
||
|
goto Cleanup;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Look for an exact model match
|
||
|
//
|
||
|
pSelectedDrvInfo = DriverInfoFromName(hDevInfo, pszModel);
|
||
|
|
||
|
if ( !pSelectedDrvInfo ) {
|
||
|
|
||
|
if ( SelectDriver(hDevInfo) ) {
|
||
|
|
||
|
pSelectedDrvInfo = GetSelectedDriverInfo(hDevInfo);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( !pSelectedDrvInfo ) {
|
||
|
|
||
|
goto Cleanup;
|
||
|
}
|
||
|
|
||
|
pDriverInfo3 = PSetupGetDriverInfo3(pSelectedDrvInfo);
|
||
|
|
||
|
if ( !pDriverInfo3 ) {
|
||
|
|
||
|
goto Cleanup;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// If we did not find the model we were looking for and user chose a
|
||
|
// compatible driver we want to use the model name given since that is
|
||
|
// what GetPrinter will give
|
||
|
//
|
||
|
if ( lstrcmp(pDriverInfo3->pName, pszModel) ) {
|
||
|
|
||
|
FreeStr(pDriverInfo3->pName);
|
||
|
pDriverInfo3->pName = AllocStr(pszModel);
|
||
|
if ( !pDriverInfo3->pName )
|
||
|
goto Cleanup;
|
||
|
}
|
||
|
|
||
|
pDriverInfo3->pEnvironment = PlatformEnv[PlatformWin95].pszName;
|
||
|
|
||
|
if ( GetPrinterDriverDirectory((LPTSTR)pszServerName,
|
||
|
pDriverInfo3->pEnvironment,
|
||
|
1,
|
||
|
(LPBYTE)szTargetPath,
|
||
|
sizeof(szTargetPath),
|
||
|
&dwNeeded) &&
|
||
|
CopyPrinterDriverFiles(pDriverInfo3,
|
||
|
szInfPath,
|
||
|
pszDiskName,
|
||
|
szTargetPath,
|
||
|
hwnd,
|
||
|
TRUE) &&
|
||
|
AddPrinterDriver((LPTSTR)pszServerName, 3, (LPBYTE)pDriverInfo3) ) {
|
||
|
|
||
|
dwRet = ERROR_SUCCESS;
|
||
|
}
|
||
|
|
||
|
|
||
|
Cleanup:
|
||
|
|
||
|
if ( dwRet != ERROR_SUCCESS )
|
||
|
dwRet = GetLastError();
|
||
|
|
||
|
if ( hDevInfo != INVALID_HANDLE_VALUE )
|
||
|
SetupDiDestroyDeviceInfoList(hDevInfo);
|
||
|
|
||
|
if ( pSelectedDrvInfo )
|
||
|
PSetupDestroySelectedDriverInfo(pSelectedDrvInfo);
|
||
|
|
||
|
if ( pDriverInfo3 )
|
||
|
PSetupDestroyDriverInfo3(pDriverInfo3);
|
||
|
|
||
|
FreeStr(pszTitle);
|
||
|
FreeStr(pszFormat);
|
||
|
|
||
|
return dwRet;
|
||
|
}
|