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.

275 lines
7.1 KiB

  1. #include "pdev.h"
  2. //////////////////////////////////////////////////////////////////////////
  3. // Function: VDumpOEMDevModeParam
  4. //
  5. // Description: Debug dump of OEM_DEVMODEPARAM structure.
  6. //
  7. //
  8. // Parameters:
  9. //
  10. // pOEMDevModeParam Pointer to an OEM DevMode param structure.
  11. //
  12. //
  13. // Returns: N/A.
  14. //
  15. //
  16. // Comments:
  17. //
  18. //NOTICE-2002/03/25-hiroi-:
  19. // History:
  20. // 02/18/97 APresley Created.
  21. //
  22. //////////////////////////////////////////////////////////////////////////
  23. static void VDumpOEMDevModeParam(POEMDMPARAM pOEMDevModeParam)
  24. {
  25. // Can't dump if pOEMDevModeParam NULL.
  26. if(NULL != pOEMDevModeParam)
  27. {
  28. DBGPRINT(DBG_WARNING,("\r\n\tOEM_DEVMODEPARAM dump:\r\n\r\n"));
  29. DBGPRINT(DBG_WARNING,("\tcbSize = %d.\r\n", pOEMDevModeParam->cbSize));
  30. DBGPRINT(DBG_WARNING,("\thPrinter = %#lx.\r\n", pOEMDevModeParam->hPrinter));
  31. DBGPRINT(DBG_WARNING,("\thModule = %#lx.\r\n", pOEMDevModeParam->hModule));
  32. DBGPRINT(DBG_WARNING,("\tpPublicDMIn = %#lx.\r\n", pOEMDevModeParam->pPublicDMIn));
  33. DBGPRINT(DBG_WARNING,("\tpPublicDMOut = %#lx.\r\n", pOEMDevModeParam->pPublicDMOut));
  34. DBGPRINT(DBG_WARNING,("\tpOEMDMIn = %#lx.\r\n", pOEMDevModeParam->pOEMDMIn));
  35. DBGPRINT(DBG_WARNING,("\tpOEMDMOut = %#lx.\r\n", pOEMDevModeParam->pOEMDMOut));
  36. DBGPRINT(DBG_WARNING,("\tcbBufSize = %d.\r\n", pOEMDevModeParam->cbBufSize));
  37. }
  38. }
  39. //////////////////////////////////////////////////////////////////////////
  40. // Function: BIsValidOEMDevModeParam
  41. //
  42. // Description: Validates OEM_DEVMODEPARAM structure.
  43. //
  44. //
  45. // Parameters:
  46. //
  47. // dwMode calling mode
  48. // pOEMDevModeParam Pointer to a OEMDEVMODEPARAM structure.
  49. //
  50. //
  51. // Returns: TRUE if valid; FALSE otherwise.
  52. //
  53. //
  54. // Comments:
  55. //
  56. //NOTICE-2002/03/25-hiroi-:
  57. // History:
  58. // 02/11/97 APresley Created.
  59. //
  60. //////////////////////////////////////////////////////////////////////////
  61. static BOOL BIsValidOEMDevModeParam(
  62. DWORD dwMode,
  63. POEMDMPARAM pOEMDevModeParam)
  64. {
  65. BOOL bValid = TRUE;
  66. if(NULL == pOEMDevModeParam)
  67. {
  68. return FALSE;
  69. }
  70. if(sizeof(OEMDMPARAM) > pOEMDevModeParam->cbSize)
  71. {
  72. bValid = FALSE;
  73. }
  74. if(NULL == pOEMDevModeParam->hPrinter)
  75. {
  76. bValid = FALSE;
  77. }
  78. if(NULL == pOEMDevModeParam->hModule)
  79. {
  80. bValid = FALSE;
  81. }
  82. if( (0 != pOEMDevModeParam->cbBufSize) &&
  83. (NULL == pOEMDevModeParam->pOEMDMOut)
  84. )
  85. {
  86. bValid = FALSE;
  87. }
  88. if( (OEMDM_MERGE == dwMode) && (NULL == pOEMDevModeParam->pOEMDMIn) )
  89. {
  90. bValid = FALSE;
  91. }
  92. return bValid;
  93. }
  94. //////////////////////////////////////////////////////////////////////////
  95. // Function: BInitOEMExtraData
  96. //
  97. // Description: Initializes OEM Extra data.
  98. //
  99. //
  100. // Parameters:
  101. //
  102. // pOEMExtra Pointer to a OEM Extra data.
  103. //
  104. // dwSize Size of OEM extra data.
  105. //
  106. //
  107. // Returns: TRUE if successful; FALSE otherwise.
  108. //
  109. //
  110. // Comments:
  111. //
  112. //NOTICE-2002/03/25-hiroi-:
  113. // History:
  114. // 02/11/97 APresley Created.
  115. //
  116. //////////////////////////////////////////////////////////////////////////
  117. BOOL BInitOEMExtraData(POEMUD_EXTRADATA pOEMExtra)
  118. {
  119. // Initialize OEM Extra data.
  120. pOEMExtra->dmExtraHdr.dwSize = sizeof(OEMUD_EXTRADATA);
  121. pOEMExtra->dmExtraHdr.dwSignature = OEM_SIGNATURE;
  122. pOEMExtra->dmExtraHdr.dwVersion = OEM_VERSION;
  123. return TRUE;
  124. }
  125. //////////////////////////////////////////////////////////////////////////
  126. // Function: BMergeOEMExtraData
  127. //
  128. // Description: Validates and merges OEM Extra data.
  129. //
  130. //
  131. // Parameters:
  132. //
  133. // pdmIn pointer to an input OEM private devmode containing the settings
  134. // to be validated and merged. Its size is current.
  135. //
  136. // pdmOut pointer to the output OEM private devmode containing the
  137. // default settings.
  138. //
  139. //
  140. // Returns: TRUE if valid; FALSE otherwise.
  141. //
  142. //
  143. // Comments:
  144. //
  145. //NOTICE-2002/03/25-hiroi-:
  146. // History:
  147. // 02/11/97 APresley Created.
  148. // 04/08/97 ZhanW Modified the interface
  149. //
  150. //////////////////////////////////////////////////////////////////////////
  151. BOOL BMergeOEMExtraData(
  152. POEMUD_EXTRADATA pdmIn,
  153. POEMUD_EXTRADATA pdmOut
  154. )
  155. {
  156. if(pdmIn) {
  157. //
  158. // copy over the private fields, if they are valid
  159. //
  160. }
  161. return TRUE;
  162. }
  163. /***************************************************************************
  164. Function Name : OEMGetInfo
  165. Note : Make this. 09/26/97
  166. ***************************************************************************/
  167. BOOL APIENTRY OEMGetInfo(
  168. DWORD dwInfo,
  169. PVOID pBuffer,
  170. DWORD cbSize,
  171. PDWORD pcbNeeded
  172. ){
  173. // Validate parameters.
  174. if( ( (OEMGI_GETSIGNATURE != dwInfo) &&
  175. (OEMGI_GETINTERFACEVERSION != dwInfo) &&
  176. (OEMGI_GETVERSION != dwInfo) ) ||
  177. (NULL == pcbNeeded)
  178. )
  179. {
  180. // Did not write any bytes.
  181. if(NULL != pcbNeeded)
  182. *pcbNeeded = 0;
  183. return FALSE;
  184. }
  185. // Need/wrote 4 bytes.
  186. // wPaperSource + bFirstPage
  187. *pcbNeeded = sizeof(DWORD);
  188. // Validate buffer size. Minimum size is four bytes.
  189. if( (NULL == pBuffer) || (sizeof(DWORD) > cbSize) )
  190. {
  191. return FALSE;
  192. }
  193. // Write information to buffer.
  194. switch(dwInfo)
  195. {
  196. case OEMGI_GETSIGNATURE:
  197. *(LPDWORD)pBuffer = OEM_SIGNATURE;
  198. break;
  199. case OEMGI_GETINTERFACEVERSION:
  200. *(LPDWORD)pBuffer = PRINTER_OEMINTF_VERSION;
  201. break;
  202. case OEMGI_GETVERSION:
  203. *(LPDWORD)pBuffer = OEM_VERSION;
  204. break;
  205. }
  206. return TRUE;
  207. }
  208. /***************************************************************************
  209. Function Name : OEMDevMode
  210. Note : Make this. 09/26/97
  211. ***************************************************************************/
  212. BOOL APIENTRY OEMDevMode(
  213. DWORD dwMode,
  214. POEMDMPARAM pOEMDevModeParam
  215. ){
  216. // Validate parameters.
  217. if(!BIsValidOEMDevModeParam(dwMode, pOEMDevModeParam))
  218. {
  219. return FALSE;
  220. }
  221. // Verify OEM extra data size.
  222. if( (dwMode != OEMDM_SIZE) &&
  223. sizeof(OEMUD_EXTRADATA) > pOEMDevModeParam->cbBufSize )
  224. {
  225. return FALSE;
  226. }
  227. // Handle dwMode.
  228. switch(dwMode)
  229. {
  230. case OEMDM_SIZE:
  231. pOEMDevModeParam->cbBufSize = sizeof(OEMUD_EXTRADATA);
  232. break;
  233. case OEMDM_DEFAULT:
  234. return BInitOEMExtraData((POEMUD_EXTRADATA)pOEMDevModeParam->pOEMDMOut);
  235. case OEMDM_CONVERT:
  236. // nothing to convert for this private devmode. So just initialize it.
  237. return BInitOEMExtraData((POEMUD_EXTRADATA)pOEMDevModeParam->pOEMDMOut);
  238. case OEMDM_MERGE:
  239. if(!BMergeOEMExtraData((POEMUD_EXTRADATA)pOEMDevModeParam->pOEMDMIn,
  240. (POEMUD_EXTRADATA)pOEMDevModeParam->pOEMDMOut) )
  241. {
  242. return FALSE;
  243. }
  244. break;
  245. }
  246. return TRUE;
  247. }