/*++ ******************************************************************* C o n t r o l P r i n t P r o c e s s o r Routine Description: Handles commands to pause, resume, and cancel print jobs. Arguments: hPrintProcessor = HANDLE to the PrintProcessor the command is issued for. Return Value: TRUE if command succeeded FALSE if command failed (invalid command) ******************************************************************* --*/ _Use_decl_annotations_ BOOL ControlPrintProcessor( HANDLE hPrintProcessor, DWORD Command ) { PPRINTPROCESSORDATA pData; /** Make sure the handle is valid and pick up the Print Processors data area. **/ if ((pData = ValidateHandle(hPrintProcessor)) != NULL) { switch (Command) { case JOB_CONTROL_PAUSE: ResetEvent(pData->semPaused); pData->fsStatus |= PRINTPROCESSOR_PAUSED; return TRUE; break; case JOB_CONTROL_CANCEL: pData->fsStatus |= PRINTPROCESSOR_ABORTED; if ((pData->uDatatype == PRINTPROCESSOR_TYPE_EMF_50_1) || (pData->uDatatype == PRINTPROCESSOR_TYPE_EMF_50_2) || (pData->uDatatype == PRINTPROCESSOR_TYPE_EMF_50_3)) CancelDC(pData->hDC); /* Fall through to release job if paused */ case JOB_CONTROL_RESUME: if (pData->fsStatus & PRINTPROCESSOR_PAUSED) { SetEvent(pData->semPaused); pData->fsStatus &= ~PRINTPROCESSOR_PAUSED; } return TRUE; break; default: return FALSE; break; } } return FALSE; }
VOID GdiSAPCallback(PLDC pldc) { DWORD Time, NewTime = GetTickCount(); Time = NewTime - pldc->CallBackTick; if ( Time < SAPCALLBACKDELAY) return; pldc->CallBackTick = NewTime; if ( !pldc->pAbortProc(pldc->hDC, 0) ) { CancelDC(pldc->hDC); AbortDoc(pldc->hDC); } }