2 * PROJECT: ReactOS win32 kernel mode subsystem
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: win32ss/gdi/ntgdi/print.c
5 * PURPOSE: Print functions
16 NtGdiAbortDoc(HDC hDC
)
46 if (Escape
== QUERYESCSUPPORT
)
67 EngSetLastError(ERROR_INVALID_HANDLE
);
71 /* TODO: FIXME: Don't pass umode buffer to an Int function */
72 ret
= IntGdiEscape(dc
, Escape
, InSize
, InData
, OutData
);
91 if ((dc
->ppdev
->DriverFunctions
.Escape
== NULL
) ||
92 (dc
->dclevel
.pSurface
== NULL
))
98 DC_vPrepareDCsForBlit(dc
, NULL
, NULL
, NULL
);
99 psurf
= dc
->dclevel
.pSurface
;
101 Result
= dc
->ppdev
->DriverFunctions
.Escape(
109 DC_vFinishBlit(dc
, NULL
);
119 IN OPTIONAL PWCHAR pDriver
,
123 OPTIONAL LPSTR UnsafeInData
,
125 OPTIONAL LPSTR UnsafeOutData
)
128 LPVOID SafeInData
= NULL
;
129 LPVOID SafeOutData
= NULL
;
130 NTSTATUS Status
= STATUS_SUCCESS
;
135 hDC
= UserGetWindowDC(NULL
);
138 pDC
= DC_LockDc(hDC
);
141 EngSetLastError(ERROR_INVALID_HANDLE
);
144 if ( pDC
->dctype
== DC_TYPE_INFO
)
150 if ( InSize
&& UnsafeInData
)
154 ProbeForRead(UnsafeInData
,
158 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
160 Status
= _SEH2_GetExceptionCode();
164 if (!NT_SUCCESS(Status
))
167 SetLastNtError(Status
);
171 SafeInData
= ExAllocatePoolWithTag ( PagedPool
, InSize
, GDITAG_TEMP
);
175 EngSetLastError(ERROR_NOT_ENOUGH_MEMORY
);
181 /* Pointers were already probed! */
182 RtlCopyMemory(SafeInData
,
186 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
188 Status
= _SEH2_GetExceptionCode();
192 if ( !NT_SUCCESS(Status
) )
194 ExFreePoolWithTag ( SafeInData
, GDITAG_TEMP
);
196 SetLastNtError(Status
);
201 if ( OutSize
&& UnsafeOutData
)
205 ProbeForWrite(UnsafeOutData
,
209 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
211 Status
= _SEH2_GetExceptionCode();
215 if (!NT_SUCCESS(Status
))
217 SetLastNtError(Status
);
221 SafeOutData
= ExAllocatePoolWithTag ( PagedPool
, OutSize
, GDITAG_TEMP
);
224 EngSetLastError(ERROR_NOT_ENOUGH_MEMORY
);
227 ExFreePoolWithTag ( SafeInData
, GDITAG_TEMP
);
233 Result
= IntGdiExtEscape ( pDC
, Escape
, InSize
, SafeInData
, OutSize
, SafeOutData
);
238 ExFreePoolWithTag ( SafeInData
,GDITAG_TEMP
);
244 /* Pointers were already probed! */
245 RtlCopyMemory(UnsafeOutData
,
249 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
251 Status
= _SEH2_GetExceptionCode();
255 ExFreePoolWithTag ( SafeOutData
, GDITAG_TEMP
);
256 if ( !NT_SUCCESS(Status
) )
258 SetLastNtError(Status
);
280 NtGdiStartPage(HDC hDC
)