Re: [Mingw-w64-public] [PATCH] headers: Update d2d1.h enums with missing members.

2019-01-27 Thread Nikolay Sivov
On Mon, Jan 28, 2019 at 3:27 AM JonY via Mingw-w64-public <
mingw-w64-public@lists.sourceforge.net> wrote:

> On 1/27/19 4:16 PM, Nikolay Sivov wrote:
> > ---
> >
>
> Please split functionality and styling changes into separate patches,
> and explain why the _StructName variants are removed.
>

Underscored names do no exist in Windows SDK for those enums, every type
there is defined as 'typedef enum name {} name;' and this patch matches
that.


> ___
> Mingw-w64-public mailing list
> Mingw-w64-public@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
>

___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH] ntintsafe.h: Add header.

2019-01-27 Thread Zebediah Figura
>From 8cb9f70bba03c555767e6d9767b92ac3b9b624f2 Mon Sep 17 00:00:00 2001
From: Zebediah Figura 
Date: Sat, 15 Dec 2018 21:03:47 -0600
Subject: [PATCH] ntintsafe.h: Add header.

Signed-off-by: Zebediah Figura 
---
 mingw-w64-headers/ddk/include/ddk/ntintsafe.h | 401 ++
 1 file changed, 401 insertions(+)
 create mode 100644 mingw-w64-headers/ddk/include/ddk/ntintsafe.h

diff --git a/mingw-w64-headers/ddk/include/ddk/ntintsafe.h 
b/mingw-w64-headers/ddk/include/ddk/ntintsafe.h
new file mode 100644
index ..1ec20072
--- /dev/null
+++ b/mingw-w64-headers/ddk/include/ddk/ntintsafe.h
@@ -0,0 +1,401 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#ifndef _NTINTSAFE_H_INCLUDED_
+#define _NTINTSAFE_H_INCLUDED_
+
+#include 
+
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
+
+#include 
+#include 
+
+#ifndef __MINGW_INTSAFE_WORKS
+#ifdef __clang__
+#if __has_builtin(__builtin_add_overflow)
+#define __MINGW_INTSAFE_WORKS
+#endif
+#elif __GNUC__ >= 5
+#define __MINGW_INTSAFE_WORKS
+#endif
+#endif
+
+#ifdef __MINGW_INTSAFE_WORKS
+
+#ifndef __MINGW_INTSAFE_API
+#define __MINGW_INTSAFE_API FORCEINLINE
+#endif
+
+/** If CHAR is unsigned, use static inline for functions that operate
+on chars.  This avoids the risk of linking to the wrong function when
+different translation units with different types of chars are linked
+together, and code using signed chars will not be affected. */
+#ifndef __MINGW_INTSAFE_CHAR_API
+#ifdef __CHAR_UNSIGNED__
+#define __MINGW_INTSAFE_CHAR_API static inline
+#else
+#define __MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_API
+#endif
+#endif
+
+#define __MINGW_INTSAFE_BODY(operation, x, y) \
+{ \
+  if (__builtin_##operation##_overflow(x, y, result)) \
+  { \
+  *result = 0; \
+  return STATUS_INTEGER_OVERFLOW; \
+  } \
+  return STATUS_SUCCESS; \
+}
+
+#define __MINGW_INTSAFE_CONV(name, type_src, type_dest) \
+NTSTATUS Rtl##name(type_src operand, type_dest * result) \
+__MINGW_INTSAFE_BODY(add, operand, 0)
+
+#define __MINGW_INTSAFE_MATH(name, type, operation) \
+NTSTATUS Rtl##name(type x, type y, type * result) \
+__MINGW_INTSAFE_BODY(operation, x, y)
+
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UInt8ToInt8, UINT8, INT8)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(UInt8ToChar, UINT8, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ByteToInt8, BYTE, INT8)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ByteToChar, BYTE, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUChar, INT8, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUInt8, INT8, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUShort, INT8, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUInt, INT8, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToULong, INT8, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToUIntPtr, INT8, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToULongPtr, INT8, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(Int8ToULongLong, INT8, ULONGLONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToUChar, USHORT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToUInt8, USHORT, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToByte, USHORT, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToInt8, USHORT, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UShortToShort, USHORT, SHORT)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(UShortToChar, USHORT, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(WordToUChar, WORD, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(WordToByte, WORD, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(WordToShort, WORD, SHORT)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(WordToChar, WORD, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUChar, SHORT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUInt8, SHORT, UINT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToByte, SHORT, BYTE)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToInt8, SHORT, INT8)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUShort, SHORT, USHORT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToWord, SHORT, WORD)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUInt, SHORT, UINT)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToULong, SHORT, ULONG)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToUIntPtr, SHORT, UINT_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToULongPtr, SHORT, ULONG_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToDWordPtr, SHORT, DWORD_PTR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(ShortToULongLong, SHORT, ULONGLONG)
+__MINGW_INTSAFE_CHAR_API __MINGW_INTSAFE_CONV(ShortToChar, SHORT, CHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToUChar, UINT, UCHAR)
+__MINGW_INTSAFE_API __MINGW_INTSAFE_CONV(UIntToUInt8, UINT, UINT8)
+__MINGW_INTSAFE_API 

