This example shows how to call DevPostDeviceModes and allocate a new buffer, if necessary, for the larger job properties (DRIVDATA structure).
#define INCL_DEV #define INCL_DOS #include <os2.h> #include <memory.h> { ULONG devrc=FALSE; HAB hab; PSZ pszPrinter; HDC hdc=NULL; PDRIVDATA pOldDrivData; PDRIVDATA pNewDrivData=NULL; PDEVOPENSTRUC dops; LONG buflen; /* check size of buffer required for job properties */ buflen = DevPostDeviceModes( hab, NULL, dops->pszDriverName, dops->pdriv->szDeviceName, pszPrinter, DPDM_POSTJOBPROP ); /* return error to caller */ if (buflen<=0) return(buflen); /* allocate some memory for larger job properties and */ /* return error to caller */ if (buflen != dops->pdriv->cb) { if (DosAllocMem((PPVOID)&pNewDrivData,buflen,fALLOC)) return(DPDM_ERROR); } /* copy over old data so driver can use old job */ /* properties as base for job properties dialog */ pOldDrivData = dops->pdriv; dops->pdriv = pNewDrivData; memcpy( (PSZ)pNewDrivData, (PSZ)pOldDrivData, pOldDrivData->cb ); /* display job properties dialog and get updated */ /* job properties from driver */ devrc = DevPostDeviceModes( hab, dops->pdriv, dops->pszDriverName, dops->pdriv->szDeviceName, pszPrinter, DPDM_POSTJOBPROP ); return(devrc); }