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

  1. /*++
  2. Copyright (c) 2000 Microsoft Corporation
  3. Module Name:
  4. printers.cpp
  5. Abstract:
  6. This file implements printer manipulation common setup routines
  7. Author:
  8. Asaf Shaar (AsafS) 7-Nov-2000
  9. Environment:
  10. User Mode
  11. --*/
  12. #include <windows.h>
  13. #include <Winspool.h>
  14. #include <SetupUtil.h>
  15. #include <faxreg.h>
  16. //
  17. //
  18. // Function: DeleteFaxPrinter
  19. // Description: Delete fax printer driver for win2k from current machine
  20. // In case of failure, log it and returns FALSE.
  21. // Returns TRUE on success
  22. //
  23. // Args: lpctstrFaxPrinterName (LPTSTR): Fax printer name
  24. //
  25. //
  26. // Author: AsafS
  27. BOOL
  28. DeleteFaxPrinter(
  29. LPCTSTR lpctstrFaxPrinterName // printer name
  30. )
  31. {
  32. BOOL fSuccess = TRUE;
  33. DBG_ENTER(TEXT("DeleteFaxPrinter"), fSuccess, TEXT("%s"), lpctstrFaxPrinterName);
  34. HANDLE hPrinter = NULL;
  35. DWORD ec = ERROR_SUCCESS;
  36. PRINTER_DEFAULTS Default;
  37. Default.pDatatype = NULL;
  38. Default.pDevMode = NULL;
  39. Default.DesiredAccess = PRINTER_ACCESS_ADMINISTER|DELETE;
  40. if (!OpenPrinter(
  41. (LPTSTR) lpctstrFaxPrinterName,
  42. &hPrinter,
  43. &Default)
  44. )
  45. {
  46. ec = GetLastError();
  47. ASSERTION(!hPrinter);
  48. VERBOSE (PRINT_ERR,
  49. TEXT("OpenPrinter() for %s failed (ec: %ld)"),
  50. lpctstrFaxPrinterName,
  51. ec);
  52. goto Exit;
  53. }
  54. ASSERTION(hPrinter); // be sure that we got valid printer handle
  55. // purge all the print jobs -- can't delete a printer with jobs in queue (printed or not)
  56. if (!SetPrinter(
  57. hPrinter,
  58. 0,
  59. NULL,
  60. PRINTER_CONTROL_PURGE)
  61. )
  62. {
  63. // Don't let a failure here keep us from attempting the delete
  64. VERBOSE(PRINT_ERR,
  65. TEXT("SetPrinter failed (purge jobs before uninstall %s)!")
  66. TEXT("Last error: %d"),
  67. lpctstrFaxPrinterName,
  68. GetLastError());
  69. }
  70. if (!DeletePrinter(hPrinter))
  71. {
  72. ec = GetLastError();
  73. VERBOSE (PRINT_ERR,
  74. TEXT("Delete Printer %s failed (ec: %ld)"),
  75. lpctstrFaxPrinterName,
  76. ec);
  77. goto Exit;
  78. }
  79. VERBOSE (DBG_MSG,
  80. TEXT("DeletePrinter() for %s succeeded"),
  81. lpctstrFaxPrinterName);
  82. Exit:
  83. if (hPrinter)
  84. {
  85. ClosePrinter(hPrinter);
  86. }
  87. SetLastError(ec);
  88. fSuccess = (ERROR_SUCCESS == ec);
  89. return fSuccess;
  90. }
  91. ///////////////////////////////////////////////////////////////////////////////////////
  92. // Function:
  93. // FillDriverInfo
  94. //
  95. // Purpose:
  96. // Fill a DRIVER_INFO_3 structure depending on the environment.
  97. //
  98. // Params:
  99. // DRIVER_INFO_3* pDriverInfo3 - the DRIVER_INFO_3 structure to fill out
  100. // LPCTSTR pEnvironment - the print environment for which the driver info is filled.
  101. // this corresponds to the printer env. in AddPrinterDriverEx API.
  102. //
  103. // Return Value:
  104. // TRUE - everything was ok.
  105. // FALSE - invalid params passed in
  106. //
  107. // Author:
  108. // Mooly Beery (MoolyB) 12-Aug-2001
  109. ///////////////////////////////////////////////////////////////////////////////////////
  110. BOOL FillDriverInfo(DRIVER_INFO_3* pDriverInfo3,LPCTSTR pEnvironment)
  111. {
  112. DBG_ENTER(_T("FillDriverInfo"));
  113. if (pDriverInfo3==NULL)
  114. {
  115. VERBOSE(SETUP_ERR,_T("called with a NULL pDriverInfo3..."));
  116. return FALSE;
  117. }
  118. if (pEnvironment==NULL)
  119. {
  120. VERBOSE(DBG_MSG,_T("Filling DRIVER_INFO_3 for W2K/XP"));
  121. pDriverInfo3->cVersion = 3;
  122. pDriverInfo3->pName = FAX_DRIVER_NAME;
  123. pDriverInfo3->pEnvironment = NULL;
  124. pDriverInfo3->pDriverPath = FAX_DRV_MODULE_NAME;
  125. pDriverInfo3->pDataFile = FAX_UI_MODULE_NAME;
  126. pDriverInfo3->pConfigFile = FAX_UI_MODULE_NAME;
  127. pDriverInfo3->pDependentFiles = FAX_WZRD_MODULE_NAME TEXT("\0")
  128. FAX_TIFF_MODULE_NAME TEXT("\0")
  129. FAX_RES_FILE TEXT("\0")
  130. FAX_API_MODULE_NAME TEXT("\0");
  131. pDriverInfo3->pMonitorName = NULL;
  132. pDriverInfo3->pHelpFile = NULL;
  133. pDriverInfo3->pDefaultDataType = TEXT("RAW");
  134. }
  135. else if (_tcsicmp(pEnvironment,NT4_PRINT_ENV)==0)
  136. {
  137. VERBOSE(DBG_MSG,_T("Filling DRIVER_INFO_3 for NT4"));
  138. pDriverInfo3->cVersion = 2;
  139. pDriverInfo3->pName = FAX_DRIVER_NAME;
  140. pDriverInfo3->pEnvironment = NT4_PRINT_ENV;
  141. pDriverInfo3->pDriverPath = FAX_NT4_DRV_MODULE_NAME;
  142. pDriverInfo3->pDataFile = FAX_UI_MODULE_NAME;
  143. pDriverInfo3->pConfigFile = FAX_UI_MODULE_NAME;
  144. pDriverInfo3->pDependentFiles = FAX_DRV_DEPEND_FILE TEXT("\0")
  145. FAX_API_MODULE_NAME TEXT("\0")
  146. FAX_NT4_DRV_MODULE_NAME TEXT("\0")
  147. FAX_TIFF_FILE TEXT("\0")
  148. FAX_RES_FILE TEXT("\0")
  149. FAX_UI_MODULE_NAME TEXT("\0");
  150. pDriverInfo3->pMonitorName = NULL;
  151. pDriverInfo3->pHelpFile = NULL;
  152. pDriverInfo3->pDefaultDataType = TEXT("RAW");
  153. }
  154. else if (_tcsicmp(pEnvironment,W9X_PRINT_ENV)==0)
  155. {
  156. VERBOSE(DBG_MSG,_T("Filling DRIVER_INFO_3 for W9X"));
  157. pDriverInfo3->cVersion = 0;
  158. pDriverInfo3->pName = FAX_DRIVER_NAME;
  159. pDriverInfo3->pEnvironment = W9X_PRINT_ENV;
  160. pDriverInfo3->pDriverPath = FAX_DRV_WIN9X_16_MODULE_NAME;
  161. pDriverInfo3->pDataFile = FAX_DRV_WIN9X_16_MODULE_NAME;
  162. pDriverInfo3->pConfigFile = FAX_DRV_WIN9X_16_MODULE_NAME;
  163. pDriverInfo3->pDependentFiles = FAX_DRV_WIN9X_16_MODULE_NAME TEXT("\0")
  164. FAX_DRV_WIN9X_32_MODULE_NAME TEXT("\0")
  165. FAX_WZRD_MODULE_NAME TEXT("\0")
  166. FAX_API_MODULE_NAME TEXT("\0")
  167. FAX_TIFF_FILE TEXT("\0")
  168. FAX_DRV_ICONLIB TEXT("\0")
  169. FAX_RES_FILE TEXT("\0")
  170. FAX_DRV_UNIDRV_MODULE_NAME TEXT("\0");
  171. pDriverInfo3->pMonitorName = NULL;
  172. pDriverInfo3->pHelpFile = FAX_DRV_UNIDRV_HELP;
  173. pDriverInfo3->pDefaultDataType = TEXT("RAW");
  174. }
  175. else
  176. {
  177. VERBOSE(SETUP_ERR,_T("called with a weird pEnv..., do nothing"));
  178. return FALSE;
  179. }
  180. return TRUE;
  181. }