Coder Social home page Coder Social logo

kouzhudong / libdrv Goto Github PK

View Code? Open in Web Editor NEW
30.0 4.0 25.0 1.12 MB

Static Library For Windows Drivers

License: MIT License

C 26.21% C++ 73.64% Assembly 0.02% RenderScript 0.01% PowerShell 0.12%
hypervisor virtualization apc file gdt idt hash image wsk tdi wfp nids pe object registry ssdt thread teb peb

libdrv's Introduction

libdrv

Static Library For Windows KernelMode Drivers

创建本工程的目的。

有一些代码是几乎每个工程都用到的,很常见的代码。

把这些代码提炼出来,精简下,且适用于各个工程,且有通用性和稳定性。

这是创建本工程的目的。

为何不用DLL,因为在驱动里DLL还得注册。


弄成静态库使用很方便,只需一个h和lib即可。

注意本lib用到不少的系统的lib,所以你使用的工程(如果用到了相应的功能)也应该包含他们,如:

  • $(DDK_LIB_PATH)ntoskrnl.lib
  • $(DDK_LIB_PATH)hal.lib
  • $(DDK_LIB_PATH)wmilib.lib
  • $(DDK_LIB_PATH)\fltMgr.lib
  • $(DDK_LIB_PATH)\Ksecdd.lib
  • $(DDK_LIB_PATH)\ndis.lib
  • $(DDK_LIB_PATH)\wdmsec.lib
  • $(DDK_LIB_PATH)\fwpkclnt.lib
  • $(SDK_LIB_PATH)\uuid.lib
  • $(DDK_LIB_PATH)\Netio.lib
  • $(DDK_LIB_PATH)\Ntstrsafe.lib
  • $(DDK_LIB_PATH)\Aux_klib.lib

本库的设计的几个规则:

  1. 尽量不调用日志函数。刚开始的时候还考虑是否使用日志,以及何种日志。
  2. 因为上一条,所以代码失败要返回详细的信息,也就是失败的原因。
  3. 因为上两条的原因,所以使用者要检查返回值,并记录日志。
  4. 代码不会主动抛异常。代码尽量屏蔽异常。但是不代表代码中没有异常。代码尽量捕捉异常并返回信息。
  5. 导出(对外公开的)的函数都是NTAPI调用格式。
  6. 代码尽量使用SAL(source-code annotation language:源代码批注语言)。
  7. 代码格式类似go和python.
  8. 代码尽量不使用硬编码。
  9. 代码开启静态的语法检查(启用Microsoft Code Analysis, 关闭Clang-Tidy)。
  10. 警告的等级是4级,且将警告视为错误。
  11. 代码的运行要过:驱动程序校验器/应用程序校验器/gflags.exe.
  12. 禁止使用断言(估计现在代码中还有不少断言)。
  13. 接口的参数只有基本类型和指针(没有类,模板和引用)。
  14. 只依赖操作系统的库,不再依赖第三方的库,包括CRT。
  15. 所有接口皆为C接口,即EXTERN_C。
  16. C语言标准选择:ISO C17 (2018)标准 (/std:c17)。
  17. C++语言标准选择:ISO C++17 标准 (/std:c++17) 或者:预览 - 最新 C++ 工作草案中的功能 (/std:c++latest)。
  18. 稳定性第一,兼容性第二,扩展性第三,速度第四,可读性第五。

接口文件说明:

  1. lib.h文件用于c/cpp
  2. cpp.h 仅仅cpp, 不支持c.
  3. asm.inc文件用于asm
  4. libdrv.rs文件用于rust

注意: 接口或者回调的调用方式。__stdcall or __cdecl or __fastcall。


所有接口皆为C接口
要实现这句话,需要把函数的声明加上EXTERN_C
本工程是在头文件中实施的。

关于这个(是不是导出的C函数)检查办法是:

  1. 用7z打开lib,
  2. 然后解压,
  3. 然后用notepad++所有的txt文件
  4. 最后搜索哪个函数名
  5. 看函数名即知

今天安装了VS2022+WDK10.0.22621.0,经管稍微修改(代码静态检查的API有变化)也能编译,且不能编译x86.
所以还是改为仅支持VS2019+WDK10.0.19041.0吧!
DDK7600.16385.1也暂不支持。


libdrv's People

Contributors

kouzhudong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.