ReactOS 0.4.16-dev-1170-ge326b06
text.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS win32 kernel mode subsystem
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: win32ss/gdi/ntgdi/text.c
5 * PURPOSE: Text/Font
6 * PROGRAMMER:
7 */
8
11#include <win32k.h>
12
13#define NDEBUG
14#include <debug.h>
15
16/*
17 This is a hack. See CORE-1091.
18
19 It is needed because ReactOS does not support raster fonts now.
20 After Raster Font support is added, then it can be removed.
21 Find the current font's logfont for testing its lf.lfFaceName.
22
23 The ftGdiGetTextMetricsW function currently in ReactOS will always return a Truetype font
24 because we cannot yet handle raster fonts. So it will return flags
25 TMPF_VECTOR and TMPF_TRUETYPE, which can cause problems in edit boxes.
26 */
27
30 _In_ HDC hDC,
32{
33 LOGFONTW lf;
34 HFONT hCurrentFont;
35
37 GreGetObject(hCurrentFont, sizeof(LOGFONTW), &lf);
38
39 /* To compensate for the GetTextMetricsW call changing the PitchAndFamily
40 * to a TrueType one when we have a 'Raster' font as our input we filter
41 * out the problematic TrueType and Vector bits.
42 * Our list below checks for Raster Font Facenames. */
43 DPRINT("Font Facename is '%S'.\n", lf.lfFaceName);
44 if ((_wcsicmp(lf.lfFaceName, L"Courier") == 0) ||
45 (_wcsicmp(lf.lfFaceName, L"FixedSys") == 0) ||
46 (_wcsicmp(lf.lfFaceName, L"Helv") == 0) ||
47 (_wcsicmp(lf.lfFaceName, L"MS Sans Serif") == 0) ||
48 (_wcsicmp(lf.lfFaceName, L"MS Serif") == 0) ||
49 (_wcsicmp(lf.lfFaceName, L"System") == 0) ||
50 (_wcsicmp(lf.lfFaceName, L"Terminal") == 0) ||
51 (_wcsicmp(lf.lfFaceName, L"Tms Rmn") == 0))
52 {
53 ptm->TextMetric.tmPitchAndFamily &= ~(TMPF_TRUETYPE | TMPF_VECTOR);
54 }
55}
56
61 _In_ HDC hdc,
62 _In_ INT nXStart,
63 _In_ INT nYStart,
64 _In_reads_(cchString) PCWCH lpString,
65 _In_ INT cchString)
66{
67 return GreExtTextOutW(hdc, nXStart, nYStart, 0, NULL, lpString, cchString, NULL, 0);
68}
69
70/*
71 flOpts :
72 GetTextExtentPoint32W = 0
73 GetTextExtentPointW = 1
74 */
75BOOL
78 _In_ HDC hDC,
79 _In_reads_(cwc) PCWCH lpwsz,
80 _In_ INT cwc,
82 _In_ UINT flOpts)
83{
84 PDC pdc;
85 PDC_ATTR pdcattr;
87 PTEXTOBJ TextObj;
88
89 if (!cwc)
90 {
91 psize->cx = 0;
92 psize->cy = 0;
93 return TRUE;
94 }
95
96 pdc = DC_LockDc(hDC);
97 if (!pdc)
98 {
100 return FALSE;
101 }
102
103 pdcattr = pdc->pdcattr;
104
105 TextObj = RealizeFontInit(pdcattr->hlfntNew);
106 if ( TextObj )
107 {
109 TextObj,
110 lpwsz,
111 cwc,
112 0,
113 NULL,
114 0,
115 psize,
116 flOpts);
117 TEXTOBJ_UnlockText(TextObj);
118 }
119 else
120 Result = FALSE;
121
122 DC_UnlockDc(pdc);
123 return Result;
124}
125
126/*
127 fl :
128 GetTextExtentExPointW = 0 and everything else that uses this.
129 GetTextExtentExPointI = 1
130 */
131BOOL
134 _In_ HDC hDC,
137 _In_ ULONG MaxExtent,
138 _Out_opt_ PULONG Fit,
140 _Out_ PSIZE pSize,
141 _In_ FLONG fl)
142{
143 PDC pdc;
144 PDC_ATTR pdcattr;
145 BOOL Result;
146 PTEXTOBJ TextObj;
147
148 if ( (!String && Count ) || !pSize )
149 {
151 return FALSE;
152 }
153
154 if ( !Count )
155 {
156 if ( Fit ) Fit = 0;
157 return TRUE;
158 }
159
160 pdc = DC_LockDc(hDC);
161 if (NULL == pdc)
162 {
164 return FALSE;
165 }
166 pdcattr = pdc->pdcattr;
167
168 TextObj = RealizeFontInit(pdcattr->hlfntNew);
169 if ( TextObj )
170 {
172 TextObj,
173 String,
174 Count,
175 MaxExtent,
176 (PINT)Fit,
177 (PINT)Dx,
178 pSize,
179 fl);
180 TEXTOBJ_UnlockText(TextObj);
181 }
182 else
183 Result = FALSE;
184
185 DC_UnlockDc(pdc);
186 return Result;
187}
188
189BOOL
190WINAPI
192 _In_ HDC hdc,
194{
195 TMW_INTERNAL tmwi;
196 if (!ftGdiGetTextMetricsW(hdc, &tmwi)) return FALSE;
197 IntTMWFixUp(hdc, &tmwi);
198 *lptm = tmwi.TextMetric;
199 return TRUE;
200}
201
202DWORD
205{
206 PDC Dc;
207 PDC_ATTR pdcattr;
208 DWORD cscp;
209 // If here, update everything!
210 Dc = DC_LockDc(hDC);
211 if (!Dc)
212 {
214 return 0;
215 }
216 cscp = ftGdiGetTextCharsetInfo(Dc, NULL, 0);
217 pdcattr = Dc->pdcattr;
218 pdcattr->iCS_CP = cscp;
219 pdcattr->ulDirty_ &= ~DIRTY_CHARSET;
220 DC_UnlockDc( Dc );
221 return cscp;
222}
223
224BOOL
227 _Out_ LPRASTERIZER_STATUS praststat,
228 _In_ ULONG cjBytes)
229{
231 RASTERIZER_STATUS rsSafe;
232
233 if (praststat && cjBytes)
234 {
235 if ( cjBytes >= sizeof(RASTERIZER_STATUS) ) cjBytes = sizeof(RASTERIZER_STATUS);
236 if ( ftGdiGetRasterizerCaps(&rsSafe))
237 {
239 {
240 ProbeForWrite( praststat,
241 sizeof(RASTERIZER_STATUS),
242 1);
243 RtlCopyMemory(praststat, &rsSafe, cjBytes );
244 }
246 {
248 }
249 _SEH2_END;
250
251 if (!NT_SUCCESS(Status))
252 {
254 return FALSE;
255 }
256
257 return TRUE;
258 }
259 }
260 return FALSE;
261}
262
263INT
266 _In_ HDC hdc,
269{
270 PDC Dc;
271 INT Ret;
272 FONTSIGNATURE fsSafe;
273 PFONTSIGNATURE pfsSafe = &fsSafe;
275
276 Dc = DC_LockDc(hdc);
277 if (!Dc)
278 {
280 return DEFAULT_CHARSET;
281 }
282
283 if (!lpSig) pfsSafe = NULL;
284
285 Ret = HIWORD(ftGdiGetTextCharsetInfo( Dc, pfsSafe, dwFlags));
286
287 if (lpSig)
288 {
289 if (Ret == DEFAULT_CHARSET)
290 RtlZeroMemory(pfsSafe, sizeof(FONTSIGNATURE));
291
293 {
294 ProbeForWrite( lpSig,
295 sizeof(FONTSIGNATURE),
296 1);
297 RtlCopyMemory(lpSig, pfsSafe, sizeof(FONTSIGNATURE));
298 }
300 {
302 }
303 _SEH2_END;
304
305 if (!NT_SUCCESS(Status))
306 {
308 return DEFAULT_CHARSET;
309 }
310 }
311 DC_UnlockDc(Dc);
312 return Ret;
313}
314
315
316/*
317 fl :
318 GetTextExtentExPointW = 0 and everything else that uses this.
319 GetTextExtentExPointI = 1
320 */
322BOOL
325 _In_ HDC hDC,
326 _In_reads_opt_(Count) PCWCH UnsafeString,
328 _In_ ULONG MaxExtent,
329 _Out_opt_ PULONG UnsafeFit,
330 _Out_writes_to_opt_(Count, *UnsafeFit) PULONG UnsafeDx,
331 _Out_ PSIZE UnsafeSize,
332 _In_ FLONG fl)
333{
334 PDC dc;
335 PDC_ATTR pdcattr;
337 SIZE Size;
340 INT Fit;
341 PINT Dx;
342 PTEXTOBJ TextObj;
343
344 if ((LONG)Count < 0)
345 {
347 return FALSE;
348 }
349
350 /* FIXME: Handle fl */
351
352 if (0 == Count)
353 {
354 Size.cx = 0;
355 Size.cy = 0;
356 Status = MmCopyToCaller(UnsafeSize, &Size, sizeof(SIZE));
357 if (! NT_SUCCESS(Status))
358 {
360 return FALSE;
361 }
362 return TRUE;
363 }
364
366 if (NULL == String)
367 {
369 return FALSE;
370 }
371
372 if (NULL != UnsafeDx)
373 {
375 if (NULL == Dx)
376 {
379 return FALSE;
380 }
381 }
382 else
383 {
384 Dx = NULL;
385 }
386
387 Status = MmCopyFromCaller(String, UnsafeString, Count * sizeof(WCHAR));
388 if (! NT_SUCCESS(Status))
389 {
390 if (NULL != Dx)
391 {
393 }
396 return FALSE;
397 }
398
399 dc = DC_LockDc(hDC);
400 if (NULL == dc)
401 {
402 if (NULL != Dx)
403 {
405 }
408 return FALSE;
409 }
410 pdcattr = dc->pdcattr;
411 TextObj = RealizeFontInit(pdcattr->hlfntNew);
412 if ( TextObj )
413 {
415 TextObj,
416 String,
417 Count,
418 MaxExtent,
419 NULL == UnsafeFit ? NULL : &Fit,
420 Dx,
421 &Size,
422 fl);
423 TEXTOBJ_UnlockText(TextObj);
424 }
425 else
426 Result = FALSE;
428
430 if (! Result)
431 {
432 if (NULL != Dx)
433 {
435 }
436 return FALSE;
437 }
438
439 if (NULL != UnsafeFit)
440 {
441 Status = MmCopyToCaller(UnsafeFit, &Fit, sizeof(INT));
442 if (! NT_SUCCESS(Status))
443 {
444 if (NULL != Dx)
445 {
447 }
449 return FALSE;
450 }
451 }
452
453 if (NULL != UnsafeDx)
454 {
455 Status = MmCopyToCaller(UnsafeDx, Dx, Count * sizeof(INT));
456 if (! NT_SUCCESS(Status))
457 {
458 if (NULL != Dx)
459 {
461 }
463 return FALSE;
464 }
465 }
466 if (NULL != Dx)
467 {
469 }
470
471 Status = MmCopyToCaller(UnsafeSize, &Size, sizeof(SIZE));
472 if (! NT_SUCCESS(Status))
473 {
475 return FALSE;
476 }
477
478 return TRUE;
479}
480
481
482/*
483 flOpts :
484 GetTextExtentPoint32W = 0
485 GetTextExtentPointW = 1
486 */
487BOOL
490 _In_ HDC hdc,
491 _In_reads_(cwc) PCWCH lpwsz,
492 _In_ INT cwc,
494 _In_ UINT flOpts)
495{
496 return NtGdiGetTextExtentExW(hdc, lpwsz, cwc, 0, NULL, NULL, psize, flOpts);
497}
498
499BOOL
502 _In_ HDC hDC,
503 _In_ INT BreakExtra,
504 _In_ INT BreakCount)
505{
506 PDC pDc;
507 PDC_ATTR pdcattr;
508
509 pDc = DC_LockDc(hDC);
510 if (!pDc)
511 {
513 return FALSE;
514 }
515
516 pdcattr = pDc->pdcattr;
517
518 pdcattr->lBreakExtra = BreakExtra;
519 pdcattr->cBreak = BreakCount;
520
521 DC_UnlockDc(pDc);
522 return TRUE;
523}
524
525
527INT
530 _In_ HDC hDC,
531 _In_ INT Count,
532 _Out_writes_to_opt_(Count, return) PWSTR FaceName,
533 _In_ BOOL bAliasName)
534{
535 PDC Dc;
536 PDC_ATTR pdcattr;
537 HFONT hFont;
538 PTEXTOBJ TextObj;
540 SIZE_T fLen;
541 INT ret;
542
543 /* FIXME: Handle bAliasName */
544
545 Dc = DC_LockDc(hDC);
546 if (Dc == NULL)
547 {
549 return FALSE;
550 }
551 pdcattr = Dc->pdcattr;
552 hFont = pdcattr->hlfntNew;
553 DC_UnlockDc(Dc);
554
555 TextObj = RealizeFontInit(hFont);
556 ASSERT(TextObj != NULL);
557 fLen = wcslen(TextObj->TextFace) + 1;
558
559 if (FaceName != NULL)
560 {
561 Count = min(Count, fLen);
562 Status = MmCopyToCaller(FaceName, TextObj->TextFace, Count * sizeof(WCHAR));
563 if (!NT_SUCCESS(Status))
564 {
565 TEXTOBJ_UnlockText(TextObj);
567 return 0;
568 }
569 /* Terminate if we copied only part of the font name */
570 if (Count > 0 && Count < fLen)
571 {
572 FaceName[Count - 1] = '\0';
573 }
574 ret = Count;
575 }
576 else
577 {
578 ret = fLen;
579 }
580
581 TEXTOBJ_UnlockText(TextObj);
582 return ret;
583}
584
586BOOL
589 _In_ HDC hDC,
590 _Out_ PTMW_INTERNAL pUnsafeTmwi,
591 _In_ ULONG cj)
592{
593 TMW_INTERNAL Tmwi;
594
595 if ( cj <= sizeof(TMW_INTERNAL) )
596 {
597 if (ftGdiGetTextMetricsW(hDC, &Tmwi))
598 {
599 IntTMWFixUp(hDC, &Tmwi);
601 {
602 ProbeForWrite(pUnsafeTmwi, cj, 1);
603 RtlCopyMemory(pUnsafeTmwi, &Tmwi, cj);
604 }
606 {
608 _SEH2_YIELD(return FALSE);
609 }
611
612 return TRUE;
613 }
614 }
615 return FALSE;
616}
617
618/* EOF */
static HDC hDC
Definition: 3dtext.c:33
unsigned char BOOLEAN
LONG NTSTATUS
Definition: precomp.h:26
HFONT hFont
Definition: main.c:53
HDC dc
Definition: cylfrac.c:34
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
Definition: dc.h:238
FORCEINLINE PDC DC_LockDc(HDC hdc)
Definition: dc.h:220
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define APIENTRY
Definition: api.h:79
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
Definition: exintrin.c:143
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL FASTCALL TextIntGetTextExtentPoint(_In_ PDC dc, _In_ PTEXTOBJ TextObj, _In_reads_(Count) PCWCH String, _In_ INT Count, _In_ ULONG MaxExtent, _Out_ PINT Fit, _Out_writes_to_opt_(Count, *Fit) PINT Dx, _Out_ PSIZE Size, _In_ FLONG fl)
Definition: freetype.c:5154
BOOL FASTCALL ftGdiGetTextMetricsW(HDC hDC, PTMW_INTERNAL ptmwi)
Definition: freetype.c:5464
BOOL APIENTRY GreExtTextOutW(_In_ HDC hDC, _In_ INT XStart, _In_ INT YStart, _In_ UINT fuOptions, _In_opt_ PRECTL lprc, _In_reads_opt_(Count) PCWCH String, _In_ INT Count, _In_opt_ const INT *Dx, _In_ DWORD dwCodePage)
Definition: freetype.c:7504
BOOL FASTCALL ftGdiGetRasterizerCaps(LPRASTERIZER_STATUS lprs)
Definition: freetype.c:3948
INT FASTCALL ftGdiGetTextCharsetInfo(PDC Dc, LPFONTSIGNATURE lpSig, DWORD dwFlags)
Definition: freetype.c:5277
#define GDI_OBJECT_TYPE_FONT
Definition: gdi.h:50
Status
Definition: gdiplustypes.h:25
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:90
#define MmCopyToCaller(x, y, z)
Definition: mmcopy.h:19
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
static LPTEXTMETRICW lptm
Definition: font.c:42
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
#define _Out_writes_to_opt_(s, c)
Definition: no_sal2.h:238
#define _In_reads_(s)
Definition: no_sal2.h:168
#define _Out_opt_
Definition: no_sal2.h:214
#define _Inout_
Definition: no_sal2.h:162
#define _Out_
Definition: no_sal2.h:160
#define _In_reads_opt_(s)
Definition: no_sal2.h:222
#define _In_
Definition: no_sal2.h:158
int Count
Definition: noreturn.cpp:7
#define FASTCALL
Definition: nt_native.h:50
unsigned long FLONG
Definition: ntbasedef.h:378
CONST WCHAR * PCWCH
Definition: ntbasedef.h:423
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetCharSet(_In_ HDC hdc)
Definition: text.c:204
__kernel_entry W32KAPI INT APIENTRY NtGdiGetTextCharsetInfo(_In_ HDC hdc, _Out_opt_ LPFONTSIGNATURE lpSig, _In_ DWORD dwFlags)
Definition: text.c:265
__kernel_entry W32KAPI INT APIENTRY NtGdiGetTextFaceW(_In_ HDC hDC, _In_ INT Count, _Out_writes_to_opt_(Count, return) PWSTR FaceName, _In_ BOOL bAliasName)
Definition: text.c:529
#define W32KAPI
Definition: ntgdi.h:9
_Must_inspect_result_ _Out_ LPSIZE psize
Definition: ntgdi.h:1569
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetTextExtent(_In_ HDC hdc, _In_reads_(cwc) PCWCH lpwsz, _In_ INT cwc, _Out_ PSIZE psize, _In_ UINT flOpts)
Definition: text.c:489
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetDCObject(_In_ HDC hdc, _In_ INT itype)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetTextExtentExW(_In_ HDC hdc, _In_reads_opt_(cwc) PCWCH pwsz, _In_ ULONG cwc, _In_ ULONG dxMax, _Out_opt_ PULONG pcCh, _Out_writes_to_opt_(cwc, *pcCh) PULONG pdxOut, _Out_ PSIZE psize, _In_ FLONG fl)
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define MmCopyFromCaller
Definition: polytest.cpp:29
#define _SEH2_GetExceptionCode()
Definition: pseh2_64.h:181
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:82
#define _SEH2_END
Definition: pseh2_64.h:171
#define _SEH2_TRY
Definition: pseh2_64.h:71
#define _SEH2_YIELD(__stmt)
Definition: pseh2_64.h:184
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
Definition: polytest.cpp:41
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LONG lBreakExtra
Definition: ntgdihdl.h:328
DWORD iCS_CP
Definition: ntgdihdl.h:305
LONG cBreak
Definition: ntgdihdl.h:329
HANDLE hlfntNew
Definition: ntgdihdl.h:330
ULONG ulDirty_
Definition: ntgdihdl.h:294
Definition: text.h:60
WCHAR TextFace[LF_FACESIZE]
Definition: text.h:67
TEXTMETRICW TextMetric
Definition: ntgdityp.h:370
LONG cx
Definition: windef.h:334
LONG cy
Definition: windef.h:335
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
#define HIWORD(l)
Definition: typedefs.h:247
int ret
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
Definition: error.c:31
PTEXTOBJ FASTCALL RealizeFontInit(_In_ HFONT hFont)
Definition: font.c:431
INT NTAPI GreGetObject(IN HGDIOBJ hobj, IN INT cbCount, OUT PVOID pvBuffer)
Definition: gdiobj.c:1270
BOOL WINAPI GreGetTextMetricsW(_In_ HDC hdc, _Out_ LPTEXTMETRICW lptm)
Definition: text.c:191
BOOL FASTCALL GreTextOutW(_In_ HDC hdc, _In_ INT nXStart, _In_ INT nYStart, _In_reads_(cchString) PCWCH lpString, _In_ INT cchString)
Definition: text.c:60
BOOL APIENTRY NtGdiSetTextJustification(_In_ HDC hDC, _In_ INT BreakExtra, _In_ INT BreakCount)
Definition: text.c:501
BOOL FASTCALL GreGetTextExtentW(_In_ HDC hDC, _In_reads_(cwc) PCWCH lpwsz, _In_ INT cwc, _Out_ PSIZE psize, _In_ UINT flOpts)
Definition: text.c:77
BOOL FASTCALL GreGetTextExtentExW(_In_ HDC hDC, _In_ PCWCH String, _In_ ULONG Count, _In_ ULONG MaxExtent, _Out_opt_ PULONG Fit, _Out_writes_to_opt_(Count, *Fit) PULONG Dx, _Out_ PSIZE pSize, _In_ FLONG fl)
Definition: text.c:133
W32KAPI BOOL APIENTRY NtGdiGetTextMetricsW(_In_ HDC hDC, _Out_ PTMW_INTERNAL pUnsafeTmwi, _In_ ULONG cj)
Definition: text.c:588
VOID FASTCALL IntTMWFixUp(_In_ HDC hDC, _Inout_ PTMW_INTERNAL ptm)
Definition: text.c:29
BOOL APIENTRY NtGdiGetRasterizerCaps(_Out_ LPRASTERIZER_STATUS praststat, _In_ ULONG cjBytes)
Definition: text.c:226
FORCEINLINE VOID TEXTOBJ_UnlockText(PLFONT plfnt)
Definition: text.h:96
#define GDITAG_TEXT
Definition: tags.h:172
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ FLONG fl
Definition: winddi.h:1279
_In_ ULONG cj
Definition: winddi.h:3540
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
Definition: error.c:22
int * PINT
Definition: windef.h:177
#define WINAPI
Definition: msvc.h:6
struct _RASTERIZER_STATUS RASTERIZER_STATUS
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define TMPF_TRUETYPE
Definition: wingdi.h:1313
#define TMPF_VECTOR
Definition: wingdi.h:1312
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184