reactos操作系统实现(99)

下面来分析键盘的中断处理函数的实现,如下:#001  BOOLEAN NTAPI#002  i8042KbdInterruptService(#003     IN PKINTERRUPT Interrupt,#004     PVOID Context)#005  {#006     PI8042_KEYBOARD_EXTENSION DeviceExtension;...
阅读(1104) 评论(0)

reactos操作系统实现(98)

 通过上面的分析,发现设置一个中断处理是非常复杂的,下面就来通过图来分析一个中断发生时,中断处理的过程如下图:  其实所有上面代码,就是设置这些流程里工作的函数关键代码,以便整个中断连接起来。其中一些函数是在汇编代码里面,这些都需要仔细分析才能理解。 主要调用下面这两个汇编代码,如下:#001  .func KiInterruptTemplate#002  _KiI...
阅读(1132) 评论(0)

reactos操作系统实现(97)

在这个函数里,又继续地调用内核的两个函数KiConnectVectorToInterrupt和HalEnableSystemInterrupt来处理。#001  VOID#002  NTAPI#003 KiConnectVectorToInterrupt(IN PKINTERRUPT Interrupt,#004                             IN...
阅读(1093) 评论(0)

reactos操作系统实现(96)

调用函数IoConnectInterrupt来设置键中断处理函数。#028     Status = IoConnectInterrupt(#029         &PortDeviceExtension->KeyboardInterrupt.Object,#030         i8042KbdInterruptService,#031         DeviceExt...
阅读(1292) 评论(0)

reactos操作系统实现(95)

在PNP管理器里,最重要的处理,就是即插即用消息。下面来分析键盘的即插即用消息处理函数,实现的代码如下:#001  NTSTATUS NTAPI#002  i8042Pnp(#003     IN PDEVICE_OBJECT DeviceObject,#004     IN PIRP Irp)#005  {#006     PIO_STACK_LOCATION Sta...
阅读(1299) 评论(0)

reactos操作系统实现(94)

现在就来依次分析函数i8042Create、i8042Cleanup、i8042Close、i8042DeviceControl、i8042InternalDeviceControl和i8042Pnp。首先分析函数i8042Create,它的实现代码如下:#001  NTSTATUS NTAPI#002  i8042Create(#003     IN PDEVICE_OBJECT...
阅读(1315) 评论(0)

reactos操作系统实现(93)

现在来分析一下键盘驱动程序里主要使用的IRP主功能代码,由于每一个IRP都在首部包括有一个主功能代码码,并且还可能有次功能代码。大体有下面几种主功能代码:IRP_MJ_CREATE                    创建或打开设备文件。IRP_MJ_CREATE_NAMED_PIPE         名管道驱动主功能。IRP_MJ_CLOSE                  ...
阅读(1310) 评论(0)

reactos操作系统实现(92)

在DirverEntry函数,可以看到下面这句:#054     DriverObject->DriverExtension->AddDevice = i8042AddDevice;这里是设置了驱动程序的AddDevice函数指针,它是指向函数i8042AddDevice。PnP管理器将为每个硬件调用一次AddDevice函数,如下:下面开始调用即插即用的函数AddDevice来添...
阅读(1485) 评论(0)

reactos操作系统实现(91)

驱动程序很多配置参数是保存在注册表里,比如IO资源参数,中断号等内容。因此只有了解注册表的读取,以及相关内容才可以清楚知道键盘驱动程序,主要操作那些相关的端口,还有配置参数。下面来分析函数ReadRegistryEntries的实现,如下:#001  NTSTATUS#002  ReadRegistryEntries(#003     IN PUNICODE_STRING Regi...
阅读(1430) 评论(0)

reactos操作系统实现(90)

下面来分析函数IoAllocateDriverObjectExtension的实现,这个函数主要实现创建驱动程序扩展内存。#001  NTSTATUS#002  NTAPI#003 IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverObject,#004                              ...
阅读(1067) 评论(0)

reactos操作系统实现(89)

键盘驱动程序是一个最基本的驱动程序,通过学习这个简单而实用的驱动程序来了解ReactOS驱动程序的结构,驱动程序的运行流程。在前面的I/O管理器分析里,已经知道操作系统加载驱动程序的过程,也了解了驱动程序在系统里是以驱动程序对象来管理的,也就是通过DRIVER_OBJECT对象来表示一个驱动程序的。 键盘驱动程序是一个输入输出的设备,但在ReactOS驱动程序分类里,是分在输入设备类。...
阅读(1184) 评论(0)

reactos操作系统实现(88)

IRP是 I/O request packet 的缩写,即 I/O 请求包。驱动与驱动之间通过 IRP 进行通信。而使用驱动的应用层调用的 CreatFile,ReadFile,WriteFile,DeviceIoControl 等函数,说到底也是使用 IRP 和驱动进行通信。一个 IRP 由两部分组成。首先是头部或者叫包的固定部分,是一个 IRP 结构。紧跟在这个头部之后的是I/...
阅读(1208) 评论(0)

reactos操作系统实现(87)

应用程序对设备I/O进行Win32调用,这个调用由I/O系统服务接收,然后I/O管理器从这个请求构造一个合适的I/O请求包(IRP)。那么I/O管理器是怎么样创建这个I/O请求包(IRP)的呢?又是怎么样传送给驱动程序的呢?我们带着这两个问题来分析下面实现文件读取的代码,如下:#001  NTSTATUS#002  NTAPI#003  NtReadFile(IN HANDLE F...
阅读(1317) 评论(1)

reactos操作系统实现(86)

创建完成端口需要调用Windows API CreateIoCompletionPort:HANDLE CreateIoCompletionPort(    HANDLE FileHandle,    HANDLE ExistingCompletionPort,    DWORD CompletionKey,    DWORD NumberOfConcurrentThrea...
阅读(1501) 评论(0)

reactos操作系统实现(85)

内核里也需要访问用户应用程序内存,那么有什么方法呢?在ReactOS主要有两种方法:一种是使用缓冲I/O的方法,在驱动程序运行前,I/O管理器把写数据复制到这个缓冲区,并在请求完成时把读数据复制回到用户空间;另一种是使用直接I/O,这是优先的技术,因为它减少数据复制。这是通过I/O管理器传递一个内存描述符列表(MDL-- Memory descriptor list)来实现的,这个描述符列表是...
阅读(1327) 评论(0)
25条 共2页1 2 下一页 尾页
    个人资料
    • 访问:5594038次
    • 积分:73134
    • 等级:
    • 排名:第25名
    • 原创:1587篇
    • 转载:61篇
    • 译文:11篇
    • 评论:2086条
    文章存档
    最新评论