Add exception support

This commit is contained in:
momo5502 2022-03-15 21:07:47 +01:00
parent 9823c7d62e
commit f744238aad
7 changed files with 65 additions and 1 deletions

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "external/FindWDK"] [submodule "external/FindWDK"]
path = external/FindWDK path = external/FindWDK
url = https://github.com/SergiusTheBest/FindWDK.git url = https://github.com/SergiusTheBest/FindWDK.git
[submodule "external/vcrtl"]
path = external/vcrtl
url = https://github.com/avakar/vcrtl.git

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20) 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) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
project(secret LANGUAGES C CXX) 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) add_subdirectory_and_get_targets("src" SRC_TARGETS)
targets_set_warnings_as_errors(${SRC_TARGETS}) targets_set_warnings_as_errors(${SRC_TARGETS})

View File

@ -33,6 +33,7 @@ endmacro()
macro(enable_driver_support) macro(enable_driver_support)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/external/FindWDK/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/external/FindWDK/cmake")
find_package(WDK REQUIRED) find_package(WDK REQUIRED)
list(REMOVE_ITEM WDK_COMPILE_FLAGS /kernel)
endmacro() endmacro()
########################################## ##########################################

39
external/CMakeLists.txt vendored Normal file
View File

@ -0,0 +1,39 @@
include(ExternalProject)
#############################
set(VCRTL_LIBRARY "${CMAKE_CURRENT_BINARY_DIR}/vcrtl/$<CONFIG>/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 $<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}")

1
external/vcrtl vendored Submodule

@ -0,0 +1 @@
Subproject commit b0e858052f1d2afee3d6ed7182bff399e92793b5

View File

@ -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" "$<TARGET_FILE: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" "$<TARGET_FILE:driver>"
COMMENT "Signing using Nvidia certificate" COMMENT "Signing using Nvidia certificate"
) )
target_link_libraries(driver vcrtl_driver)

View File

@ -8,6 +8,7 @@
#define HELLO_DRV_IOCTL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_NEITHER, FILE_ANY_ACCESS) #define HELLO_DRV_IOCTL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_NEITHER, FILE_ANY_ACCESS)
_Function_class_(DRIVER_DISPATCH) _Function_class_(DRIVER_DISPATCH)
NTSTATUS IrpNotImplementedHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) NTSTATUS IrpNotImplementedHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{ {
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -23,6 +24,7 @@ NTSTATUS IrpNotImplementedHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
} }
_Function_class_(DRIVER_DISPATCH) _Function_class_(DRIVER_DISPATCH)
NTSTATUS IrpCreateCloseHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) NTSTATUS IrpCreateCloseHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{ {
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -56,6 +58,7 @@ VOID IrpUnloadHandler(IN PDRIVER_OBJECT DriverObject)
} }
_Function_class_(DRIVER_DISPATCH) _Function_class_(DRIVER_DISPATCH)
NTSTATUS IrpDeviceIoCtlHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) NTSTATUS IrpDeviceIoCtlHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{ {
ULONG IoControlCode = 0; ULONG IoControlCode = 0;
@ -162,6 +165,18 @@ void unload(PDRIVER_OBJECT DriverObject)
IrpUnloadHandler(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*/) extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRING /*RegistryPath*/)
{ {
DriverObject->DriverUnload = unload; DriverObject->DriverUnload = unload;
@ -182,6 +197,8 @@ extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRI
debug_log("Final i = %i\n", i); debug_log("Final i = %i\n", i);
throw_test();
return create_io_device(DriverObject); return create_io_device(DriverObject);
//return STATUS_SUCCESS; //return STATUS_SUCCESS;