diff --git a/reactos/dll/win32/gdi32/include/gdi32p.h b/reactos/dll/win32/gdi32/include/gdi32p.h index 1f191748335..9656ba5fe6a 100644 --- a/reactos/dll/win32/gdi32/include/gdi32p.h +++ b/reactos/dll/win32/gdi32/include/gdi32p.h @@ -79,6 +79,29 @@ typedef struct tagENHMETAFILE { INT planes; } ENHMETAFILE,*PENHMETAFILE; + +#define PDEV_UMPD_ID 0xFEDCBA98 +// UMPDEV flags +#define UMPDEV_NO_ESCAPE 0x0002 +#define UMPDEV_SUPPORT_ESCAPE 0x0004 +typedef struct _UMPDEV +{ + DWORD Sig; // Init with PDEV_UMPD_ID + struct _UMPDEV *pumpdNext; + PDRIVER_INFO_5W pdi5Info; + HMODULE hModule; + DWORD dwFlags; + DWORD dwDriverAttributes; + DWORD dwConfigVersion; // Number of times the configuration + // file for this driver has been upgraded + // or downgraded since the last spooler restart. + DWORD dwDriverCount; // After init should be 2 + DWORD WOW64_UMPDev; + DWORD WOW64_hMod; + WCHAR String[188]; +} UMPDEV, *PUMPDEV; + + /* FUNCTIONS *****************************************************************/ PVOID diff --git a/reactos/dll/win32/gdi32/objects/eng.c b/reactos/dll/win32/gdi32/objects/eng.c index 11cb5bf5edc..174544fe3ed 100644 --- a/reactos/dll/win32/gdi32/objects/eng.c +++ b/reactos/dll/win32/gdi32/objects/eng.c @@ -154,16 +154,15 @@ LPWSTR STDCALL EngGetDriverName(HDEV hdev) { // DHPDEV from NtGdiGetDhpdev must be from print driver. - PDRIVER_INFO_2W pDrvInfo2 = (PDRIVER_INFO_2W)NtGdiGetDhpdev(hdev); + PUMPDEV pPDev = (PUMPDEV)NtGdiGetDhpdev(hdev); - if (!pDrvInfo2) return NULL; + if (!pPDev) return NULL; - if (pDrvInfo2->cVersion != 0xFEDCBA98 ) // Init mask for ver 2+ + if (pPDev->Sig != PDEV_UMPD_ID) { - PDRIVER_INFO_1W pDrvInfo1 = (PDRIVER_INFO_1W) pDrvInfo2; - return pDrvInfo1->pName; + pPDev = (PUMPDEV)pPDev->Sig; } - return pDrvInfo2->pDriverPath; + return pPDev->pdi5Info->pDriverPath; } /* @@ -172,16 +171,15 @@ EngGetDriverName(HDEV hdev) LPWSTR STDCALL EngGetPrinterDataFileName(HDEV hdev) { - PDRIVER_INFO_2W pDrvInfo2 = (PDRIVER_INFO_2W)NtGdiGetDhpdev(hdev); + PUMPDEV pPDev = (PUMPDEV)NtGdiGetDhpdev(hdev); - if (!pDrvInfo2) return NULL; + if (!pPDev) return NULL; - if (pDrvInfo2->cVersion != 0xFEDCBA98 ) + if (pPDev->Sig != PDEV_UMPD_ID) { - PDRIVER_INFO_1W pDrvInfo1 = (PDRIVER_INFO_1W) pDrvInfo2; - return pDrvInfo1->pName; + pPDev = (PUMPDEV)pPDev->Sig; } - return pDrvInfo2->pDataFile; + return pPDev->pdi5Info->pDataFile; } /* diff --git a/reactos/include/psdk/winspool.h b/reactos/include/psdk/winspool.h index 730683b62e4..4d8192570ad 100644 --- a/reactos/include/psdk/winspool.h +++ b/reactos/include/psdk/winspool.h @@ -374,6 +374,162 @@ typedef struct _DRIVER_INFO_3W { LPWSTR pMonitorName; LPWSTR pDefaultDataType; } DRIVER_INFO_3W,*PDRIVER_INFO_3W,*LPDRIVER_INFO_3W; +typedef struct _DRIVER_INFO_4A { + DWORD cVersion; // SDK examples: + LPSTR pName; // QMS 810 + LPSTR pEnvironment; // Win32 x86 + LPSTR pDriverPath; // c:\drivers\pscript.dll + LPSTR pDataFile; // c:\drivers\QMS810.PPD + LPSTR pConfigFile; // c:\drivers\PSCRPTUI.DLL + LPSTR pHelpFile; // c:\drivers\PSCRPTUI.HLP + LPSTR pDependentFiles; // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0 + LPSTR pMonitorName; // "PJL monitor" + LPSTR pDefaultDataType; // "EMF" + LPSTR pszzPreviousNames; // "OldName1\0OldName2\0\0 +} DRIVER_INFO_4A, *PDRIVER_INFO_4A, *LPDRIVER_INFO_4A; +typedef struct _DRIVER_INFO_4W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + LPWSTR pHelpFile; + LPWSTR pDependentFiles; + LPWSTR pMonitorName; + LPWSTR pDefaultDataType; + LPWSTR pszzPreviousNames; +} DRIVER_INFO_4W, *PDRIVER_INFO_4W, *LPDRIVER_INFO_4W; +typedef struct _DRIVER_INFO_5A { + DWORD cVersion; // SDK examples: + LPSTR pName; // QMS 810 + LPSTR pEnvironment; // Win32 x86 + LPSTR pDriverPath; // c:\drivers\pscript.dll + LPSTR pDataFile; // c:\drivers\QMS810.PPD + LPSTR pConfigFile; // c:\drivers\PSCRPTUI.DLL + DWORD dwDriverAttributes; // driver attributes (like UMPD/KMPD) + DWORD dwConfigVersion; // version number of the config file since reboot + DWORD dwDriverVersion; // version number of the driver file since reboot +} DRIVER_INFO_5A, *PDRIVER_INFO_5A, *LPDRIVER_INFO_5A; +typedef struct _DRIVER_INFO_5W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + DWORD dwDriverAttributes; + DWORD dwConfigVersion; + DWORD dwDriverVersion; +} DRIVER_INFO_5W, *PDRIVER_INFO_5W, *LPDRIVER_INFO_5W; +typedef struct _DRIVER_INFO_6A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; + LPSTR pHelpFile; + LPSTR pDependentFiles; + LPSTR pMonitorName; + LPSTR pDefaultDataType; + LPSTR pszzPreviousNames; + FILETIME ftDriverDate; + DWORDLONG dwlDriverVersion; + LPSTR pszMfgName; + LPSTR pszOEMUrl; + LPSTR pszHardwareID; + LPSTR pszProvider; +} DRIVER_INFO_6A, *PDRIVER_INFO_6A, *LPDRIVER_INFO_6A; +typedef struct _DRIVER_INFO_6W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + LPWSTR pHelpFile; + LPWSTR pDependentFiles; + LPWSTR pMonitorName; + LPWSTR pDefaultDataType; + LPWSTR pszzPreviousNames; + FILETIME ftDriverDate; + DWORDLONG dwlDriverVersion; + LPWSTR pszMfgName; + LPWSTR pszOEMUrl; + LPWSTR pszHardwareID; + LPWSTR pszProvider; +} DRIVER_INFO_6W, *PDRIVER_INFO_6W, *LPDRIVER_INFO_6W; +#define PRINTER_DRIVER_PACKAGE_AWARE 0x00000001 +typedef struct _DRIVER_INFO_8A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; + LPSTR pHelpFile; + LPSTR pDependentFiles; + LPSTR pMonitorName; + LPSTR pDefaultDataType; + LPSTR pszzPreviousNames; + FILETIME ftDriverDate; + DWORDLONG dwlDriverVersion; + LPSTR pszMfgName; + LPSTR pszOEMUrl; + LPSTR pszHardwareID; + LPSTR pszProvider; + LPSTR pszPrintProcessor; + LPSTR pszVendorSetup; + LPSTR pszzColorProfiles; + LPSTR pszInfPath; + DWORD dwPrinterDriverAttributes; + LPSTR pszzCoreDriverDependencies; + FILETIME ftMinInboxDriverVerDate; + DWORDLONG dwlMinInboxDriverVerVersion; +} DRIVER_INFO_8A, *PDRIVER_INFO_8A, *LPDRIVER_INFO_8A; +typedef struct _DRIVER_INFO_8W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + LPWSTR pHelpFile; + LPWSTR pDependentFiles; + LPWSTR pMonitorName; + LPWSTR pDefaultDataType; + LPWSTR pszzPreviousNames; + FILETIME ftDriverDate; + DWORDLONG dwlDriverVersion; + LPWSTR pszMfgName; + LPWSTR pszOEMUrl; + LPWSTR pszHardwareID; + LPWSTR pszProvider; + LPWSTR pszPrintProcessor; + LPWSTR pszVendorSetup; + LPWSTR pszzColorProfiles; + LPWSTR pszInfPath; + DWORD dwPrinterDriverAttributes; + LPWSTR pszzCoreDriverDependencies; + FILETIME ftMinInboxDriverVerDate; + DWORDLONG dwlMinInboxDriverVerVersion; +} DRIVER_INFO_8W, *PDRIVER_INFO_8W, *LPDRIVER_INFO_8W; +// FLAGS for dwDriverAttributes +#define DRIVER_KERNELMODE 0x00000001 +#define DRIVER_USERMODE 0x00000002 +// FLAGS for DeletePrinterDriverEx. +#define DPD_DELETE_UNUSED_FILES 0x00000001 +#define DPD_DELETE_SPECIFIC_VERSION 0x00000002 +#define DPD_DELETE_ALL_FILES 0x00000004 +// FLAGS for AddPrinterDriverEx. +#define APD_STRICT_UPGRADE 0x00000001 +#define APD_STRICT_DOWNGRADE 0x00000002 +#define APD_COPY_ALL_FILES 0x00000004 +#define APD_COPY_NEW_FILES 0x00000008 +#if(_WIN32_WINNT >= 0x0501) + #define APD_COPY_FROM_DIRECTORY 0x00000010 +#endif typedef struct _MONITOR_INFO_1A{LPSTR pName;} MONITOR_INFO_1A,*PMONITOR_INFO_1A,*LPMONITOR_INFO_1A; typedef struct _MONITOR_INFO_1W{LPWSTR pName;} MONITOR_INFO_1W,*PMONITOR_INFO_1W,*LPMONITOR_INFO_1W; typedef struct _PORT_INFO_1A {LPSTR pName;} PORT_INFO_1A,*PPORT_INFO_1A,*LPPORT_INFO_1A; @@ -666,6 +822,10 @@ typedef PORT_INFO_1W PORT_INFO_1,*PPORT_INFO_1,*LPPORT_INFO_1; typedef PORT_INFO_2W PORT_INFO_2,*PPORT_INFO_2,*LPPORT_INFO_2; typedef PORT_INFO_3W PORT_INFO_3,*PPORT_INFO_3,*LPPORT_INFO_3; typedef DRIVER_INFO_2W DRIVER_INFO_2,*PDRIVER_INFO_2,*LPDRIVER_INFO_2; +typedef DRIVER_INFO_4W DRIVER_INFO_4,*PDRIVER_INFO_4,*LPDRIVER_INFO_4; +typedef DRIVER_INFO_5W DRIVER_INFO_5,*PDRIVER_INFO_5,*LPDRIVER_INFO_5; +typedef DRIVER_INFO_6W DRIVER_INFO_6,*PDRIVER_INFO_6,*LPDRIVER_INFO_6; +typedef DRIVER_INFO_8W DRIVER_INFO_8,*PDRIVER_INFO_8,*LPDRIVER_INFO_8; typedef PRINTER_INFO_1W PRINTER_INFO_1,*PPRINTER_INFO_1,*LPPRINTER_INFO_1; typedef PRINTER_INFO_2W PRINTER_INFO_2,*PPRINTER_INFO_2,*LPPRINTER_INFO_2; typedef PRINTER_INFO_4W PRINTER_INFO_4,*PPRINTER_INFO_4,*LPPRINTER_INFO_4; @@ -731,6 +891,10 @@ typedef PORT_INFO_1A PORT_INFO_1,*PPORT_INFO_1,*LPPORT_INFO_1; typedef PORT_INFO_2A PORT_INFO_2,*PPORT_INFO_2,*LPPORT_INFO_2; typedef PORT_INFO_3A PORT_INFO_3,*PPORT_INFO_3,*LPPORT_INFO_3; typedef DRIVER_INFO_2A DRIVER_INFO_2,*PDRIVER_INFO_2,*LPDRIVER_INFO_2; +typedef DRIVER_INFO_4A DRIVER_INFO_4,*PDRIVER_INFO_4,*LPDRIVER_INFO_4; +typedef DRIVER_INFO_5A DRIVER_INFO_5,*PDRIVER_INFO_5,*LPDRIVER_INFO_5; +typedef DRIVER_INFO_6A DRIVER_INFO_6,*PDRIVER_INFO_6,*LPDRIVER_INFO_6; +typedef DRIVER_INFO_8A DRIVER_INFO_8,*PDRIVER_INFO_8,*LPDRIVER_INFO_8; typedef PRINTER_INFO_1A PRINTER_INFO_1,*PPRINTER_INFO_1,*LPPRINTER_INFO_1; typedef PRINTER_INFO_2A PRINTER_INFO_2,*PPRINTER_INFO_2,*LPPRINTER_INFO_2; typedef PRINTER_INFO_4A PRINTER_INFO_4,*PPRINTER_INFO_4,*LPPRINTER_INFO_4; diff --git a/reactos/include/reactos/win32k/ntgdihdl.h b/reactos/include/reactos/win32k/ntgdihdl.h index 0159f7fe6d0..259e67be5c8 100644 --- a/reactos/include/reactos/win32k/ntgdihdl.h +++ b/reactos/include/reactos/win32k/ntgdihdl.h @@ -251,6 +251,8 @@ typedef struct _LDC ABORTPROC pAbortProc; /* AbortProc for Printing */ DWORD CallBackTick; HANDLE hPrinter; /* Local or Remote Printer driver */ + PVOID pUMPDev; + PUMDHPDEV pUMdhpdev; DEVCAPS DevCaps; HBRUSH BrushColor; HPEN PenColor;