Re: [Mingw-w64-public] [PATCH] headers: Update d2d1.h enums with missing members.

2019-01-27 Thread JonY via Mingw-w64-public
On 1/27/19 4:16 PM, Nikolay Sivov wrote:
> ---
> 

Please split functionality and styling changes into separate patches,
and explain why the _StructName variants are removed.


signature.asc
Description: OpenPGP digital signature
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] [PATCH] crt/lib-common: Add more advapi32 exported functions

2019-01-27 Thread Martin Storsjö

On Mon, 28 Jan 2019, Biswapriyo Nath wrote:


Add more advapi32 exported functions.


This looks probably ok to me. I'll (try to remember to) apply it tomorrow 
unless others have comments.


// Martin



___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] --enable-experimental breaks as

2019-01-27 Thread Mateusz
W dniu 27.01.2019 o 18:40, Christer Solskogen pisze:
> On 26.01.2019 01:01, Mateusz wrote:
> 
>> For me it looks OK.
> 
> Which version of binutils? It's fixed in master branch.

$ gcc -v && ld -v
Using built-in specs.
COLLECT_GCC=f:\msys\m64-83\bin\gcc.exe
COLLECT_LTO_WRAPPER=f:/msys/m64-83/bin/../libexec/gcc/x86_64-w64-mingw32/8.2.1/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: /home/ma/m/source/gcc-8/configure --host=x86_64-w64-mingw32 
--target=x86_64-w64-mingw32 --disable-nls --enable-languages=c,c++,objc,obj-c++ 
--with-gmp=/home/ma/m/build/for_target --with-mpfr=/home/ma/m/build/for_target 
--with-mpc=/home/ma/m/build/for_target --with-isl=/home/ma/m/build/for_target 
--enable-twoprocess --disable-libstdcxx-pch --disable-win32-registry 
--disable-shared --enable-fully-dynamic-string --prefix=/home/ma/m/target 
--with-sysroot=/home/ma/m/target
Thread model: win32
gcc version 8.2.1 20190125 (GCC)
GNU ld (GNU Binutils) 2.32.51.20190125

It is fixed for binary zero in *.s file, but there is no binary zero in my *.s 
file.

> And was the native compiler cross compiled from Linux?

Yes, Ubuntu 16.04, build script close to 
https://sourceforge.net/projects/mingw-w64-dgn/
Cross compiler was build without '--enable-experimental --enable-wildcard'.
I've added '--enable-experimental --enable-wildcard' options only to 
rebuild_target.sh
it is close to 
https://sourceforge.net/p/mingw-w64-dgn/code/HEAD/tree/trunk/rebuild_target.sh

