reactos操作系统实现(99)

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

2009-09-29 23:31:00

阅读数:4

评论数:0

reactos操作系统实现(98)

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

2009-09-28 22:12:00

阅读数:4

评论数:0

reactos操作系统实现(97)

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

2009-09-27 20:03:00

阅读数:4

评论数:0

reactos操作系统实现(96)

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

2009-09-25 21:16:00

阅读数:5

评论数:0

reactos操作系统实现(95)

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

2009-09-24 22:10:00

阅读数:3

评论数:0

reactos操作系统实现(94)

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

2009-09-23 22:57:00

阅读数:3

评论数:0

reactos操作系统实现(93)

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

2009-09-22 23:45:00

阅读数:3

评论数:0

reactos操作系统实现(92)

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

2009-09-21 21:47:00

阅读数:4

评论数:0

reactos操作系统实现(91)

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

2009-09-20 10:01:00

阅读数:3

评论数:0

reactos操作系统实现(90)

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

2009-09-19 23:39:00

阅读数:3

评论数:0

reactos操作系统实现(89)

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

2009-09-18 22:19:00

阅读数:5

评论数:0

reactos操作系统实现(88)

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

2009-09-17 21:52:00

阅读数:5

评论数:0

reactos操作系统实现(87)

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

2009-09-13 19:00:00

阅读数:4

评论数:0

reactos操作系统实现(86)

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

2009-09-12 23:34:00

阅读数:3

评论数:0

reactos操作系统实现(85)

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

2009-09-11 22:33:00

阅读数:4

评论数:0

reactos操作系统实现(84)

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

2009-09-10 22:05:00

阅读数:3

评论数:0

reactos操作系统实现(83)

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

2009-09-09 22:06:00

阅读数:4

评论数:0

reactos操作系统实现(82)

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

2009-09-08 23:07:00

阅读数:2

评论数:0

reactos操作系统实现(81)

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

2009-09-07 22:14:00

阅读数:4

评论数:0

reactos操作系统实现(80)

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

2009-09-06 21:02:00

阅读数:1

评论数:0

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