diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild
index 0c3f2465446..f4913c9a91e 100644
--- a/reactos/baseaddress.rbuild
+++ b/reactos/baseaddress.rbuild
@@ -13,6 +13,7 @@
+
diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff
index 6b306ec33c6..89d4e8b90af 100644
--- a/reactos/boot/bootdata/packages/reactos.dff
+++ b/reactos/boot/bootdata/packages/reactos.dff
@@ -412,6 +412,7 @@ dll\win32\stdole32.tlb\stdole32.tlb 1
dll\win32\sti\sti.dll 1
dll\win32\sxs\sxs.dll 1
dll\win32\syssetup\syssetup.dll 1
+dll\win32\t2embed\t2embed.dll 1
dll\win32\tapi32\tapi32.dll 1
dll\win32\tapiui\tapiui.dll 1
dll\win32\traffic\traffic.dll 1
diff --git a/reactos/dll/win32/t2embed/t2embed.c b/reactos/dll/win32/t2embed/t2embed.c
new file mode 100644
index 00000000000..4a1ef35f024
--- /dev/null
+++ b/reactos/dll/win32/t2embed/t2embed.c
@@ -0,0 +1,205 @@
+/*
+ * PROJECT: Font Embedding Dll
+ * FILE: dll\win32\t2embed\t2embed.c
+ * PURPOSE: Main file
+ * PROGRAMMERS: Dmitry Chapyshev (dmitry@reactos.org)
+ */
+
+#include
+#include
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(t2embed);
+
+LONG
+WINAPI
+TTCharToUnicode(HDC hDC,
+ UCHAR* pucCharCodes,
+ ULONG ulCharCodeSize,
+ USHORT* pusShortCodes,
+ ULONG ulShortCodeSize,
+ ULONG ulFlags)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTDeleteEmbeddedFont(HANDLE hFontReference,
+ ULONG ulFlags,
+ ULONG* pulStatus)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTEmbedFont(HDC hDC,
+ ULONG ulFlags,
+ ULONG ulCharSet,
+ ULONG* pulPrivStatus,
+ ULONG* pulStatus,
+ WRITEEMBEDPROC lpfnWriteToStream,
+ LPVOID lpvWriteStream,
+ USHORT* pusCharCodeSet,
+ USHORT usCharCodeCount,
+ USHORT usLanguage,
+ TTEMBEDINFO* pTTEmbedInfo)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTEmbedFontFromFileA(HDC hDC,
+ LPCSTR szFontFileName,
+ USHORT usTTCIndex,
+ ULONG ulFlags,
+ ULONG ulCharSet,
+ ULONG* pulPrivStatus,
+ ULONG* pulStatus,
+ WRITEEMBEDPROC lpfnWriteToStream,
+ LPVOID lpvWriteStream,
+ USHORT* pusCharCodeSet,
+ USHORT usCharCodeCount,
+ USHORT usLanguage,
+ TTEMBEDINFO* pTTEmbedInfo)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTEnableEmbeddingForFacename(LPSTR lpszFacename,
+ BOOL bEnable)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTGetEmbeddedFontInfo(ULONG ulFlags,
+ ULONG* pulPrivStatus,
+ ULONG ulPrivs,
+ ULONG* pulStatus,
+ READEMBEDPROC lpfnReadFromStream,
+ LPVOID lpvReadStream,
+ TTLOADINFO* pTTLoadInfo)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTGetEmbeddingType(HDC hDC,
+ ULONG* pulPrivStatus)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTIsEmbeddingEnabled(HDC hDC,
+ BOOL* pbEnabled)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTIsEmbeddingEnabledForFacename(LPSTR lpszFacename,
+ BOOL* pbEnabled)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTLoadEmbeddedFont(HANDLE *phFontReference,
+ ULONG ulFlags,
+ ULONG* pulPrivStatus,
+ ULONG ulPrivs,
+ ULONG* pulStatus,
+ READEMBEDPROC lpfnReadFromStream,
+ LPVOID lpvReadStream,
+ LPWSTR szWinFamilyName,
+ LPSTR szMacFamilyName,
+ TTLOADINFO* pTTLoadInfo)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTRunValidationTests(HDC hDC,
+ TTVALIDATIONTESTPARAMS* pTestParam)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTEmbedFontEx(HDC hDC,
+ ULONG ulFlags,
+ ULONG ulCharSet,
+ ULONG* pulPrivStatus,
+ ULONG* pulStatus,
+ WRITEEMBEDPROC lpfnWriteToStream,
+ LPVOID lpvWriteStream,
+ ULONG* pulCharCodeSet,
+ USHORT usCharCodeCount,
+ USHORT usLanguage,
+ TTEMBEDINFO* pTTEmbedInfo)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTRunValidationTestsEx(HDC hDC,
+ TTVALIDATIONTESTPARAMSEX* pTestParam)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+LONG
+WINAPI
+TTGetNewFontName(HANDLE* phFontReference,
+ LPWSTR szWinFamilyName,
+ long cchMaxWinName,
+ LPSTR szMacFamilyName,
+ long cchMaxMacName)
+{
+ UNIMPLEMENTED;
+ return E_NONE;
+}
+
+
+BOOL
+WINAPI
+DllMain(IN HINSTANCE hinstDLL,
+ IN DWORD dwReason,
+ IN LPVOID lpvReserved)
+{
+ switch (dwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(hinstDLL);
+ break;
+ }
+
+ return TRUE;
+}
diff --git a/reactos/dll/win32/t2embed/t2embed.rbuild b/reactos/dll/win32/t2embed/t2embed.rbuild
new file mode 100644
index 00000000000..6c239ebb5cd
--- /dev/null
+++ b/reactos/dll/win32/t2embed/t2embed.rbuild
@@ -0,0 +1,13 @@
+
+
+ .
+ include/reactos/wine
+ kernel32
+ gdi32
+ user32
+ advapi32
+ version
+ wine
+ t2embed.c
+ t2embed.rc
+
\ No newline at end of file
diff --git a/reactos/dll/win32/t2embed/t2embed.rc b/reactos/dll/win32/t2embed/t2embed.rc
new file mode 100644
index 00000000000..b5fa5940d17
--- /dev/null
+++ b/reactos/dll/win32/t2embed/t2embed.rc
@@ -0,0 +1,7 @@
+#include
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "Font Embedding Dll\0"
+#define REACTOS_STR_INTERNAL_NAME "t2embed\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "t2embed.dll\0"
+#include
diff --git a/reactos/dll/win32/t2embed/t2embed.spec b/reactos/dll/win32/t2embed/t2embed.spec
new file mode 100644
index 00000000000..364f71b5cdd
--- /dev/null
+++ b/reactos/dll/win32/t2embed/t2embed.spec
@@ -0,0 +1,25 @@
+@ stdcall TTCharToUnicode(ptr ptr long ptr long long)
+@ stdcall TTDeleteEmbeddedFont(ptr long ptr)
+@ stdcall TTEmbedFont(ptr long long ptr ptr ptr ptr ptr long long ptr)
+@ stdcall TTEmbedFontFromFileA(ptr str long long long ptr ptr ptr ptr ptr long long ptr)
+@ stdcall TTEnableEmbeddingForFacename(str long)
+@ stdcall TTGetEmbeddedFontInfo(long ptr long ptr ptr ptr ptr)
+@ stdcall TTGetEmbeddingType(ptr ptr)
+@ stdcall TTIsEmbeddingEnabled(ptr ptr)
+@ stdcall TTIsEmbeddingEnabledForFacename(str ptr)
+@ stdcall TTLoadEmbeddedFont(ptr long ptr long ptr ptr ptr wstr str ptr)
+@ stdcall TTRunValidationTests(ptr ptr)
+@ stub _TTCharToUnicode@24
+@ stub _TTDeleteEmbeddedFont@12
+@ stub _TTEmbedFont@44
+@ stub _TTEmbedFontFromFileA@52
+@ stub _TTEnableEmbeddingForFacename@8
+@ stub _TTGetEmbeddedFontInfo@28
+@ stub _TTGetEmbeddingType@8
+@ stub _TTIsEmbeddingEnabled@8
+@ stub _TTIsEmbeddingEnabledForFacename@8
+@ stub _TTLoadEmbeddedFont@40
+@ stub _TTRunValidationTests@8
+@ stdcall TTEmbedFontEx(ptr long long ptr ptr ptr ptr ptr long long ptr)
+@ stdcall TTRunValidationTestsEx(ptr ptr)
+@ stdcall TTGetNewFontName(ptr wstr long str long)
diff --git a/reactos/dll/win32/win32.rbuild b/reactos/dll/win32/win32.rbuild
index 11b6b7594a6..ca9ffdfc1b9 100644
--- a/reactos/dll/win32/win32.rbuild
+++ b/reactos/dll/win32/win32.rbuild
@@ -511,6 +511,9 @@
+
+
+
diff --git a/reactos/include/psdk/t2embapi.h b/reactos/include/psdk/t2embapi.h
new file mode 100644
index 00000000000..e584a1239a6
--- /dev/null
+++ b/reactos/include/psdk/t2embapi.h
@@ -0,0 +1,286 @@
+#ifndef __T2EMBED_API_H
+#define __T2EMBED_API_H
+
+#ifndef CHARSET_UNICODE
+#define CHARSET_UNICODE 1
+#define CHARSET_DEFAULT 1
+#define CHARSET_SYMBOL 2
+#define CHARSET_GLYPHIDX 3
+#endif
+
+#ifndef EMBED_PREVIEWPRINT
+#define EMBED_PREVIEWPRINT 1
+#define EMBED_EDITABLE 2
+#define EMBED_INSTALLABLE 3
+#define EMBED_NOEMBEDDING 4
+#endif
+
+#ifndef LICENSE_INSTALLABLE
+#define LICENSE_INSTALLABLE 0x0
+#define LICENSE_DEFAULT 0x0
+#define LICENSE_NOEMBEDDING 0x2
+#define LICENSE_PREVIEWPRINT 0x4
+#define LICENSE_EDITABLE 0x8
+#endif
+
+#ifndef TTEMBED_RAW
+#define TTEMBED_RAW 0x0
+#define TTEMBED_SUBSET 0x1
+#define TTEMBED_TTCOMPRESSED 0x4
+#define TTEMBED_FAILIFVARIATIONSIMULATED 0x10
+#define TTEMBED_EMBEDEUDC 0x20
+#define TTEMBED_VALIDATIONTESTS 0x40
+#define TTEMBED_WEBOBJECT 0x80
+#define TTEMBED_ENCRYPTDATA 0x10000000
+#endif
+
+#ifndef E_NONE
+#define E_NONE 0x0
+#endif
+
+#ifndef E_CHARCODECOUNTINVALID
+#define E_CHARCODECOUNTINVALID 0x2
+#define E_CHARCODESETINVALID 0x3
+#define E_DEVICETRUETYPEFONT 0x4
+#define E_HDCINVALID 0x6
+#define E_NOFREEMEMORY 0x7
+#define E_FONTREFERENCEINVALID 0x8
+#define E_NOTATRUETYPEFONT 0xA
+#define E_ERRORACCESSINGFONTDATA 0xC
+#define E_ERRORACCESSINGFACENAME 0xD
+#define E_ERRORUNICODECONVERSION 0x11
+#define E_ERRORCONVERTINGCHARS 0x12
+#define E_EXCEPTION 0x13
+#define E_RESERVEDPARAMNOTNULL 0x14
+#define E_CHARSETINVALID 0x15
+#define E_WIN32S_NOTSUPPORTED 0x16
+#define E_FILE_NOT_FOUND 0x17
+#define E_TTC_INDEX_OUT_OF_RANGE 0x18
+#define E_INPUTPARAMINVALID 0x19
+#endif
+
+#ifndef E_ERRORCOMPRESSINGFONTDATA
+#define E_ERRORCOMPRESSINGFONTDATA 0x100
+#define E_FONTDATAINVALID 0x102
+#define E_NAMECHANGEFAILED 0x103
+#define E_FONTNOTEMBEDDABLE 0x104
+#define E_PRIVSINVALID 0x105
+#define E_SUBSETTINGFAILED 0x106
+#define E_READFROMSTREAMFAILED 0x107
+#define E_SAVETOSTREAMFAILED 0x108
+#define E_NOOS2 0x109
+#define E_T2NOFREEMEMORY 0x10A
+#define E_ERRORREADINGFONTDATA 0x10B
+#define E_FLAGSINVALID 0x10C
+#define E_ERRORCREATINGFONTFILE 0x10D
+#define E_FONTALREADYEXISTS 0x10E
+#define E_FONTNAMEALREADYEXISTS 0x10F
+#define E_FONTINSTALLFAILED 0x110
+#define E_ERRORDECOMPRESSINGFONTDATA 0x111
+#define E_ERRORACCESSINGEXCLUDELIST 0x112
+#define E_FACENAMEINVALID 0x113
+#define E_STREAMINVALID 0x114
+#define E_STATUSINVALID 0x115
+#define E_PRIVSTATUSINVALID 0x116
+#define E_PERMISSIONSINVALID 0x117
+#define E_PBENABLEDINVALID 0x118
+#define E_SUBSETTINGEXCEPTION 0x119
+#define E_SUBSTRING_TEST_FAIL 0x11A
+#define E_FONTVARIATIONSIMULATED 0x11B
+#define E_FONTVALIDATEFAIL 0x11C
+#define E_FONTFAMILYNAMENOTINFULL 0x11D
+#endif
+
+#ifndef E_ADDFONTFAILED
+#define E_ADDFONTFAILED 0x200
+#define E_COULDNTCREATETEMPFILE 0x201
+#define E_FONTFILECREATEFAILED 0x203
+#define E_WINDOWSAPI 0x204
+#define E_FONTFILENOTFOUND 0x205
+#define E_RESOURCEFILECREATEFAILED 0x206
+#define E_ERROREXPANDINGFONTDATA 0x207
+#define E_ERRORGETTINGDC 0x208
+#define E_EXCEPTIONINDECOMPRESSION 0x209
+#define E_EXCEPTIONINCOMPRESSION 0x20A
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned long(WINAPIV *WRITEEMBEDPROC)
+(
+ void* lpvWriteStream,
+ const void* lpvBuffer,
+ const unsigned long cbBuffer
+);
+
+typedef unsigned long(WINAPIV *READEMBEDPROC)
+(
+ void* lpvReadStream,
+ void* lpvBuffer,
+ const unsigned long cbBuffer
+);
+
+
+typedef struct
+{
+ unsigned long ulStructSize;
+ long lTestFromSize;
+ long lTestToSize;
+ unsigned long ulCharSet;
+ unsigned short usReserved1;
+ unsigned short usCharCodeCount;
+ unsigned short* pusCharCodeSet;
+} TTVALIDATIONTESTPARAMS;
+
+typedef struct
+{
+ unsigned long ulStructSize;
+ long lTestFromSize;
+ long lTestToSize;
+ unsigned long ulCharSet;
+ unsigned short usReserved1;
+ unsigned short usCharCodeCount;
+ unsigned long* pulCharCodeSet;
+} TTVALIDATIONTESTPARAMSEX;
+
+typedef struct
+{
+ unsigned short usStructSize;
+ unsigned short usRootStrSize;
+ unsigned short *pusRootStr;
+} TTEMBEDINFO;
+
+typedef struct
+{
+ unsigned short usStructSize;
+ unsigned short usRefStrSize;
+ unsigned short *pusRefStr;
+} TTLOADINFO;
+
+LONG
+WINAPI
+TTCharToUnicode(HDC hDC,
+ UCHAR* pucCharCodes,
+ ULONG ulCharCodeSize,
+ USHORT* pusShortCodes,
+ ULONG ulShortCodeSize,
+ ULONG ulFlags);
+
+LONG
+WINAPI
+TTDeleteEmbeddedFont(HANDLE hFontReference,
+ ULONG ulFlags,
+ ULONG* pulStatus);
+
+LONG
+WINAPI
+TTEmbedFont(HDC hDC,
+ ULONG ulFlags,
+ ULONG ulCharSet,
+ ULONG* pulPrivStatus,
+ ULONG* pulStatus,
+ WRITEEMBEDPROC lpfnWriteToStream,
+ LPVOID lpvWriteStream,
+ USHORT* pusCharCodeSet,
+ USHORT usCharCodeCount,
+ USHORT usLanguage,
+ TTEMBEDINFO* pTTEmbedInfo);
+
+LONG
+WINAPI
+TTEmbedFontFromFileA(HDC hDC,
+ LPCSTR szFontFileName,
+ USHORT usTTCIndex,
+ ULONG ulFlags,
+ ULONG ulCharSet,
+ ULONG* pulPrivStatus,
+ ULONG* pulStatus,
+ WRITEEMBEDPROC lpfnWriteToStream,
+ LPVOID lpvWriteStream,
+ USHORT* pusCharCodeSet,
+ USHORT usCharCodeCount,
+ USHORT usLanguage,
+ TTEMBEDINFO* pTTEmbedInfo);
+
+LONG
+WINAPI
+TTEnableEmbeddingForFacename(LPSTR lpszFacename,
+ BOOL bEnable);
+
+LONG
+WINAPI
+TTGetEmbeddedFontInfo(ULONG ulFlags,
+ ULONG* pulPrivStatus,
+ ULONG ulPrivs,
+ ULONG* pulStatus,
+ READEMBEDPROC lpfnReadFromStream,
+ LPVOID lpvReadStream,
+ TTLOADINFO* pTTLoadInfo);
+
+LONG
+WINAPI
+TTGetEmbeddingType(HDC hDC,
+ ULONG* pulPrivStatus);
+
+LONG
+WINAPI
+TTIsEmbeddingEnabled(HDC hDC,
+ BOOL* pbEnabled);
+
+LONG
+WINAPI
+TTIsEmbeddingEnabledForFacename(LPSTR lpszFacename,
+ BOOL* pbEnabled);
+
+LONG
+WINAPI
+TTLoadEmbeddedFont(HANDLE *phFontReference,
+ ULONG ulFlags,
+ ULONG* pulPrivStatus,
+ ULONG ulPrivs,
+ ULONG* pulStatus,
+ READEMBEDPROC lpfnReadFromStream,
+ LPVOID lpvReadStream,
+ LPWSTR szWinFamilyName,
+ LPSTR szMacFamilyName,
+ TTLOADINFO* pTTLoadInfo);
+
+LONG
+WINAPI
+TTRunValidationTests(HDC hDC,
+ TTVALIDATIONTESTPARAMS* pTestParam);
+
+LONG
+WINAPI
+TTEmbedFontEx(HDC hDC,
+ ULONG ulFlags,
+ ULONG ulCharSet,
+ ULONG* pulPrivStatus,
+ ULONG* pulStatus,
+ WRITEEMBEDPROC lpfnWriteToStream,
+ LPVOID lpvWriteStream,
+ ULONG* pulCharCodeSet,
+ USHORT usCharCodeCount,
+ USHORT usLanguage,
+ TTEMBEDINFO* pTTEmbedInfo);
+
+LONG
+WINAPI
+TTRunValidationTestsEx(HDC hDC,
+ TTVALIDATIONTESTPARAMSEX* pTestParam);
+
+LONG
+WINAPI
+TTGetNewFontName(HANDLE* phFontReference,
+ LPWSTR szWinFamilyName,
+ long cchMaxWinName,
+ LPSTR szMacFamilyName,
+ long cchMaxMacName);
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif /* __T2EMBED_API_H */