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