2025-04-27 07:49:33 -04:00

154 lines
3.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1990-1999 Microsoft Corporation
Module Name:
pdevinfo.c
Abstract:
This module contains functions to get / validate the PDEV data structure.
This structure, is initialized by the driver at DrvEnablePDEV time. The
handle (or pointer) to is passed to most of the drivers DrvXXX exported
functions. This is how a driver maintains state, about various items
of interest in the rendering process.
Author:
30-Nov-1993 Tue 20:37:26 created -by- DC
[Environment:]
GDI Device Driver - Plotter.
[Notes:]
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#define DBG_PLOTFILENAME DbgPDEVInfo
#define DBG_VALIDATE_PDEV 0x00000001
DEFINE_DBGVAR(0);
PPDEV
ValidatePDEVFromSurfObj(
SURFOBJ *pso
)
/*++
Routine Description:
This function validates the PDEV to see if it belong to this driver and
checks to see if it is still usable. It also moves the passed SURFOBJ
in the data structure which is needed for the driver to occasionally call
EngCheckAbort, to see if the job has been cancelled.
Arguments:
pPDev - Pointer to the PDEV data structure to be validate
Return Value:
return the passed in PDEV pointer if sucessful, return NULL if failed,
if it return NULL it will also log the INVALID_HANDLE error code
Author:
30-Nov-1993 Tue 20:39:12 created -by- DC
Revision History:
--*/
{
PPDEV pPDev;
pPDev = ((PPDEV)(((SURFOBJ *)pso)->dhpdev));
if (pPDev) {
//
// Look for start marker, size of the data structure, and end marker.
//
if (pPDev->PDEVBegID == PDEV_BEG_ID) {
if (pPDev->SizePDEV == sizeof(PDEV)) {
if (pPDev->PDEVEndID == PDEV_END_ID) {
//
// Okay its valid so record the surfobj so we can call
// EngCheckAbort() in our output functions
//
pPDev->pso = pso;
//
// Check to see if the app or the spooler has canceled
// the job, if it has set our cancel bit and fail this
// call.
//
if (EngCheckAbort(pso)) {
pPDev->Flags |= PDEVF_CANCEL_JOB;
PLOTDBG(DBG_VALIDATE_PDEV,
("ValidatePDEV: EngCheckAbort returns TRUE"));
return(NULL);
}
return(pPDev);
} else {
PLOTRIP(("ValidatePDEV: Invalid PDEV End ID (%08lx)",
pPDev->PDEVEndID));
}
} else {
PLOTRIP(("ValidatePDEV: Invalid PDEV size (%ld)",
pPDev->SizePDEV));
}
} else {
PLOTRIP(("ValidatePDEV: Invalid PDEV Begin ID (%08lx)",
pPDev->PDEVBegID));
}
} else {
PLOTRIP(("ValidatePDEV: NULL pPDev"));
}
SetLastError(ERROR_INVALID_HANDLE);
return(NULL);
}