struttura UNIDRV_PRIVATE_DEVMODE (printoem.h)
La struttura UNIDRV_PRIVATE_DEVMODE consente ai plug-in Unidrv di determinare le dimensioni della parte privata della struttura DEVMODEW di Unidrv.
Sintassi
typedef struct _UNIDRV_PRIVATE_DEVMODE {
WORD wReserved[4];
WORD wSize;
} UNIDRV_PRIVATE_DEVMODE, *PUNIDRV_PRIVATE_DEVMODE;
Members
wReserved[4]
Riservato per l'utilizzo nel sistema.
wSize
Dimensioni, in byte, della parte privata della struttura DEVMODEW di Unidrv .
Commenti
Per informazioni sulle sezioni pubbliche e private della struttura DEVMODEW, vedere DEVMODEW.
Printoem.h definisce una macro per determinare le dimensioni della parte privata della struttura DEVMODEW di Unidrv .
#define GET_UNIDRV_PRIVATE_DEVMODE_SIZE(pdm)\
( ( (pdm)->dmDriverExtra > (FIELD_OFFSET(UNIDRV_PRIVATE_DEVMODE, wSize) + sizeof(WORD)) ) ? \
((PUNIDRV_PRIVATE_DEVMODE)((PBYTE)(pdm) + (pdm)-> dmSize)) -> wSize : 0 )
L'argomento pdm nella macro GET_UNIDRV_PRIVATE_DEVMODE_SIZE è un puntatore a una struttura DEVMODEW . La macro determina se il valore del membro dmDriverExtra della struttura DEVMODEW è maggiore dell'offset di byte del membro wSize della struttura UNIDRV_PRIVATE_DEVMODE. In tal caso, la macro restituisce il valore del membro wSize nella struttura UNIDRV_PRIVATE_DEVMODE. In caso contrario, la macro restituisce zero.
Per determinare in modo sicuro l'indirizzo della parte privata della struttura DEVMODEW del plug-in, eseguire le operazioni seguenti:
Chiamare la macro GET_UNIDRV_PRIVATE_DEVMODE_SIZE , passando l'indirizzo della struttura DEVMODEW nella chiamata.
Verificare che (pdm)->dmDriverExtra sia maggiore del valore restituito dalla macro. La macro restituisce il valore del membro wSize della struttura UNIDRV_PRIVATE_DEVMODE .
Determinare l'indirizzo della parte privata della struttura DEVMODEW del plug-in come indicato di seguito.
pdmPlugin = (PBYTE)(pdm) + (pdm)->dmSize + wSize;
L'esempio precedente inizia con l'indirizzo della struttura DEVMODEW pubblica (pdm), aggiunge il numero di byte di questa struttura (pdm-dmSize>), quindi aggiunge le dimensioni in byte della struttura DEVMODEW privata Unidrv (wSize). I dati DI DEVMODEW privati di un plug-in iniziano a questo indirizzo di memoria. Se sono presenti più plug-in concatenati, l'indirizzo restituito da questo esempio è quello dei primi dati DEVMODEW privati del plug-in. I dati DI DEVMODEW privati del secondo plug-in seguono i primi dati DEVMODEW privati del plug-in, i dati DEVMODEW privati del terzo plug-in seguono quello dei dati DEVMODEW privati del secondo plug-in e così via. Uno sviluppatore di plug-in che deve determinare l'indirizzo dei dati DEVMODEW privati del plug-in n-1 deve conoscere le dimensioni dei dati DEVMODEW privati per i primi plug-in n - 1.
Verificare che la parte privata della struttura DEVMODEW del plug-in inizi con una struttura di OEM_DMEXTRAHEADER valida.
Requisiti
Requisito | Valore |
---|---|
Intestazione | printoem.h (include Printoem.h) |