> Try with a simple hello world in C (or C++) (without the #define)

All OK, without binary 0.

Regards
Mateusz



___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH] crt/lib-common: Add more advapi32 exported functions

2019-01-27 Thread Biswapriyo Nath
Add more advapi32 exported functions.
From 39bf6127b260b51bd304d0936bbb66ed02e7c3ed Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath 
Date: Mon, 28 Jan 2019 00:15:36 +0530
Subject: [PATCH] crt/lib-common: Add more advapi32 exported functions

Signed-off-by: Biswapriyo Nath 
---
 mingw-w64-crt/lib-common/advapi32.def.in | 9 +
 .../lib-common/api-ms-win-eventing-controller-l1-1-0.def | 1 +
 2 files changed, 10 insertions(+)

diff --git a/mingw-w64-crt/lib-common/advapi32.def.in b/mingw-w64-crt/lib-common/advapi32.def.in
index db6f3cd7..b4e2aa21 100644
--- a/mingw-w64-crt/lib-common/advapi32.def.in
+++ b/mingw-w64-crt/lib-common/advapi32.def.in
@@ -149,6 +149,7 @@ CreateProcessWithTokenW
 CreateRestrictedToken
 CreateServiceA
 CreateServiceW
+CreateServiceEx
 CreateTraceInstanceId
 CreateWellKnownSid
 CredBackupCredentials
@@ -235,6 +236,7 @@ CryptSignHashA
 CryptSignHashW
 CryptVerifySignatureA
 CryptVerifySignatureW
+CveEventWrite
 DecryptFileA
 DecryptFileW
 DeleteAce
@@ -519,6 +521,7 @@ NotifyChangeEventLog
 NotifyServiceStatusChange
 NotifyServiceStatusChangeA
 NotifyServiceStatusChangeW
+NpGetUserName
 ObjectCloseAuditAlarmA
 ObjectCloseAuditAlarmW
 ObjectDeleteAuditAlarmA
@@ -581,6 +584,7 @@ ProcessIdleTasksW
 ProcessTrace
 QueryAllTracesA
 QueryAllTracesW
+QueryLocalUserServiceName
 QueryRecoveryAgentsOnEncryptedFile
 QuerySecurityAccessMask
 QueryServiceConfig2A
@@ -595,6 +599,9 @@ QueryServiceStatus
 QueryServiceStatusEx
 QueryTraceA
 QueryTraceW
+QueryTraceProcessingHandle
+QueryUserServiceName
+QueryUserServiceNameForContext
 QueryUsersOnEncryptedFile
 ReadEncryptedFileRaw
 ReadEventLogA
@@ -694,6 +701,8 @@ RegisterWaitChainCOMCallback
 RemoteRegEnumKeyWrapper
 RemoteRegEnumValueWrapper
 RemoteRegQueryInfoKeyWrapper
+RemoteRegQueryMultipleValues2Wrapper
+RemoteRegQueryMultipleValuesWrapper
 RemoteRegQueryValueWrapper
 RemoveTraceCallback
 RemoveUsersFromEncryptedFile
diff --git a/mingw-w64-crt/lib-common/api-ms-win-eventing-controller-l1-1-0.def b/mingw-w64-crt/lib-common/api-ms-win-eventing-controller-l1-1-0.def
index 533914e8..9e0b9b03 100644
--- a/mingw-w64-crt/lib-common/api-ms-win-eventing-controller-l1-1-0.def
+++ b/mingw-w64-crt/lib-common/api-ms-win-eventing-controller-l1-1-0.def
@@ -6,3 +6,4 @@ ControlTraceW
 EnableTraceEx2
 StartTraceW
 StopTraceW
+TraceQueryInformation
-- 
2.20.1

___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] --enable-experimental breaks as

2019-01-27 Thread Christer Solskogen

On 26.01.2019 01:01, Mateusz wrote:


For me it looks OK.


Which version of binutils? It's fixed in master branch.

