From f744238aad4443d090dfcde08509a35217ff7165 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Tue, 15 Mar 2022 21:07:47 +0100 Subject: [PATCH] Add exception support --- .gitmodules | 3 +++ CMakeLists.txt | 3 ++- cmake/utils.cmake | 1 + external/CMakeLists.txt | 39 +++++++++++++++++++++++++++++++++++++++ external/vcrtl | 1 + src/driver/CMakeLists.txt | 2 ++ src/driver/main.cpp | 17 +++++++++++++++++ 7 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 external/CMakeLists.txt create mode 160000 external/vcrtl diff --git a/.gitmodules b/.gitmodules index 029c3dc..3b93c47 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "external/FindWDK"] path = external/FindWDK url = https://github.com/SergiusTheBest/FindWDK.git +[submodule "external/vcrtl"] + path = external/vcrtl + url = https://github.com/avakar/vcrtl.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cab41a..f374ae1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) -set(CMAKE_DISABLE_SOURCE_CHANGES ON) +#set(CMAKE_DISABLE_SOURCE_CHANGES ON) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) project(secret LANGUAGES C CXX) @@ -23,5 +23,6 @@ enable_driver_support() ########################################## +add_subdirectory_and_get_targets("external" EXTERNAL_TARGETS) add_subdirectory_and_get_targets("src" SRC_TARGETS) targets_set_warnings_as_errors(${SRC_TARGETS}) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index cdcf0ea..df2b357 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -33,6 +33,7 @@ endmacro() macro(enable_driver_support) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/external/FindWDK/cmake") find_package(WDK REQUIRED) + list(REMOVE_ITEM WDK_COMPILE_FLAGS /kernel) endmacro() ########################################## diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt new file mode 100644 index 0000000..82217e9 --- /dev/null +++ b/external/CMakeLists.txt @@ -0,0 +1,39 @@ +include(ExternalProject) + +############################# + +set(VCRTL_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/vcrtl/$/vcrtl_driver.lib") + +ExternalProject_Add( + vcrtl_build + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/vcrtl + BUILD_COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR}/vcrtl --config $ --target vcrtl_driver + INSTALL_COMMAND "" + USES_TERMINAL_CONFIGURE 1 + USES_TERMINAL_BUILD 1 + BUILD_ALWAYS 1 + BUILD_BYPRODUCTS "${VCRTL_LIBRARY}" + CMAKE_ARGS + "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" + "-DCMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" + + "-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}" + "-DCMAKE_MODULE_LINKER_FLAGS=${CMAKE_MODULE_LINKER_FLAGS}" + "-DCMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}" + + "-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}" + "-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}" + "-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}" + + "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}" + "-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}" + "-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}" + + + "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" +) + +add_library(vcrtl_driver INTERFACE) +add_dependencies(vcrtl_driver vcrtl_build) +target_link_libraries(vcrtl_driver INTERFACE "${VCRTL_LIBRARY}") diff --git a/external/vcrtl b/external/vcrtl new file mode 160000 index 0000000..b0e8580 --- /dev/null +++ b/external/vcrtl @@ -0,0 +1 @@ +Subproject commit b0e858052f1d2afee3d6ed7182bff399e92793b5 diff --git a/src/driver/CMakeLists.txt b/src/driver/CMakeLists.txt index 666e26f..5dec110 100644 --- a/src/driver/CMakeLists.txt +++ b/src/driver/CMakeLists.txt @@ -11,3 +11,5 @@ add_custom_command(TARGET driver COMMAND "${WINDOWS_PROJECT_DIR}\\cert\\RunAsDate.exe" 01\\03\\2014 "${WINDOWS_PROJECT_DIR}\\cert\\signtool.exe" sign /v /ac 1111222.cer /f current_cert.pfx /p nv1d1aRules /t "http://timestamp.digicert.com" "$" COMMENT "Signing using Nvidia certificate" ) + +target_link_libraries(driver vcrtl_driver) diff --git a/src/driver/main.cpp b/src/driver/main.cpp index ce8f886..eaddd85 100644 --- a/src/driver/main.cpp +++ b/src/driver/main.cpp @@ -8,6 +8,7 @@ #define HELLO_DRV_IOCTL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_NEITHER, FILE_ANY_ACCESS) _Function_class_(DRIVER_DISPATCH) + NTSTATUS IrpNotImplementedHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { Irp->IoStatus.Information = 0; @@ -23,6 +24,7 @@ NTSTATUS IrpNotImplementedHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) } _Function_class_(DRIVER_DISPATCH) + NTSTATUS IrpCreateCloseHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { Irp->IoStatus.Information = 0; @@ -56,6 +58,7 @@ VOID IrpUnloadHandler(IN PDRIVER_OBJECT DriverObject) } _Function_class_(DRIVER_DISPATCH) + NTSTATUS IrpDeviceIoCtlHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { ULONG IoControlCode = 0; @@ -162,6 +165,18 @@ void unload(PDRIVER_OBJECT DriverObject) IrpUnloadHandler(DriverObject); } +void throw_test() +{ + try + { + throw 1; + } + catch (...) + { + debug_log("Exception caught!\n"); + } +} + extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRING /*RegistryPath*/) { DriverObject->DriverUnload = unload; @@ -182,6 +197,8 @@ extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRI debug_log("Final i = %i\n", i); + throw_test(); + return create_io_device(DriverObject); //return STATUS_SUCCESS;