zoukankan      html  css  js  c++  java
  • 轉:windows XP下driver工作机制简介 By: stationary2009


     

    这里的driver只限于XP(2000也适用)部分,98和winme与xp的差别是很大的。而且是即插即用部分(其实自己开发也只能开发这个部分)。

    如上图,driver的加载和work步骤如下:

    1)当硬件连接到PC或从PC移除时,在硬件上会有信号跳变,BUS Driver会检测到器件的插入和移除,比如DVI的hotplug,再比如USB1.1的1.5K上拉。BUS Driver将调用IOInvalidateDevcieRelations,PNP Manager将知道BUS上的Device关系有所改变。

    2)为了获得新的Device关系,PNP Manager将调用IRP_MN_QUERY_DEVICE_RELATIONS。BUS Driver将会回应其BUS关系(目录)。

    3)一旦得知Device之间的关系,PNP Manager就能容易地确定哪些器件没有被初始化。IRP_MN_QUERY_ID将被发出来获得Device ID。

    4) 一旦获得这些详细信息后,PNP Manager就能确定转载那一类driver了。于是利用INF文件来安装Driver

    5) 接下来进入标准DriverEntry流程来初始化Driver,同时系统调用AddDevice来添加器件。

    6) Device添加完毕后,PNP Manger通过发出IRP_MN_QUERY_RESOURCE_REQUIREMENTS。这个IRP让BUS DRIVER来描述各种资源请求,包括中断,IO端口地址,IO MEMORY地址,DMA通道等等。

    7) PNP Manger针对BUS DRIVER描述的资源请求将资源分配给Driver,配置好Driver后,发出IRP_MN_START_DEVICE,接收到IRP后,Driver配置和连接一些内核资源,然后等待着被使用。

    后面Driver的工作,与System的交互,靠IRP来进行。而user mode与Driver交互也是通过WINAPI->System->Driver;Driver->System->WINAPI来进行。

  • 相关阅读:
    Linux CAT与ECHO命令详解
    查看linux版本信息
    kubernetes(一)
    Chrome不安装插件实现页面长截图
    centos 升级glibc-2.17
    redis修改大key报Argument list too long的解决办法
    mysql打印用户权限的小技巧
    Centos6.5 自带的Python2.6.6 如何安装setuptools和pip
    TCP三次握手过程中涉及的队列知识的学习
    Docker volume权限导致的几个问题
  • 原文地址:https://www.cnblogs.com/yann/p/2055627.html
Copyright © 2011-2022 走看看