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
);
145 if ( InSize
&& UnsafeInData
)
149 ProbeForRead(UnsafeInData
,
153 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
155 Status
= _SEH2_GetExceptionCode();
159 if (!NT_SUCCESS(Status
))
162 SetLastNtError(Status
);
166 SafeInData
= ExAllocatePoolWithTag ( PagedPool
, InSize
, GDITAG_TEMP
);
170 EngSetLastError(ERROR_NOT_ENOUGH_MEMORY
);
176 /* Pointers were already probed! */
177 RtlCopyMemory(SafeInData
,
181 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
183 Status
= _SEH2_GetExceptionCode();
187 if ( !NT_SUCCESS(Status
) )
189 ExFreePoolWithTag ( SafeInData
, GDITAG_TEMP
);
191 SetLastNtError(Status
);
196 if ( OutSize
&& UnsafeOutData
)
200 ProbeForWrite(UnsafeOutData
,
204 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
206 Status
= _SEH2_GetExceptionCode();
210 if (!NT_SUCCESS(Status
))
212 SetLastNtError(Status
);
216 SafeOutData
= ExAllocatePoolWithTag ( PagedPool
, OutSize
, GDITAG_TEMP
);
219 EngSetLastError(ERROR_NOT_ENOUGH_MEMORY
);
222 ExFreePoolWithTag ( SafeInData
, GDITAG_TEMP
);
228 Result
= IntGdiExtEscape ( pDC
, Escape
, InSize
, SafeInData
, OutSize
, SafeOutData
);
233 ExFreePoolWithTag ( SafeInData
,GDITAG_TEMP
);
239 /* Pointers were already probed! */
240 RtlCopyMemory(UnsafeOutData
,
244 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
246 Status
= _SEH2_GetExceptionCode();
250 ExFreePoolWithTag ( SafeOutData
, GDITAG_TEMP
);
251 if ( !NT_SUCCESS(Status
) )
253 SetLastNtError(Status
);
275 NtGdiStartPage(HDC hDC
)