From 928f3aa698d1062142137510837b5a60fbfd23fa Mon Sep 17 00:00:00 2001
From: gmh5225 <2315157@qq.com>
Date: Sun, 12 Feb 2023 20:57:32 +0800
Subject: [PATCH] Update
---
Driver-SoulExtraction.sln | 3 ++
Driver-SoulExtraction.vcxproj | 4 ++
Lib-SoulExtraction/Lib.SoulExtraction.cpp | 66 ++++++++++++++++++++++-
SoulExtraction.cpp | 2 +
4 files changed, 73 insertions(+), 2 deletions(-)
diff --git a/Driver-SoulExtraction.sln b/Driver-SoulExtraction.sln
index 61b4b46..b9b18c8 100644
--- a/Driver-SoulExtraction.sln
+++ b/Driver-SoulExtraction.sln
@@ -4,6 +4,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
VisualStudioVersion = 17.3.32929.385
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Drv-SoulExtraction", "Driver-SoulExtraction.vcxproj", "{D0686DC0-DACB-4F53-B1EC-5B25432A7E60}"
+ ProjectSection(ProjectDependencies) = postProject
+ {CD112165-BCF9-412E-8F79-3AABDB135A13} = {CD112165-BCF9-412E-8F79-3AABDB135A13}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lib-SoulExtraction", "Lib-SoulExtraction\Lib-SoulExtraction.vcxproj", "{CD112165-BCF9-412E-8F79-3AABDB135A13}"
EndProject
diff --git a/Driver-SoulExtraction.vcxproj b/Driver-SoulExtraction.vcxproj
index 5a3cf42..425905d 100644
--- a/Driver-SoulExtraction.vcxproj
+++ b/Driver-SoulExtraction.vcxproj
@@ -103,6 +103,8 @@
false
DriverEntry
+ $(SolutionDir)Output;%(AdditionalLibraryDirectories)
+ Lib-SoulExtraction_$(Configuration)_$(PlatformArchitecture).lib;%(AdditionalDependencies)
@@ -120,6 +122,8 @@
false
DriverEntry
+ $(SolutionDir)Output;%(AdditionalLibraryDirectories)
+ Lib-SoulExtraction_$(Configuration)_$(PlatformArchitecture).lib;%(AdditionalDependencies)
diff --git a/Lib-SoulExtraction/Lib.SoulExtraction.cpp b/Lib-SoulExtraction/Lib.SoulExtraction.cpp
index 19ebfc0..2bed175 100644
--- a/Lib-SoulExtraction/Lib.SoulExtraction.cpp
+++ b/Lib-SoulExtraction/Lib.SoulExtraction.cpp
@@ -375,6 +375,68 @@ UTF8ToUnicodeN(PWSTR uni_dest, ULONG uni_bytes_max, PULONG uni_bytes_written, PC
return status;
}
+NTSTATUS
+UTF8ToUTF16(/*IN*/ char UTF8[_MAX_PATH], /*OUT*/ wchar_t UTF16[_MAX_PATH])
+{
+ NTSTATUS ns = STATUS_UNSUCCESSFUL;
+ ULONG utf16len;
+ WCHAR *buf;
+
+ auto UTF8Len = _strlen_a(UTF8);
+
+ ns = UTF8ToUnicodeN(nullptr, 0, &utf16len, UTF8, UTF8Len);
+ if (!NT_SUCCESS(ns))
+ {
+ return ns;
+ }
+
+ buf = (WCHAR *)UTF16;
+ ns = UTF8ToUnicodeN(buf, utf16len, &utf16len, UTF8, UTF8Len);
+ if (!NT_SUCCESS(ns))
+ {
+ return ns;
+ }
+
+ buf[utf16len / sizeof(WCHAR)] = 0;
+
+ return ns;
+}
+
+NTSTATUS
+UTF16ToAscii(/*IN*/ wchar_t UTF16[_MAX_PATH], /*OUT*/ char Ascii[_MAX_PATH])
+{
+ NTSTATUS ns = STATUS_UNSUCCESSFUL;
+
+ UNICODE_STRING us;
+ ANSI_STRING as;
+ char buf[_MAX_PATH] = {0};
+ SIZE_T utf16len;
+
+ utf16len = _strlen_w(UTF16) * sizeof(wchar_t);
+
+ as.Buffer = buf;
+ as.Length = (USHORT)utf16len;
+ as.MaximumLength = (USHORT)(as.Length + sizeof(wchar_t));
+
+ RtlInitUnicodeString(&us, UTF16);
+
+ do
+ {
+ ns = RtlUnicodeStringToAnsiString(&as, &us, FALSE);
+ if (!NT_SUCCESS(ns))
+ {
+ break;
+ }
+
+ memcpy(Ascii, buf, as.Length);
+
+ buf[as.Length] = 0;
+
+ } while (0);
+
+ return ns;
+}
+
static bool
IsMainCert(
/*IN*/ struct pkcs7_message *Pkcs7,
@@ -528,7 +590,7 @@ GetMainCertInfo(
wchar_t utf16[_MAX_PATH + sizeof(wchar_t)];
RtlSecureZeroMemory(utf16, _MAX_PATH + sizeof(wchar_t));
- auto ns = UTF8ToUTF16(subject, subject_len, utf16, _MAX_PATH);
+ auto ns = UTF8ToUTF16(subject, utf16);
if (NT_SUCCESS(ns))
{
char ascii[_MAX_PATH + sizeof(char)];
@@ -536,7 +598,7 @@ GetMainCertInfo(
RtlSecureZeroMemory(ascii, _MAX_PATH + sizeof(char));
- ns = UTF16ToAscii(utf16, utf16_len, ascii, _MAX_PATH);
+ ns = UTF16ToAscii(utf16, ascii);
if (NT_SUCCESS(ns))
{
auto ascii_len = (unsigned long)_strlen_a(ascii);
diff --git a/SoulExtraction.cpp b/SoulExtraction.cpp
index 516df82..2fe5eab 100644
--- a/SoulExtraction.cpp
+++ b/SoulExtraction.cpp
@@ -1,5 +1,7 @@
#include
+#include "Lib-SoulExtraction/Lib.SoulExtraction.h"
+
#define dprintf(...) DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, __VA_ARGS__)
void