And was the native compiler cross compiled from Linux?

Try with a simple hello world in C (or C++) (without the #define)





___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] [PATCH] headers: Update d2d1.h enums with missing members.

2019-01-27 Thread Nikolay Sivov
---
From 789bdbbfa35f0145a656d31a06b4bb54d7181155 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov 
Date: Sun, 27 Jan 2019 19:15:17 +0300
Subject: [PATCH] headers: Update d2d1.h enums with missing members.

Signed-off-by: Nikolay Sivov 
---
 mingw-w64-headers/include/d2d1.h | 182 ++-
 1 file changed, 107 insertions(+), 75 deletions(-)

diff --git a/mingw-w64-headers/include/d2d1.h b/mingw-w64-headers/include/d2d1.h
index ea8a0329..765c6809 100644
--- a/mingw-w64-headers/include/d2d1.h
+++ b/mingw-w64-headers/include/d2d1.h
@@ -190,21 +190,24 @@ typedef struct IDWriteTextLayout IDWriteTextLayout;
 typedef struct IDWriteFontFace IDWriteFontFace;
 #endif
 
-typedef enum _D2D1_ALPHA_MODE {
+typedef enum D2D1_ALPHA_MODE {
   D2D1_ALPHA_MODE_UNKNOWN = 0,
   D2D1_ALPHA_MODE_PREMULTIPLIED   = 1,
   D2D1_ALPHA_MODE_STRAIGHT= 2,
-  D2D1_ALPHA_MODE_IGNORE  = 3 
+  D2D1_ALPHA_MODE_IGNORE  = 3,
+  D2D1_ALPHA_MODE_FORCE_DWORD = 0x
 } D2D1_ALPHA_MODE;
 
-typedef enum _D2D1_ANTIALIAS_MODE {
+typedef enum D2D1_ANTIALIAS_MODE {
   D2D1_ANTIALIAS_MODE_PER_PRIMITIVE   = 0,
-  D2D1_ANTIALIAS_MODE_ALIASED = 1 
+  D2D1_ANTIALIAS_MODE_ALIASED = 1,
+  D2D1_ANTIALIAS_MODE_FORCE_DWORD = 0x
 } D2D1_ANTIALIAS_MODE;
 
-typedef enum _D2D1_ARC_SIZE {
-  D2D1_ARC_SIZE_SMALL   = 0,
-  D2D1_ARC_SIZE_LARGE   = 1 
+typedef enum D2D1_ARC_SIZE {
+  D2D1_ARC_SIZE_SMALL   = 0,
+  D2D1_ARC_SIZE_LARGE   = 1,
+  D2D1_ARC_SIZE_FORCE_DWORD = 0x
 } D2D1_ARC_SIZE;
 
 enum {
@@ -218,164 +221,193 @@ enum {
 D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR   = 7
 };
 
-typedef enum _D2D1_BITMAP_INTERPOLATION_MODE {
+typedef enum D2D1_BITMAP_INTERPOLATION_MODE {
   D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR   = 0,
-  D2D1_BITMAP_INTERPOLATION_MODE_LINEAR = 1 
+  D2D1_BITMAP_INTERPOLATION_MODE_LINEAR = 1,
+  D2D1_BITMAP_INTERPOLATION_MODE_FORCE_DWORD= 0x
 } D2D1_BITMAP_INTERPOLATION_MODE;
 
-typedef enum _D2D1_CAP_STYLE {
-  D2D1_CAP_STYLE_FLAT   = 0,
-  D2D1_CAP_STYLE_SQUARE = 1,
-  D2D1_CAP_STYLE_ROUND  = 2,
-  D2D1_CAP_STYLE_TRIANGLE   = 3 
+typedef enum D2D1_CAP_STYLE {
+  D2D1_CAP_STYLE_FLAT= 0,
+  D2D1_CAP_STYLE_SQUARE  = 1,
+  D2D1_CAP_STYLE_ROUND   = 2,
+  D2D1_CAP_STYLE_TRIANGLE= 3,
+  D2D1_CAP_STYLE_FORCE_DWORD = 0x
 } D2D1_CAP_STYLE;
 
-typedef enum _D2D1_COMBINE_MODE {
+typedef enum D2D1_COMBINE_MODE {
   D2D1_COMBINE_MODE_UNION   = 0,
   D2D1_COMBINE_MODE_INTERSECT   = 1,
   D2D1_COMBINE_MODE_XOR = 2,
-  D2D1_COMBINE_MODE_EXCLUDE = 3 
+  D2D1_COMBINE_MODE_EXCLUDE = 3,
+  D2D1_COMBINE_MODE_FORCE_DWORD = 0x
 } D2D1_COMBINE_MODE;
 
-typedef enum _D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS {
+typedef enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS {
   D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE = 0x,
-  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE   = 0x0001 
+  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE   = 0x0001,
+  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_FORCE_DWORD  = 0x
 } D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS;
 
-typedef enum _D2D1_DASH_STYLE {
+typedef enum D2D1_DASH_STYLE {
   D2D1_DASH_STYLE_SOLID  = 0,
   D2D1_DASH_STYLE_DASH   = 1,
   D2D1_DASH_STYLE_DOT= 2,
   D2D1_DASH_STYLE_DASH_DOT   = 3,
   D2D1_DASH_STYLE_DASH_DOT_DOT   = 4,
-  D2D1_DASH_STYLE_CUSTOM = 5 
+  D2D1_DASH_STYLE_CUSTOM = 5,
+  D2D1_DASH_STYLE_FORCE_DWORD= 0x
 } D2D1_DASH_STYLE;
 
-typedef enum _D2D1_DC_INITIALIZE_MODE {
-  D2D1_DC_INITIALIZE_MODE_COPY= 0,
-  D2D1_DC_INITIALIZE_MODE_CLEAR   = 1 
+typedef enum D2D1_DC_INITIALIZE_MODE {
+  D2D1_DC_INITIALIZE_MODE_COPY= 0,
+  D2D1_DC_INITIALIZE_MODE_CLEAR   = 1,
+  D2D1_DC_INITIALIZE_MODE_FORCE_DWORD = 0x
 } D2D1_DC_INITIALIZE_MODE;
 
-typedef enum _D2D1_DEBUG_LEVEL {
+typedef enum D2D1_DEBUG_LEVEL {
   D2D1_DEBUG_LEVEL_NONE  = 0,
   D2D1_DEBUG_LEVEL_ERROR = 1,
   D2D1_DEBUG_LEVEL_WARNING   = 2,
-  D2D1_DEBUG_LEVEL_INFORMATION   = 3 
+  D2D1_DEBUG_LEVEL_INFORMATION   = 3,
+  D2D1_DEBUG_LEVEL_FORCE_DWORD   = 0x
 } D2D1_DEBUG_LEVEL;
 
-typedef enum _D2D1_DRAW_TEXT_OPTIONS {
-  D2D1_DRAW_TEXT_OPTIONS_NO_SNAP   = 0x0001,
-  D2D1_DRAW_TEXT_OPTIONS_CLIP  = 0x0002,
-  D2D1_DRAW_TEXT_OPTIONS_NONE  = 0x 
+typedef enum D2D1_DRAW_TEXT_OPTIONS {
+  D2D1_DRAW_TEXT_OPTIONS_NO_SNAP   = 0x0001,
+  D2D1_DRAW_TEXT_OPTIONS_CLIP  = 0x0002,
+  D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x0004,
+  D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING = 0x0008,
+  D2D1_DRAW_TEXT_OPTIONS_NONE  = 0x,
+  D2D1_DRAW_TEXT_OPTIONS_FORCE_DWORD   = 0x
 } D2D1_DRAW_TEXT_OPTIONS;
 
-typedef enum _D2D1_EXTEND_MODE {
-