17#define MAX_TEXT_BUFFER 0x2710000
74 pdcattr =
dc->pdcattr;
89 if (
Count && krnpair )
125GreGetCharacterPlacementW(
152 cSet = nSet = nCount;
162 tmpDxCaretPos = gcpwSave.
lpDx;
180 if ( tmpDxCaretPos && nSet > 0)
182 for (
i = (nSet - 1);
i > 0;
i--)
184 tmpDxCaretPos[
i] -= tmpDxCaretPos[
i - 1];
212 DPRINT1(
"We Need to Do Something HERE!\n");
219 if (
Size.cx > nMaxExtent )
221 for (Cx =
Size.cx; nSet > 0; nSet--)
223 Cx -= tmpDxCaretPos[nSet - 1];
225 if ( Cx <= nMaxExtent )
break;
244 DPRINT1(
"We Need to Do Something HERE 2!\n");
275 for (
i = 0;
i < nSet;
i++)
288 pgcpw->nGlyphs = nSet;
289 pgcpw->nMaxFit = nSet;
307 plf = &plfont->logfont;
312 DPRINT(
"FontGetObject font not initialized!\n");
317 DPRINT1(
"FontGetObject(TextIntRealizeFont) Status = 0x%lx\n",
Status);
349 static const WCHAR alphabet[] = {
350 'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
351 'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
352 'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',0};
360 pdcattr = pdc->pdcattr;
376 return (sz.
cx / 26 + 1) / 2;
386 static const DWORD GCP_DBCS_MASK=0x003F0000,
387 GCP_DIACRITIC_MASK=0x00000000,
388 FLI_GLYPHS_MASK=0x00000000,
389 GCP_GLYPHSHAPE_MASK=0x00000040,
390 GCP_KASHIDA_MASK=0x00000000,
391 GCP_LIGATE_MASK=0x00000000,
392 GCP_USEKERNING_MASK=0x00000000,
393 GCP_REORDER_MASK=0x00000060;
400 if( (fontsig.
fsCsb[0]&GCP_DBCS_MASK)!=0 )
403 if( (fontsig.
fsCsb[0]&GCP_DIACRITIC_MASK)!=0 )
406 if( (fontsig.
fsCsb[0]&FLI_GLYPHS_MASK)!=0 )
409 if( (fontsig.
fsCsb[0]&GCP_GLYPHSHAPE_MASK)!=0 )
412 if( (fontsig.
fsCsb[0]&GCP_KASHIDA_MASK)!=0 )
415 if( (fontsig.
fsCsb[0]&GCP_LIGATE_MASK)!=0 )
418 if( (fontsig.
fsCsb[0]&GCP_USEKERNING_MASK)!=0 )
421 pdcattr = Dc->pdcattr;
425 if( (fontsig.
fsCsb[0]&GCP_REORDER_MASK)!=0 )
458 ULONG ich, cRealFiles;
463 for (ich = cRealFiles = 0; ich < cwc; ++ich)
469 return cRealFiles >= cFiles;
490 DPRINT(
"NtGdiAddFontResourceW\n");
544 DPRINT(
"NtGdiRemoveFontResourceW\n");
595 DPRINT(
"NtGdiAddFontMemResourceEx\n");
624 *pNumFonts = NumFonts;
663 return GreGetCharacterPlacementW(
hdc,
710 pdcattr = Dc->pdcattr;
754 pdcattr = pDc->pdcattr;
759 if ( TextObj ==
NULL)
828 if (UnsafeBuf &&
cjBuf)
910 pdcattr =
dc->pdcattr;
925 if (
Count && krnpair )
927 if (
Count > NumPairs)
986 pdcattr =
dc->pdcattr;
1004 if (!otm)
return Size;
1053 DWORD dwBytes, dwBytesRequested;
1069 cbStringSize = cwc *
sizeof(
WCHAR);
1074 if (!SafeFileNames.
Buffer)
1090 dwBytesRequested = dwBytes;
1128 if (pvBuf && dwBytesRequested > 0)
1174 pdcattr = pDc->pdcattr;
1259 if (pvCliData && hNewFont)
1266 Entry->UserData = pvCliData;
1312 return HfontCreate(&SafeLogfont, cjElfw, lft,
fl, pvCliData);
1331 INT StackBuffer[40];
1339 pSafePwc = StackPwc;
1352 pTmpBuffer = StackBuffer;
1367 if (pTmpBuffer && pTmpBuffer != StackBuffer)
1369 if (pSafePwc && pSafePwc != StackPwc)
INT APIENTRY NtGdiAddFontResourceW(_In_reads_(cwc) WCHAR *pwszFiles, _In_ ULONG cwc, _In_ ULONG cFiles, _In_ FLONG f, _In_ DWORD dwPidTid, _In_opt_ DESIGNVECTOR *pdv)
FORCEINLINE VOID DC_UnlockDc(PDC pdc)
FORCEINLINE PDC DC_LockDc(HDC hdc)
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
static const WCHAR Cleanup[]
#define ObjToGDI(ClipObj, Type)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define ExInitializePushLock
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
BOOL FASTCALL TextIntUpdateSize(PDC dc, PTEXTOBJ TextObj, PFONTGDI FontGDI, BOOL bDoLock)
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)
DWORD FASTCALL ftGdiGetKerningPairs(PFONTGDI Font, DWORD cPairs, LPKERNINGPAIR pKerningPair)
BOOL FASTCALL ftGdiGetTextMetricsW(HDC hDC, PTMW_INTERNAL ptmwi)
BOOL FASTCALL IntGdiRemoveFontResource(_In_ PCUNICODE_STRING FileName, _In_ DWORD cFiles, _In_ DWORD dwFlags)
BOOL FASTCALL IntGdiGetFontResourceInfo(PUNICODE_STRING FileName, PVOID pBuffer, DWORD *pdwBytes, DWORD dwType)
DWORD FASTCALL ftGetFontUnicodeRanges(PFONTGDI Font, PGLYPHSET glyphset)
INT FASTCALL IntGdiAddFontResourceEx(_In_ PCUNICODE_STRING FileName, _In_ DWORD cFiles, _In_ DWORD Characteristics, _In_ DWORD dwFlags)
BOOL FASTCALL ftGdiRealizationInfo(PFONTGDI Font, PREALIZATION_INFO Info)
BOOL APIENTRY GreGetCharWidthW(_In_ HDC hDC, _In_ UINT FirstChar, _In_ UINT Count, _In_reads_opt_(Count) PCWCH Safepwc, _In_ FLONG fl, _Out_writes_bytes_(Count *sizeof(INT)) PVOID Buffer)
ULONG FASTCALL ftGdiGetGlyphOutline(PDC dc, WCHAR wch, UINT iFormat, LPGLYPHMETRICS pgm, ULONG cjBuf, PVOID pvBuf, const MAT2 *pmat2, BOOL bIgnoreRotation)
BOOL FASTCALL IntGdiRemoveFontMemResource(HANDLE hMMFont)
NTSTATUS FASTCALL TextIntRealizeFont(HFONT FontHandle, PTEXTOBJ pTextObj)
HANDLE FASTCALL IntGdiAddFontMemResource(PVOID Buffer, DWORD dwSize, PDWORD pNumAdded)
INT FASTCALL ftGdiGetTextCharsetInfo(PDC Dc, LPFONTSIGNATURE lpSig, DWORD dwFlags)
DWORD FASTCALL ftGdiGetFontData(PFONTGDI FontGdi, DWORD Table, DWORD Offset, PVOID Buffer, DWORD Size)
INT FASTCALL IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size, OUTLINETEXTMETRICW *Otm, BOOL bLocked)
#define GDI_HANDLE_GET_INDEX(h)
GLint GLint GLsizei GLsizei height
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define EXCEPTION_EXECUTE_HANDLER
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
static PWSTR PDWORD pdwBytes
#define MmCopyToCaller(x, y, z)
#define ExFreePoolWithTag(_P, _T)
FORCEINLINE PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_opt_(s)
#define _In_reads_opt_(s)
#define _Out_writes_bytes_(s)
#define _In_reads_bytes_opt_(s)
#define UNICODE_STRING_MAX_CHARS
#define DBG_UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG Offset
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetCharWidthW(_In_ HDC hdc, _In_ UINT wcFirst, _In_ UINT cwc, _In_reads_opt_(cwc) PCWCH pwc, _In_ FLONG fl, _Out_writes_bytes_(cwc *sizeof(ULONG)) PVOID pvBuf)
__kernel_entry W32KAPI ULONG APIENTRY NtGdiGetKerningPairs(_In_ HDC hdc, _In_ ULONG cPairs, _Out_writes_to_opt_(cPairs, return) KERNINGPAIR *pkpDst)
__kernel_entry W32KAPI HFONT APIENTRY NtGdiHfontCreate(_In_reads_bytes_(cjElfw) const ENUMLOGFONTEXDVW *pelfw, _In_ ULONG cjElfw, _In_ LFTYPE lft, _In_ FLONG fl, _In_opt_ PVOID pvCliData)
__kernel_entry W32KAPI ULONG APIENTRY NtGdiGetGlyphOutline(_In_ HDC hdc, _In_ WCHAR wch, _In_ UINT iFormat, _Out_ LPGLYPHMETRICS pgm, _In_ ULONG cjBuf, _Out_writes_bytes_opt_(cjBuf) PVOID pvBuf, _In_ const MAT2 *pmat2, _In_ BOOL bIgnoreRotation)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiRemoveFontResourceW(_In_reads_(cwc) PCWCH pwszFiles, _In_ ULONG cwc, _In_ ULONG cFiles, _In_ ULONG fl, _In_ DWORD dwPidTid, _In_opt_ const DESIGNVECTOR *pdv)
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetCharacterPlacementW(_In_ HDC hdc, _In_reads_(nCount) PCWCH pwsz, _In_ INT nCount, _In_ INT nMaxExtent, _Inout_opt_ LPGCP_RESULTSW pgcpw, _In_ DWORD dwFlags)
__kernel_entry W32KAPI ULONG APIENTRY NtGdiGetOutlineTextMetricsInternalW(_In_ HDC hdc, _In_ ULONG cjotm, _Out_writes_bytes_opt_(cjotm) POUTLINETEXTMETRICW potmw, _Out_ PTMDIFF ptmd)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiRemoveFontMemResourceEx(_In_ HANDLE hMMFont)
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiAddFontMemResourceEx(_In_reads_bytes_(cjBuffer) const VOID *pvBuffer, _In_ DWORD cjBuffer, _In_reads_bytes_opt_(cjDV) const DESIGNVECTOR *pdv, _In_ ULONG cjDV, _Out_ PDWORD pNumFonts)
#define CFONT_REALIZATION
#define RtlFillMemory(Dest, Length, Fill)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
base of all file and directory entries
DESIGNVECTOR elfDesignVector
ENUMLOGFONTEXW elfEnumLogfontEx
WCHAR elfStyle[LF_FACESIZE]
WCHAR elfFullName[LF_FULLFACESIZE]
WCHAR elfScript[LF_FACESIZE]
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
PTEXTOBJ FASTCALL RealizeFontInit(_In_ HFONT hFont)
HFONT FASTCALL GreCreateFontIndirectW(_In_ const LOGFONTW *lplf)
DWORD FASTCALL GreGetKerningPairs(_In_ HDC hDC, _In_ ULONG NumPairs, _Out_writes_(NumPairs) LPKERNINGPAIR krnpair)
ULONG FASTCALL FontGetObject(_Inout_ PTEXTOBJ plfont, _In_ ULONG cjBuffer, _Out_ PVOID pvBuffer)
DWORD FASTCALL IntGetFontLanguageInfo(_In_ PDC Dc)
HFONT APIENTRY HfontCreate(_In_ const ENUMLOGFONTEXDVW *pelfw, _In_ ULONG cjElfw, _In_ LFTYPE lft, _In_ FLONG fl, _In_opt_ PVOID pvCliData)
BOOL APIENTRY NtGdiGetRealizationInfo(_In_ HDC hdc, _Out_ PREALIZATION_INFO pri, _In_ HFONT hf)
DWORD APIENTRY NtGdiGetFontData(_In_ HDC hDC, _In_ DWORD Table, _In_ DWORD Offset, _Out_writes_bytes_(Size) PVOID Buffer, _In_ DWORD Size)
DWORD FASTCALL IntGetCharDimensions(_In_ HDC hdc, _Out_opt_ PTEXTMETRICW ptm, _Out_opt_ PDWORD height)
W32KAPI BOOL APIENTRY NtGdiGetFontResourceInfoInternalW(_In_reads_(cwc) PCWCH pwszFiles, _In_ ULONG cwc, _In_ ULONG cFiles, _In_ UINT cjIn, _Inout_ PDWORD pdwBytes, _Out_writes_bytes_(*pdwBytes) PVOID pvBuf, _In_ DWORD dwType)
static BOOL IntCheckFontPathNames(_In_reads_(cwc) PCWCH pwcFiles, _In_ ULONG cFiles, _In_ ULONG cwc)
DWORD APIENTRY NtGdiGetFontUnicodeRanges(_In_ HDC hdc, _Out_opt_ LPGLYPHSET pgs)
BOOL FASTCALL GreGetTextExtentW(_In_ HDC hDC, _In_reads_(cwc) PCWCH lpwsz, _In_ INT cwc, _Out_ PSIZE psize, _In_ UINT flOpts)
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)
#define LFONT_UnlockFont(plfnt)
FORCEINLINE PTEXTOBJ TEXTOBJ_LockText(HFONT hfont)
FORCEINLINE VOID TEXTOBJ_UnlockText(PLFONT plfnt)
#define LFONT_AllocFontWithHandle()
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
_In_ ULONG_PTR _In_opt_ DESIGNVECTOR * pdv
_In_ SIZEL _In_ ULONG iFormat
_In_ ULONG _In_ CLIPOBJ _In_ RECTL _In_ ULONG cjIn
_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
#define ExAllocatePoolWithQuotaTag(a, b, c)