Plug-Ins di rendering non basato su COM

Importante

È consigliabile usare il driver della classe posta in arrivo IPP di Microsoft, insieme a Print Support Apps (PSA), per personalizzare l'esperienza di stampa in Windows 10 e 11 per lo sviluppo di dispositivi della stampante.

Per altre informazioni, vedere la guida alla progettazione dell'app di supporto per la stampa.

Un minidriver della stampante invia una notifica al driver principale delle relative funzionalità implementando la funzione OEMEnableDriver , che inserisce i membri di una struttura DRVENABLEDATA . Il membro pdrvfn di questa struttura deve essere impostato con l'indirizzo della matrice delle strutture DRVFN . Ogni elemento di questa matrice deve essere inizializzato con un indice di funzione e l'indirizzo di una delle funzioni OEM Xxx che l'IHV implementa, rispettivamente. Per descrizioni dettagliate di ognuna delle funzioni OEMXxx , vedere Funzioni DDI non basate su COM Hook-Out.

Quando un'applicazione chiama Microsoft Win32 GDI per eseguire un'attività di rendering, Win32 GDI a sua volta chiama il driver di base Unidrv o Pscript5, che in genere gestisce l'attività. Tuttavia, se un minidriver della stampante ha indicato che è in grado di associare un'operazione di rendering specifica, il driver principale passa l'attività di rendering al plug-in di rendering IHV.

Si consideri ad esempio un'applicazione che effettua una chiamata all'API LineTo Win32 (descritta nella documentazione di Windows SDK). In genere, ciò comporterebbe un'altra chiamata al drvLineTo DDI del driver principale per disegnare la linea. Se il minidriver della stampante ha indicato che intende associare le chiamate a questo DDI, tuttavia , DrvLineTo inoltra immediatamente la chiamata alla funzione OEMLineTo di IHV.

Un IHV può implementare OEMLineTo o una qualsiasi delle altre funzioni di hook-out descritte in Funzioni DDI non basate su COM Hook-Out, in modo che possa gestire completamente l'operazione di rendering oppure può richiamare di nuovo per fare in modo che il driver principale gestisca tale operazione.

OEMLineTo può essere implementato come illustrato nell'esempio pseudocodice seguente:

BOOL APIENTRY
  OEMLineTo(
    SURFOBJ  *pso,
    CLIPOBJ  *pco,
    BRUSHOBJ  *pbo,
    LONG  x1,
    LONG  y1,
    LONG  x2,
    LONG  y2,
    RECTL  *prclBounds,
    MIX  mix
)
{
if ( OEM intends to handle the call ) {
 code to handle the call
}
else
// OEM calls Unidrv's DrvLineTo DDI
  bRetVal = (((PFN_DrvLineTo)(poempdev->pfnUnidrv[UD_DrvLineTo])) (
 pso,
            pco,
            pbo,
            x1,
            x2,
 y1,
            y2,
            prclBounds,
            mix,));
}

Nell'esempio precedente, l'espressione

poempdev->pfnUnidrv[UD_DrvLineTo]

restituisce l'indirizzo dell'oggetto DDI DrvLineTo del driver principale. Espressione (PFN_DrvLineTo) che precede il cast del puntatore della funzione al tipo appropriato. Ognuna delle funzioni hook-out elencate in questa sezione è associata al proprio puntatore a funzione.

Si noti che quando un OEMXxx DDI richiama il driver core Unidrv e la superficie interessata è una superficie gestita dal dispositivo, Unidrv può semplicemente ignorare la chiamata restituendo FALSE.