Leaked source code of windows server 2003
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

/*++
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;
}