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.
208 lines
7.0 KiB
208 lines
7.0 KiB
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
printers.cpp
|
|
|
|
Abstract:
|
|
|
|
This file implements printer manipulation common setup routines
|
|
|
|
Author:
|
|
|
|
Asaf Shaar (AsafS) 7-Nov-2000
|
|
|
|
Environment:
|
|
|
|
User Mode
|
|
|
|
--*/
|
|
#include <windows.h>
|
|
#include <Winspool.h>
|
|
#include <SetupUtil.h>
|
|
#include <faxreg.h>
|
|
|
|
|
|
//
|
|
//
|
|
// Function: DeleteFaxPrinter
|
|
// Description: Delete fax printer driver for win2k from current machine
|
|
// In case of failure, log it and returns FALSE.
|
|
// Returns TRUE on success
|
|
//
|
|
// Args: lpctstrFaxPrinterName (LPTSTR): Fax printer name
|
|
//
|
|
//
|
|
// Author: AsafS
|
|
|
|
BOOL
|
|
DeleteFaxPrinter(
|
|
LPCTSTR lpctstrFaxPrinterName // printer name
|
|
)
|
|
{
|
|
BOOL fSuccess = TRUE;
|
|
DBG_ENTER(TEXT("DeleteFaxPrinter"), fSuccess, TEXT("%s"), lpctstrFaxPrinterName);
|
|
|
|
HANDLE hPrinter = NULL;
|
|
|
|
DWORD ec = ERROR_SUCCESS;
|
|
|
|
PRINTER_DEFAULTS Default;
|
|
|
|
Default.pDatatype = NULL;
|
|
Default.pDevMode = NULL;
|
|
Default.DesiredAccess = PRINTER_ACCESS_ADMINISTER|DELETE;
|
|
|
|
if (!OpenPrinter(
|
|
(LPTSTR) lpctstrFaxPrinterName,
|
|
&hPrinter,
|
|
&Default)
|
|
)
|
|
{
|
|
ec = GetLastError();
|
|
ASSERTION(!hPrinter);
|
|
VERBOSE (PRINT_ERR,
|
|
TEXT("OpenPrinter() for %s failed (ec: %ld)"),
|
|
lpctstrFaxPrinterName,
|
|
ec);
|
|
goto Exit;
|
|
}
|
|
|
|
ASSERTION(hPrinter); // be sure that we got valid printer handle
|
|
|
|
// purge all the print jobs -- can't delete a printer with jobs in queue (printed or not)
|
|
if (!SetPrinter(
|
|
hPrinter,
|
|
0,
|
|
NULL,
|
|
PRINTER_CONTROL_PURGE)
|
|
)
|
|
{
|
|
// Don't let a failure here keep us from attempting the delete
|
|
VERBOSE(PRINT_ERR,
|
|
TEXT("SetPrinter failed (purge jobs before uninstall %s)!")
|
|
TEXT("Last error: %d"),
|
|
lpctstrFaxPrinterName,
|
|
GetLastError());
|
|
}
|
|
|
|
if (!DeletePrinter(hPrinter))
|
|
{
|
|
ec = GetLastError();
|
|
VERBOSE (PRINT_ERR,
|
|
TEXT("Delete Printer %s failed (ec: %ld)"),
|
|
lpctstrFaxPrinterName,
|
|
ec);
|
|
goto Exit;
|
|
}
|
|
|
|
VERBOSE (DBG_MSG,
|
|
TEXT("DeletePrinter() for %s succeeded"),
|
|
lpctstrFaxPrinterName);
|
|
Exit:
|
|
if (hPrinter)
|
|
{
|
|
ClosePrinter(hPrinter);
|
|
}
|
|
SetLastError(ec);
|
|
fSuccess = (ERROR_SUCCESS == ec);
|
|
return fSuccess;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Function:
|
|
// FillDriverInfo
|
|
//
|
|
// Purpose:
|
|
// Fill a DRIVER_INFO_3 structure depending on the environment.
|
|
//
|
|
// Params:
|
|
// DRIVER_INFO_3* pDriverInfo3 - the DRIVER_INFO_3 structure to fill out
|
|
// LPCTSTR pEnvironment - the print environment for which the driver info is filled.
|
|
// this corresponds to the printer env. in AddPrinterDriverEx API.
|
|
//
|
|
// Return Value:
|
|
// TRUE - everything was ok.
|
|
// FALSE - invalid params passed in
|
|
//
|
|
// Author:
|
|
// Mooly Beery (MoolyB) 12-Aug-2001
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
BOOL FillDriverInfo(DRIVER_INFO_3* pDriverInfo3,LPCTSTR pEnvironment)
|
|
{
|
|
DBG_ENTER(_T("FillDriverInfo"));
|
|
|
|
if (pDriverInfo3==NULL)
|
|
{
|
|
VERBOSE(SETUP_ERR,_T("called with a NULL pDriverInfo3..."));
|
|
return FALSE;
|
|
}
|
|
|
|
if (pEnvironment==NULL)
|
|
{
|
|
VERBOSE(DBG_MSG,_T("Filling DRIVER_INFO_3 for W2K/XP"));
|
|
pDriverInfo3->cVersion = 3;
|
|
pDriverInfo3->pName = FAX_DRIVER_NAME;
|
|
pDriverInfo3->pEnvironment = NULL;
|
|
pDriverInfo3->pDriverPath = FAX_DRV_MODULE_NAME;
|
|
pDriverInfo3->pDataFile = FAX_UI_MODULE_NAME;
|
|
pDriverInfo3->pConfigFile = FAX_UI_MODULE_NAME;
|
|
pDriverInfo3->pDependentFiles = FAX_WZRD_MODULE_NAME TEXT("\0")
|
|
FAX_TIFF_MODULE_NAME TEXT("\0")
|
|
FAX_RES_FILE TEXT("\0")
|
|
FAX_API_MODULE_NAME TEXT("\0");
|
|
pDriverInfo3->pMonitorName = NULL;
|
|
pDriverInfo3->pHelpFile = NULL;
|
|
pDriverInfo3->pDefaultDataType = TEXT("RAW");
|
|
}
|
|
else if (_tcsicmp(pEnvironment,NT4_PRINT_ENV)==0)
|
|
{
|
|
VERBOSE(DBG_MSG,_T("Filling DRIVER_INFO_3 for NT4"));
|
|
pDriverInfo3->cVersion = 2;
|
|
pDriverInfo3->pName = FAX_DRIVER_NAME;
|
|
pDriverInfo3->pEnvironment = NT4_PRINT_ENV;
|
|
pDriverInfo3->pDriverPath = FAX_NT4_DRV_MODULE_NAME;
|
|
pDriverInfo3->pDataFile = FAX_UI_MODULE_NAME;
|
|
pDriverInfo3->pConfigFile = FAX_UI_MODULE_NAME;
|
|
pDriverInfo3->pDependentFiles = FAX_DRV_DEPEND_FILE TEXT("\0")
|
|
FAX_API_MODULE_NAME TEXT("\0")
|
|
FAX_NT4_DRV_MODULE_NAME TEXT("\0")
|
|
FAX_TIFF_FILE TEXT("\0")
|
|
FAX_RES_FILE TEXT("\0")
|
|
FAX_UI_MODULE_NAME TEXT("\0");
|
|
pDriverInfo3->pMonitorName = NULL;
|
|
pDriverInfo3->pHelpFile = NULL;
|
|
pDriverInfo3->pDefaultDataType = TEXT("RAW");
|
|
}
|
|
else if (_tcsicmp(pEnvironment,W9X_PRINT_ENV)==0)
|
|
{
|
|
VERBOSE(DBG_MSG,_T("Filling DRIVER_INFO_3 for W9X"));
|
|
pDriverInfo3->cVersion = 0;
|
|
pDriverInfo3->pName = FAX_DRIVER_NAME;
|
|
pDriverInfo3->pEnvironment = W9X_PRINT_ENV;
|
|
pDriverInfo3->pDriverPath = FAX_DRV_WIN9X_16_MODULE_NAME;
|
|
pDriverInfo3->pDataFile = FAX_DRV_WIN9X_16_MODULE_NAME;
|
|
pDriverInfo3->pConfigFile = FAX_DRV_WIN9X_16_MODULE_NAME;
|
|
pDriverInfo3->pDependentFiles = FAX_DRV_WIN9X_16_MODULE_NAME TEXT("\0")
|
|
FAX_DRV_WIN9X_32_MODULE_NAME TEXT("\0")
|
|
FAX_WZRD_MODULE_NAME TEXT("\0")
|
|
FAX_API_MODULE_NAME TEXT("\0")
|
|
FAX_TIFF_FILE TEXT("\0")
|
|
FAX_DRV_ICONLIB TEXT("\0")
|
|
FAX_RES_FILE TEXT("\0")
|
|
FAX_DRV_UNIDRV_MODULE_NAME TEXT("\0");
|
|
pDriverInfo3->pMonitorName = NULL;
|
|
pDriverInfo3->pHelpFile = FAX_DRV_UNIDRV_HELP;
|
|
pDriverInfo3->pDefaultDataType = TEXT("RAW");
|
|
}
|
|
else
|
|
{
|
|
VERBOSE(SETUP_ERR,_T("called with a weird pEnv..., do nothing"));
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|