Skip to content

Commit

Permalink
Merge pull request #16 from ntoskrnl7/refactoring
Browse files Browse the repository at this point in the history
Remove unnecessary files
  • Loading branch information
ntoskrnl7 authored May 28, 2022
2 parents c5f9d04 + 86b4a02 commit b3906d5
Show file tree
Hide file tree
Showing 48 changed files with 504 additions and 89,107 deletions.
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ else()
set(LDK_USE_RAISE_EXCEPTION OFF)
set(LDK_USE_RTL_RAISE_EXCEPTION OFF)
endif()
CPMAddPackage("gh:ntoskrnl7/[email protected].2")
CPMAddPackage("gh:ntoskrnl7/[email protected].3")

CPMAddPackage("gh:ntoskrnl7/FindWDK#master")
list(APPEND CMAKE_MODULE_PATH "${FindWDK_SOURCE_DIR}/cmake")
Expand Down Expand Up @@ -129,10 +129,10 @@ wdk_add_library(
#
get_target_property(INC_DIR_TMP crtsys INCLUDE_DIRECTORIES)
if (UCXXRT_ENABLED)
set_property(TARGET crtsys PROPERTY INCLUDE_DIRECTORIES "${Ldk_SOURCE_DIR}/include/Ldk;${ucxxrt_SOURCE_DIR}/src;${ucxxrt_SOURCE_DIR}/src/vcruntime;${CMAKE_CURRENT_SOURCE_DIR}/src/custom/winsdk/include/um;$(VC_IncludePath);$(WindowsSDK_IncludePath);${INC_DIR_TMP}")
set_property(TARGET crtsys PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/src/custom/winsdk/include/um/crtsys;${Ldk_SOURCE_DIR}/include/Ldk;${ucxxrt_SOURCE_DIR}/src;${ucxxrt_SOURCE_DIR}/src/vcruntime;$(VC_IncludePath);$(WindowsSDK_IncludePath);${INC_DIR_TMP}")
target_include_directories(crtsys PRIVATE "${ucxxrt_SOURCE_DIR}")
else()
set_property(TARGET crtsys PROPERTY INCLUDE_DIRECTORIES "${Ldk_SOURCE_DIR}/include/Ldk;${CMAKE_CURRENT_SOURCE_DIR}/src/custom/winsdk/include/um;$(VC_IncludePath);$(WindowsSDK_IncludePath);${INC_DIR_TMP}")
set_property(TARGET crtsys PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/src/custom/winsdk/include/um/crtsys;${Ldk_SOURCE_DIR}/include/Ldk;$(VC_IncludePath);$(WindowsSDK_IncludePath);${INC_DIR_TMP}")
endif()

target_include_directories(crtsys PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src/custom/msvc/${MSVC_TOOLSET_VERSION}/include")
Expand Down
115 changes: 76 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@
- [Build](#build)
- [Test](#test)
- [Usage](#usage)
- [CMake](#cmake)
- [CMakeLists.txt](#cmakeliststxt)
- [main.cpp](#maincpp)
- [TODO](#todo)

## Overview
Expand Down Expand Up @@ -175,6 +172,9 @@ crtsys가 장점은 아래와 같습니다.

이 프로젝트를 직접 빌드하여 lib와 include를 사용하시려면 Microsoft STL 사용을 위해서 포함 경로 설정 및 전처리기 설정 등 복잡한 사전 작업이 필요하므로 **직접 빌드하여 사용하는것보다는 [Usage](#usage)을 참고하여 CPM을 통해서 사용하시는것을 권장합니다.**

그리고 SDK와 WDK의 버전이 다르면 빌드가 실패할 가능성이 높으므로
**가능하다면 SDK와 WDK의 버전이 같은 환경에서 빌드하는것을 권장합니다.**

빌드 방법은 아래와 같습니다.

```Batch
Expand Down Expand Up @@ -237,61 +237,98 @@ lib 디렉토리와 include 디렉토리를 타 프로젝트에서 사용하시
CMake를 사용하는것을 권장합니다.
### CMake
1. 프로젝트 디렉토리를 생성 후 이동하시기 바랍니다.
CMake를 사용하신다면 아래와 같이 CMakeLists.txt를 만드시기 바랍니다.
```batch
mkdir test-project
cd test-project
```

#### CMakeLists.txt
2. CPM을 프로젝트 디렉토리에 다운로드 받으시기 바랍니다.

```CMake
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
```batch
mkdir -p cmake
wget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
curl -o cmake/CPM.cmake -LJO https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
```
project(crtsys_test LANGUAGES C)
3. 프로젝트 디렉토리에 아래와 같은 파일을 작성해주시기 바랍니다.
include(cmake/CPM.cmake)
- 디렉토리 구조
set(CRTSYS_NTL_MAIN ON) # use ntl::main
CPMAddPackage("gh:ntoskrnl7/[email protected]")
include(${crtsys_SOURCE_DIR}/cmake/CrtSys.cmake)
```tree
📦test-project
┣ 📂src
┃ ┗ 📜main.cpp
┗ 📜CMakeLists.txt
```
# add driver
crtsys_add_driver(crtsys_test main.cpp)
```
- CMakeLists.txt
### main.cpp
```CMake
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
간단한 샘플 코드입니다.
project(crtsys_test LANGUAGES C)
- 아래와 같이 CRTSYS_NTL_MAIN을 활성화한다면 ntl::main을 진입점으로 정의하시기 바랍니다. **(권장)**
include(cmake/CPM.cmake)
```CMake
set(CRTSYS_NTL_MAIN ON)
```
set(CRTSYS_NTL_MAIN ON) # use ntl::main
CPMAddPackage("gh:ntoskrnl7/[email protected]")
include(${crtsys_SOURCE_DIR}/cmake/CrtSys.cmake)
- 만약 아래와 같이 CRTSYS_NTL_MAIN을 비활성화한다면 기존과 깉이 DriverEntry를 진입점으로 정의하시기 바랍니다.
# add driver
crtsys_add_driver(crtsys_test main.cpp)
```
```CMake
set(CRTSYS_NTL_MAIN OFF)
```
- src/main.cpp
아래는 ntl::main를 진입점으로 설정한 프로젝트의 예제 코드입니다.
- 아래와 같이 CRTSYS_NTL_MAIN을 활성화한다면 ntl::main을 진입점으로 정의하시기 바랍니다. **(권장)**
```C
#include <iostream>
#include <ntl/driver>
```CMake
set(CRTSYS_NTL_MAIN ON)
```
ntl::status ntl::main(ntl::driver &driver, const std::wstring &registry_path) {
std::wcout << "load (registry_path :" << registry_path << ")\n";
- 만약 아래와 같이 CRTSYS_NTL_MAIN을 비활성화한다면 기존과 깉이 DriverEntry를 진입점으로 정의하시기 바랍니다.
// TODO
```CMake
set(CRTSYS_NTL_MAIN OFF)
```
driver.on_unload([registry_path]() {
std::wcout << "unload (registry_path :" << registry_path << ")\n";
});
아래는 ntl::main를 진입점으로 설정한 프로젝트의 예제 코드입니다.
return status::ok();
}
```
```C
#include <iostream>
#include <ntl/driver>
ntl::status ntl::main(ntl::driver &driver, const std::wstring &registry_path) {
std::wcout << "load (registry_path :" << registry_path << ")\n";
// TODO
driver.on_unload([registry_path]() {
std::wcout << "unload (registry_path :" << registry_path << ")\n";
});
return status::ok();
}
```
1. 빌드를 수행합니다.
```batch
cmake -S . -B build
cmake --build build
```

2. 드라이버가 정상적으로 시작되고 종료되는지 확인하시기 바랍니다.

```batch
sc create CrtSysTest binpath= "빌드된 crtsys_test.sys의 전체 경로" displayname= "crtsys test" start= demand type= kernel
sc start CrtSysTest
sc stop CrtSysTest
sc delete CrtSysTest
```

## TODO

Expand Down
Loading

0 comments on commit b3906d5

Please sign in to comment.