- 博客(26)
- 资源 (44)
- 收藏
- 关注
原创 reactos操作系统实现(147)
通过上面的学习,可以了解到GDI最终的输出都是通过小端口向显示硬件输出,以便在显示器上显示所需要显示的内容。那为什么需要有小端口驱动程序呢?其实这是为了方便所有显示卡制造厂家编写驱动程序,同时又可以让制造厂家保密他们的内部技术秘密。使用小端口的驱动程序,也可以统一显示驱动程序的接口,也就把显示驱动程序功能简化开发。下面来分析目录里reactos/drivers/video/miniport/v
2009-11-30 22:32:00 1645
原创 reactos操作系统实现(146)
Reactos的显示组成主要由GDI、视频端口驱动程序、小端口驱动程序和显示驱动程序组成。当GDI系统接到应用程序请求后,就会查找相应的小端口驱动程序,接着小端口驱动程序,就会设置视频端口驱动程序和显示驱动程序。在GDI和小端口驱动程序调用流程如下图所示:
2009-11-29 18:52:00 1700
原创 reactos操作系统实现(145)
前面的函数已经介绍怎么样显示一个字符串了,那么下面就来仔细地实查看怎么样实现一个字符的显示,当然这里字符的显示,只是字母的显示,没有中文显示,如果需要实现中文字符的显示,就需要修改这个函数和相应的排版函数、读取相应的字体文件。由于显示卡已经被初始化为图形模式,那么所有字符的显示都生成图形方式来显示,文字也不例外,因此需要使用字体的点阵数据。具体实现代码如下:#001 VOID#002
2009-11-28 22:35:00 1387
原创 reactos操作系统实现(144)
当操作系统引导过程中,需要输出一些信息给用户来查看,那么就需要这个简单的VGA驱动程序,可以输出字符串显示,实现这个功能的函数就是VidDisplayString函数,具体实现的代码如下:#001 VOID#002 NTAPI#003 VidDisplayString(PUCHARString)#004 {#005 ULONG TopDelta = 14
2009-11-27 23:24:00 1755
原创 reactos操作系统实现(143)
VgaIsPresent函数通过读取图形模式的索引寄存器和数据寄存器来检查VGA显示卡是否安装,实现代码如下:#001 BOOLEAN#002 NTAPI#003 VgaIsPresent(VOID)#004 {#005 UCHAR VgaReg, VgaReg2,VgaReg3;#006 UCHAR SeqReg, SeqReg2;#
2009-11-26 21:59:00 1765
原创 reactos操作系统实现(142)
VidInitialize函数主要进行VGA简单视频显示模式初始化。具体实现代码如下:#001 BOOLEAN#002 NTAPI#003 VidInitialize(IN BOOLEANSetMode)#004 {#005 ULONG Context = 0;#006 PHYSICAL_ADDRESSTranslatedAddress
2009-11-25 23:14:00 1590 1
原创 reactos操作系统实现(141)
在操作系统启动的早期阶段,由于很多基本的功能没有初始化(比如IO管理器都没有初始化),因此完整和功能强大的显示驱动程序是不可能运行的,那么就需要在这个阶段写一个比较简单的VGA显示驱动程序给内核引导时使用,这个驱动程序就是bootvid.dll。 先来分析在内核里调用初始化的位置,具体如下:#001 VOID#002 NTAPI#003 Phase1Initializ
2009-11-24 23:34:00 2347 2
原创 reactos操作系统实现(140)
在创建文件成功后,然后就往文件里写入数据,而写入数据说明就需要文件系统给文件分配储存空间,以便保存这些数据到磁盘里,下面就来分析分配文件大小的函数,如下:#001 NTSTATUS#002 VfatSetAllocationSizeInformation(PFILE_OBJECTFileObject,#003 PVFATFCB Fcb,#
2009-11-23 22:29:00 1628
原创 reactos操作系统实现(139)
当用户删除文件时,就会通过ReactOS的API调用IO管理器函数,然后创建IRP包发送到文件系统驱动程序来,然后就调用下面函数来把文件分配的簇从FAT分配表时删除。具体实现的代码如下:#001 static NTSTATUS#002 FATDelEntry(#003 IN PDEVICE_EXTENSIONDeviceExt,#004 IN PVFA
2009-11-22 11:58:00 1527
原创 reactos操作系统实现(138)
在FAT里,需要从目录入口项里找到文件的首簇数,下面这段代码就是实现这样的功能,如下:#001 ULONG#002 vfatDirEntryGetFirstCluster(PDEVICE_EXTENSION pDeviceExt,#003 PDIR_ENTRY pFatDirEntry)#004 {#0
2009-11-21 23:40:00 1484
原创 reactos操作系统实现(137)
VfatHasFileSystem函数主要用来读取FAT文件系统信息,并且判断这个磁盘卷是否为FAT文件系统,具体实现如下:#001 static NTSTATUS#002 VfatHasFileSystem(PDEVICE_OBJECT DeviceToMount,#003 PBOOLEANRecognizedFS,#004
2009-11-20 23:08:00 1800
原创 reactos操作系统实现(136)
VfatMount函数主要用来安装FAT文件卷,具体实现代码如下:#001 static NTSTATUS#002 VfatMount (PVFAT_IRP_CONTEXTIrpContext)#003 /*#004 * FUNCTION: Mount thefilesystem#005 */#006 {#007 PDEVICE_OBJ
2009-11-19 23:28:00 2227
原创 reactos操作系统实现(135)
当从IO管理器里调用函数IopParseDevice来分析设备时,就可以找到相应的磁盘设备,并在这个函数里调用函数IopCheckVpbMounted来检查这个文件系统是否加载,如果没有加载,就会调用函数IopMountVolume来加载文件卷,那么在这个函数里就会构造一个IRP发送给文件系统驱动程序,驱动程序就收到主功能码为IRP_MJ_FILE_SYSTEM_CONTROL和次功能码为IRP
2009-11-18 22:34:00 2107
原创 reactos操作系统实现(134)
文件控制块主要用来表示一个ReactOS打开文件的对象。下面就来仔细地分析文件控制块的结构,如下:#001 typedef struct _VFATFCB#002 { ROS的文件头部,主要包括文件流的描述和系统使用的变量。#003 /* FCB header required byROS/NT */#004 FSRTL_COMMON_FCB_HEAD
2009-11-16 22:59:00 1440
原创 reactos操作系统实现(133)
VfatReadDiskPartial函数主要用来构造一个IRP给底层驱动程序去读取数据返回。具体实现代码如下:#001 NTSTATUS#002 VfatReadDiskPartial (INPVFAT_IRP_CONTEXT IrpContext,#003 IN PLARGE_INTEGER ReadOffset,#004
2009-11-15 22:23:00 1516 1
原创 reactos操作系统实现(132)
VfatReadFileData函数主要用来从磁盘上读取文件数据,具体实现代码如下:#001 static NTSTATUS#002 VfatReadFileData(PVFAT_IRP_CONTEXT IrpContext,#003 ULONGLength,#004 LARGE_INTEGERReadOf
2009-11-14 23:00:00 1341
原创 reactos操作系统实现(131)
VfatRead函数用来读取FAT文件系统里的文件数据,如果缓冲区里有数据就直接从缓冲区里读取,否则就从磁盘上读取。具体实现如下:#001 NTSTATUS#002 VfatRead(PVFAT_IRP_CONTEXTIrpContext)#003 {#004 NTSTATUS Status;#005 PVFATFCB Fcb;#006
2009-11-12 23:26:00 2088 1
原创 reactos操作系统实现(130)
vfatMakeRootFCB函数是用来创建FAT文件系统的根目录,实现代码如下:#001 PVFATFCB#002 vfatMakeRootFCB(PDEVICE_EXTENSION pVCB)#003 {#004 PVFATFCB FCB;#005 ULONG FirstCluster, CurrentCluster, Size = 0;#0
2009-11-10 22:43:00 1338
原创 reactos操作系统实现(129)
功能驱动将构造请求包,就可以发送到底层总线驱动上。因此需要创建一个IRP,这就需要用IoBuildDeviceIoControlRequest创建一个IO控制码的IRP,用IoCallDriver将URB发送到底层总线驱动上。由于上层驱动无法知道底层驱动是同步还是异步完成的,因此需要做一个判断。if语句判断当异步完成IRP时,用事件等待总线驱动完成这个IRP。#001 NTSTATUS
2009-11-09 23:10:00 1362
原创 reactos操作系统实现(128)
VfatOpenFile函数主要用来打开FAT的文件。具体实现代码如下:#001 static#002 NTSTATUS#003 VfatOpenFile (#004 PDEVICE_EXTENSION DeviceExt,#005 PUNICODE_STRINGPathNameU,#006 PFILE_OBJECT FileO
2009-11-08 23:22:00 1412
原创 reactos操作系统实现(127)
从上面的代码里可以看到调用函数VfatAddEntry来添加文件或目录的入口,其实现的代码如下:#001 NTSTATUS#002 VfatAddEntry(#003 INPDEVICE_EXTENSION DeviceExt,#004 IN PUNICODE_STRING NameU,#005 IN PVFATFCB *Fcb,#0
2009-11-07 22:03:00 1334
原创 reactos操作系统实现(126)
VfatCreateFile函数主要用来创建或者打开一个文件,具体实现如下:#001 static NTSTATUS#002 VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp )#003 /*#004 * FUNCTION: Create or opena file#005 */#006 {
2009-11-05 22:54:00 1508 1
原创 reactos操作系统实现(125)
VfatCreate函数创建或者打开一个文件。具体实现代码如下:#001 NTSTATUS#002 VfatCreate(PVFAT_IRP_CONTEXT IrpContext)#003 /*#004 * FUNCTION: Create or opena file#005 */#006 {#007 NTSTATUS Status;
2009-11-04 22:15:00 1148
原创 reactos操作系统实现(124)
从上面的入口函数里可以看到,很多消息处理函数都是调用函数VfatBuildRequest来处理的,具体实现代码如下:#001 NTSTATUS NTAPIVfatBuildRequest (#002 IN PDEVICE_OBJECTDeviceObject,#003 IN PIRP Irp)#004 {#005 NTS
2009-11-03 23:03:00 1289
原创 reactos操作系统实现(123)
目前,Reactos主要使用FAT的文件系统,因此下面就先来分析这个文件系统,以便了解这个文件系统的功能。这个文件系统的实现是在驱动程序FASTFAT.SYS里实现的,所以来分析这个驱动程序的源码,就可以了解FAT文件系统了。 6.2.1 FAT文件系统驱动程序入口函数FAT的文件系统是当作一个驱动程序来加载到系统里,因此它也有驱动程序的形式了,也就是它的入口点函数,还是Driver
2009-11-02 22:07:00 1503
原创 reactos操作系统实现(122)
IoReadPartitionTable函数是读取磁盘分区表数据。它的实现代码如下:#001 NTSTATUS#002 FASTCALL#003 IoReadPartitionTable(INPDEVICE_OBJECT DeviceObject,#004 IN ULONGSectorSize,#005
2009-11-01 10:50:00 1614
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人