summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPecio <szczepan.pecio@intel.com>2018-03-19 09:34:35 +0100
committerRichard Levitte <levitte@openssl.org>2018-04-03 18:39:22 +0200
commitb2b4dfcca6cf2230107a711f7af1cd8ee3f74229 (patch)
tree90c4e384e6b426a40a978ddd294cc6ca71223fb6
parentfc1d73bb0c4f2977c999031debc7946c9b29fc8b (diff)
Enabled OneCore Conf for Console Apps (removed nonUniversal API)
Reviewed-by: Rich Salz <rsalz@openssl.org> Reviewed-by: Andy Polyakov <appro@openssl.org> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5625)
-rw-r--r--Configurations/50-win-onecore.conf22
-rw-r--r--crypto/cryptlib.c45
2 files changed, 53 insertions, 14 deletions
diff --git a/Configurations/50-win-onecore.conf b/Configurations/50-win-onecore.conf
index 1207621e67..c71d3646f2 100644
--- a/Configurations/50-win-onecore.conf
+++ b/Configurations/50-win-onecore.conf
@@ -4,7 +4,11 @@
# Mobile[?] Windows editions. It's a set up "umbrella" libraries that
# export subset of Win32 API that are common to all Windows 10 devices.
#
-# TODO: drop onecore_downlevel.lib.
+# OneCore Configuration temporarly dedicated for console applications
+# due to disabled event logging, which is incompatible with one core.
+# Error messages are provided via standard error only.
+# TODO: extend error handling to use ETW based eventing
+# (Or rework whole error messaging)
my %targets = (
"VC-WIN32-ONECORE" => {
@@ -13,12 +17,14 @@ my %targets = (
# hidden reference to kernel32.lib, but we don't actually want
# it in "onecore" build.
lflags => add("/NODEFAULTLIB:kernel32.lib"),
- ex_libs => "onecore.lib onecore_downlevel.lib",
+ defines => add("OPENSSL_SYS_WIN_CORE"),
+ ex_libs => "onecore.lib",
},
"VC-WIN64A-ONECORE" => {
inherit_from => [ "VC-WIN64A" ],
lflags => add("/NODEFAULTLIB:kernel32.lib"),
- ex_libs => "onecore.lib onecore_downlevel.lib",
+ defines => add("OPENSSL_SYS_WIN_CORE"),
+ ex_libs => "onecore.lib",
},
# Windows on ARM targets. ARM compilers are additional components in
@@ -39,18 +45,20 @@ my %targets = (
"VC-WIN32-ARM" => {
inherit_from => [ "VC-noCE-common" ],
- defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE"),
+ defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE",
+ "OPENSSL_SYS_WIN_CORE"),
bn_ops => "BN_LLONG RC4_CHAR EXPORT_VAR_AS_FN",
lflags => add("/NODEFAULTLIB:kernel32.lib"),
- ex_libs => "onecore.lib onecore_downlevel.lib",
+ ex_libs => "onecore.lib",
multilib => "-arm",
},
"VC-WIN64-ARM" => {
inherit_from => [ "VC-noCE-common" ],
- defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE"),
+ defines => add("_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE",
+ "OPENSSL_SYS_WIN_CORE"),
bn_ops => "SIXTY_FOUR_BIT RC4_CHAR EXPORT_VAR_AS_FN",
lflags => add("/NODEFAULTLIB:kernel32.lib"),
- ex_libs => "onecore.lib onecore_downlevel.lib",
+ ex_libs => "onecore.lib",
multilib => "-arm64",
},
);
diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c
index a4d96d868e..0470597b6e 100644
--- a/crypto/cryptlib.c
+++ b/crypto/cryptlib.c
@@ -120,6 +120,14 @@ void OPENSSL_cpuid_setup(void)
# endif
# if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
+# ifdef OPENSSL_SYS_WIN_CORE
+
+int OPENSSL_isservice(void)
+{
+ /* OneCore API cannot interact with GUI */
+ return 1;
+}
+# else
int OPENSSL_isservice(void)
{
HWINSTA h;
@@ -160,7 +168,7 @@ int OPENSSL_isservice(void)
len++, len &= ~1; /* paranoia */
name[len / sizeof(WCHAR)] = L'\0'; /* paranoia */
-# if 1
+# if 1
/*
* This doesn't cover "interactive" services [working with real
* WinSta0's] nor programs started non-interactively by Task Scheduler
@@ -168,14 +176,15 @@ int OPENSSL_isservice(void)
*/
if (wcsstr(name, L"Service-0x"))
return 1;
-# else
+# else
/* This covers all non-interactive programs such as services. */
if (!wcsstr(name, L"WinSta0"))
return 1;
-# endif
+# endif
else
return 0;
}
+# endif
# else
int OPENSSL_isservice(void)
{
@@ -272,6 +281,24 @@ void OPENSSL_showfatal(const char *fmta, ...)
va_end(ap);
# if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333
+# ifdef OPENSSL_SYS_WIN_CORE
+ /* ONECORE is always NONGUI and NT >= 0x0601 */
+
+ /*
+ * TODO: (For non GUI and no std error cases)
+ * Add event logging feature here.
+ */
+
+# if !defined(NDEBUG)
+ /*
+ * We are in a situation where we tried to report a critical
+ * error and this failed for some reason. As a last resort,
+ * in debug builds, send output to the debugger or any other
+ * tool like DebugView which can monitor the output.
+ */
+ OutputDebugString(buf);
+# endif
+# else
/* this -------------v--- guards NT-specific calls */
if (check_winnt() && OPENSSL_isservice() > 0) {
HANDLE hEventLog = RegisterEventSource(NULL, _T("OpenSSL"));
@@ -281,7 +308,7 @@ void OPENSSL_showfatal(const char *fmta, ...)
if (!ReportEvent(hEventLog, EVENTLOG_ERROR_TYPE, 0, 0, NULL,
1, 0, &pmsg, NULL)) {
-#if defined(DEBUG)
+# if !defined(NDEBUG)
/*
* We are in a situation where we tried to report a critical
* error and this failed for some reason. As a last resort,
@@ -289,14 +316,18 @@ void OPENSSL_showfatal(const char *fmta, ...)
* tool like DebugView which can monitor the output.
*/
OutputDebugString(pmsg);
-#endif
+# endif
}
(void)DeregisterEventSource(hEventLog);
}
- } else
-# endif
+ } else {
MessageBox(NULL, buf, _T("OpenSSL: FATAL"), MB_OK | MB_ICONERROR);
+ }
+# endif
+# else
+ MessageBox(NULL, buf, _T("OpenSSL: FATAL"), MB_OK | MB_ICONERROR);
+# endif
}
#else
void OPENSSL_showfatal(const char *fmta, ...)