• Windows 驱动入门(二)代码结构


    windows驱动程序基础。转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38777641

    windows驱动程序结构:

    我想说的是windows驱动程序的结构和C++的程序结构是一样的,在你知道这一点以后你就会认为简单了很多。

    首先在一个头文件中面做一些必要的预处理。然后定义会用到的设备扩展结构体(相当于Class);接下来就是函数的声明。

    当这一切结束以后,我们就在.cpp文件中面实现这些函数。可是不一样的地方要说一下:

    1.这里声明的结构体是用来存储设备的信息的。

    2.声明的函数在结构体外面,为了和C兼容要使用extern“c”;

    3.声明的函数一般来说分为,函数的入口(相当于main函数),设备创建函数。设备的卸载3个部分。

    以下我们来看一下作者书里面的样例:(备注,最后几行是我iker对比作者的两个样例以后加上的


    #001   /**************************************************************
    #002   * 文件名:Driver.h                                             
    #003   * 作    者:张帆
    #004   * 完毕日期:2007-11-1
    #005   ************************************************************/
    #006   #pragma once
    #007  
    #008   #ifdef __cplusplus
    #009   extern "C"
    #010   {
    #011   #endif
    #012   #include <NTDDK.h>
    #013   #ifdef __cplusplus
    #014   }
    #015   #endif
    #016  
    #017   #define PAGEDCODE code_seg("PAGE")
    #018   #define LOCKEDCODE code_seg()
    #019   #define INITCODE code_seg("INIT")
    #020   
    021   #define PAGEDDATA data_seg("PAGE")
    #022   #define LOCKEDDATA data_seg()
    #023   #define INITDATA data_seg("INIT")
    #024  
    #025   #define arraysize(p) (sizeof(p)/sizeof((p)[0]))
    #026 
      以上是预编译处理:导入了NT驱动须要的头文件。兼容到C++语言,另一些宏定义

    #027   typedef struct _DEVICE_EXTENSION {
    #028    PDEVICE_OBJECT pDevice;
    #029    UNICODE_STRING ustrDeviceName;  //设备名称
    #030    UNICODE_STRING ustrSymLinkName; //符号链接名
    #031   } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
    #032  
    #033   // 函数声明
    #034  
    #035   NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);
    //这里是声明创建一个设备的函数 #036   VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject);//这里是
    声明一个卸载驱动的函数
    #037   NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
    #038            IN PIRP pIrp);//这里是声明一个默认派遣的函数
    #039 
    #040   extern "C"
    #041   NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
    #042                        IN PUNICODE_STRING RegistryPath);
    //这里是定义函数的入口,相当于main函数
    接下来就是在.cpp文件中面实现这几个函数,大家应该也非常清楚了,就不再赘述!


    參考:

    http://book.51cto.com/art/200807/79760.htm

    《 Windows 驱动开发技术具体解释 》

  • 相关阅读:
    大显示器有用了,看报纸很爽
    密码概率(转)
    什么是社会工程攻击(转)
    C# 在购物车系统中生成不重复的订单号[转]
    jQuery选择器总结[转]
    多种下拉框功能插件
    异步提交
    MVC3开发常常遇到的问题及常常使用到的代码片段
    MVC3怎样设置ntext字段?
    jQuery子页面刷新父页面局部刷新+整体刷新 [转]
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6782931.html
Copyright © 2020-2023  润新知