aboutsummaryrefslogtreecommitdiffstats
path: root/downlevelshim/shim.c
diff options
context:
space:
mode:
Diffstat (limited to 'downlevelshim/shim.c')
-rw-r--r--downlevelshim/shim.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/downlevelshim/shim.c b/downlevelshim/shim.c
new file mode 100644
index 0000000..d277639
--- /dev/null
+++ b/downlevelshim/shim.c
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright (C) 2018-2021 WireGuard LLC. All Rights Reserved.
+ */
+
+#include <windows.h>
+#include <wintrust.h>
+
+typedef DWORD(DRIVER_FINAL_POLICY_FN)(CRYPT_PROVIDER_DATA *);
+typedef DRIVER_FINAL_POLICY_FN *PDRIVER_FINAL_POLICY_FN;
+
+DRIVER_FINAL_POLICY_FN DriverFinalPolicy;
+
+DWORD
+DriverFinalPolicy(CRYPT_PROVIDER_DATA *ProvData)
+{
+ DWORD OriginalLastError = GetLastError();
+ HMODULE WintrustModule = GetModuleHandleA("WINTRUST.DLL");
+ if (!WintrustModule)
+ return ERROR_INVALID_LIBRARY;
+ PDRIVER_FINAL_POLICY_FN RealDriverFinalPolicy =
+ (PDRIVER_FINAL_POLICY_FN)GetProcAddress(WintrustModule, "DriverFinalPolicy");
+ if (!RealDriverFinalPolicy)
+ return ERROR_INVALID_FUNCTION;
+ DWORD Ret = RealDriverFinalPolicy(ProvData);
+ if (Ret == ERROR_APP_WRONG_OS)
+ {
+ Ret = ERROR_SUCCESS;
+ SetLastError(OriginalLastError);
+ }
+ return Ret;
+}