大坡3D软件开发

因我而不同--用软件来改变世界

reactos操作系统实现(99)

下面来分析键盘的中断处理函数的实现,如下:#001  BOOLEAN NTAPI#002  i8042KbdInterruptService(#003     IN PKINTERRUPT Interrupt,#004     PVOID Context)#005  {#006     PI804...

2009-09-29 23:31:00

阅读数:1230

评论数:0

reactos操作系统实现(98)

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

2009-09-28 22:12:00

阅读数:1274

评论数:0

reactos操作系统实现(97)

在这个函数里,又继续地调用内核的两个函数KiConnectVectorToInterrupt和HalEnableSystemInterrupt来处理。#001  VOID#002  NTAPI#003 KiConnectVectorToInterrupt(IN PKINTERRUPT Interr...

2009-09-27 20:03:00

阅读数:1250

评论数:0

reactos操作系统实现(96)

调用函数IoConnectInterrupt来设置键中断处理函数。#028     Status = IoConnectInterrupt(#029         &PortDeviceExtension->KeyboardInterrupt.Object,#030        ...

2009-09-25 21:16:00

阅读数:1448

评论数:0

reactos操作系统实现(95)

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

2009-09-24 22:10:00

阅读数:1455

评论数:0

reactos操作系统实现(94)

现在就来依次分析函数i8042Create、i8042Cleanup、i8042Close、i8042DeviceControl、i8042InternalDeviceControl和i8042Pnp。首先分析函数i8042Create,它的实现代码如下:#001  NTSTATUS NTAPI#...

2009-09-23 22:57:00

阅读数:1507

评论数:0

reactos操作系统实现(93)

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

2009-09-22 23:45:00

阅读数:1445

评论数:0

reactos操作系统实现(92)

在DirverEntry函数,可以看到下面这句:#054     DriverObject->DriverExtension->AddDevice = i8042AddDevice;这里是设置了驱动程序的AddDevice函数指针,它是指向函数i8042AddDevice。PnP管理器...

2009-09-21 21:47:00

阅读数:1625

评论数:0

reactos操作系统实现(91)

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

2009-09-20 10:01:00

阅读数:1567

评论数:0

reactos操作系统实现(90)

下面来分析函数IoAllocateDriverObjectExtension的实现,这个函数主要实现创建驱动程序扩展内存。#001  NTSTATUS#002  NTAPI#003 IoAllocateDriverObjectExtension(IN PDRIVER_OBJECT DriverOb...

2009-09-19 23:39:00

阅读数:1228

评论数:0

reactos操作系统实现(89)

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

2009-09-18 22:19:00

阅读数:1335

评论数:0

reactos操作系统实现(88)

IRP是 I/O request packet 的缩写,即 I/O 请求包。驱动与驱动之间通过 IRP 进行通信。而使用驱动的应用层调用的 CreatFile,ReadFile,WriteFile,DeviceIoControl 等函数,说到底也是使用 IRP 和驱动进行通信。一个 IRP 由两部...

2009-09-17 21:52:00

阅读数:1341

评论数:0

reactos操作系统实现(87)

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

2009-09-13 19:00:00

阅读数:1518

评论数:1

reactos操作系统实现(86)

创建完成端口需要调用Windows API CreateIoCompletionPort:HANDLE CreateIoCompletionPort(    HANDLE FileHandle,    HANDLE ExistingCompletionPort,    DWORD Completi...

2009-09-12 23:34:00

阅读数:1704

评论数:0

reactos操作系统实现(85)

内核里也需要访问用户应用程序内存,那么有什么方法呢?在ReactOS主要有两种方法:一种是使用缓冲I/O的方法,在驱动程序运行前,I/O管理器把写数据复制到这个缓冲区,并在请求完成时把读数据复制回到用户空间;另一种是使用直接I/O,这是优先的技术,因为它减少数据复制。这是通过I/O管理器传递一个内...

2009-09-11 22:33:00

阅读数:1465

评论数:0

reactos操作系统实现(84)

在系统里User32.dll,kernel32.dll,shell32.dll,gdi32.dll,rpcrt4.dll,comctl32.dll,advapi32.dll,version.dll等dll代表了Win32 API的基本提供者。Win32 API中的所有调用最终都转向了ntdll.d...

2009-09-10 22:05:00

阅读数:1240

评论数:0

reactos操作系统实现(83)

前面已经分析了函数IopInitializeSystemDrivers的过程,在这个函数里加载注册表里指定的驱动程序。遍历了所有驱动程序,并通过调用函数IopLoadDriver来实现加载。也许你会问,驱动程序一般什么时候加载呢?其实在ReactOS里有三种情况,一种是在Freeloader引导时...

2009-09-09 22:06:00

阅读数:2062

评论数:0

reactos操作系统实现(82)

在I/O管理最后阶段,就是加载系统所有动态连接库,比如加载NTDLL动态连接库,具体实现代码如下:#001  NTSTATUS#002  NTAPI#003  PsLocateSystemDll(VOID)#004  {#005      OBJECT_ATTRIBUTES ObjectAttri...

2009-09-08 23:07:00

阅读数:1204

评论数:0

reactos操作系统实现(81)

由于操作系统会使用一些缺省的驱动程序,需要在启动时加载指定的驱动程序。下面这个函数,主要实现系统启动时指定加载的驱动程序。代码如下:#001  VOID#002  FASTCALL#003  IopInitializeSystemDrivers(VOID)#004  {#005       PSE...

2009-09-07 22:14:00

阅读数:1064

评论数:0

reactos操作系统实现(80)

下面的函数主要初始化PnP发现的设备,并为它安装服务,代码如下:#001  NTSTATUS#002  IopInitializePnpServices(IN PDEVICE_NODEDeviceNode)#003  {#004     DEVICETREE_TRAVERSE_CONTEXT Co...

2009-09-06 21:02:00

阅读数:1097

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