2 * PROJECT: ReactOS win32 kernel mode subsystem
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: subsystems/win32/win32k/objects/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
);
88 SURFACE
*psurf
= dc
->dclevel
.pSurface
;
91 if (!dc
->ppdev
->DriverFunctions
.Escape
|| !psurf
)
97 Result
= dc
->ppdev
->DriverFunctions
.Escape(
113 IN OPTIONAL PWCHAR pDriver
,
117 OPTIONAL LPSTR UnsafeInData
,
119 OPTIONAL LPSTR UnsafeOutData
)
122 LPVOID SafeInData
= NULL
;
123 LPVOID SafeOutData
= NULL
;
124 NTSTATUS Status
= STATUS_SUCCESS
;
129 hDC
= UserGetWindowDC(NULL
);
132 pDC
= DC_LockDc(hDC
);
135 EngSetLastError(ERROR_INVALID_HANDLE
);
138 if ( pDC
->dctype
== DC_TYPE_INFO
)
144 if ( InSize
&& UnsafeInData
)
148 ProbeForRead(UnsafeInData
,
152 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
154 Status
= _SEH2_GetExceptionCode();
158 if (!NT_SUCCESS(Status
))
161 SetLastNtError(Status
);
165 SafeInData
= ExAllocatePoolWithTag ( PagedPool
, InSize
, GDITAG_TEMP
);
169 EngSetLastError(ERROR_NOT_ENOUGH_MEMORY
);
175 /* Pointers were already probed! */
176 RtlCopyMemory(SafeInData
,
180 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
182 Status
= _SEH2_GetExceptionCode();
186 if ( !NT_SUCCESS(Status
) )
188 ExFreePoolWithTag ( SafeInData
, GDITAG_TEMP
);
190 SetLastNtError(Status
);
195 if ( OutSize
&& UnsafeOutData
)
199 ProbeForWrite(UnsafeOutData
,
203 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
205 Status
= _SEH2_GetExceptionCode();
209 if (!NT_SUCCESS(Status
))
211 SetLastNtError(Status
);
215 SafeOutData
= ExAllocatePoolWithTag ( PagedPool
, OutSize
, GDITAG_TEMP
);
218 EngSetLastError(ERROR_NOT_ENOUGH_MEMORY
);
221 ExFreePoolWithTag ( SafeInData
, GDITAG_TEMP
);
227 Result
= IntGdiExtEscape ( pDC
, Escape
, InSize
, SafeInData
, OutSize
, SafeOutData
);
232 ExFreePoolWithTag ( SafeInData
,GDITAG_TEMP
);
238 /* Pointers were already probed! */
239 RtlCopyMemory(UnsafeOutData
,
243 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
245 Status
= _SEH2_GetExceptionCode();
249 ExFreePoolWithTag ( SafeOutData
, GDITAG_TEMP
);
250 if ( !NT_SUCCESS(Status
) )
252 SetLastNtError(Status
);
274 NtGdiStartPage(HDC hDC
)