-
Notifications
You must be signed in to change notification settings - Fork 34
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #16 from ntoskrnl7/refactoring
Remove unnecessary files
- Loading branch information
Showing
48 changed files
with
504 additions
and
89,107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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") | ||
|
@@ -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") | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,9 +24,6 @@ | |
- [Build](#build) | ||
- [Test](#test) | ||
- [Usage](#usage) | ||
- [CMake](#cmake) | ||
- [CMakeLists.txt](#cmakeliststxt) | ||
- [main.cpp](#maincpp) | ||
- [TODO](#todo) | ||
|
||
## Overview | ||
|
@@ -175,6 +172,9 @@ crtsys가 장점은 아래와 같습니다. | |
|
||
이 프로젝트를 직접 빌드하여 lib와 include를 사용하시려면 Microsoft STL 사용을 위해서 포함 경로 설정 및 전처리기 설정 등 복잡한 사전 작업이 필요하므로 **직접 빌드하여 사용하는것보다는 [Usage](#usage)을 참고하여 CPM을 통해서 사용하시는것을 권장합니다.** | ||
|
||
그리고 SDK와 WDK의 버전이 다르면 빌드가 실패할 가능성이 높으므로 | ||
**가능하다면 SDK와 WDK의 버전이 같은 환경에서 빌드하는것을 권장합니다.** | ||
|
||
빌드 방법은 아래와 같습니다. | ||
|
||
```Batch | ||
|
@@ -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 ®istry_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 ®istry_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 | ||
|
||
|
Oops, something went wrong.