zl程序教程

reactos操作系统实现(8)

  • reactos操作系统实现(24)

    reactos操作系统实现(24)

     在很早的电脑里,就带有一个小喇叭,可以发出不同频率的声音。主要用来判断系统是否有问题使用,比如BIOS检查硬有问题时,就会发出不同的声音,提醒用户是那里出问题了。在操作系统里,也经常使用这个小喇叭来提醒用户是什么问题,比如输入非法的按键时,就响

    日期 2023-06-12 10:48:40     
  •  reactos操作系统实现(4)

    reactos操作系统实现(4)

    由于近来家里的电脑坏了,老是上网就死机,也上不了网发贴。近来也是经济危机到来的时候,事情还是比较多。本来不太打算更换电脑的,等到明年电脑降价了,再去买的。但这台电脑也用了四年了,又急着想上网,就下定决心去买了一台电脑回来。当然,这次配置的电脑&#

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(29)

    reactos操作系统实现(29)

     内存大小好像永远追不上人们的需求,以前以为512K就很大了,到现在内存已经是4G,8G内存了,但还是不能满足人们的需求。因为目前的系统都是多进程运行,每个进程都需要占用4G的内存,那么10个进程,就占用相当可观的内存了。这时就需要把进程不经常使用的内存数据切

    日期 2023-06-12 10:48:40     
  •  reactos操作系统实现(5)

    reactos操作系统实现(5)

    一般的电脑都是使用硬盘来引导操作系统,由于硬盘是电脑的最常用的存储媒介,在 ReactOS 里,它会把一个硬盘划分成如下的形式:   通过安装程序把扇区引导程序写到硬盘分区引导记录扇区,然后当BIOS加电后,

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(9)

    reactos操作系统实现(9)

    在reactos初始化代码里,经常看到ACPI的缩写,那么它是表示什么意思呢?现在就来解决这个问题,它就是电源管理方面的。具体内容如下: Advanced Configuration and Power Management Interface   ACPI表示高级配置和电

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(6)

    reactos操作系统实现(6)

    硬盘引导的流程与相应源码文件名称: 引导序号 引导过程 引导执行代码位数 目标文件名称 1.          主引导代码(Master Boot Record (MBR) code)&#

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(42)

    reactos操作系统实现(42)

    接着下来,就需要分析函数KiReadyThread的作用了。根据线程状态来判断是否可以放入延迟队列,还是设置它为转换状态,代码如下: #001  VOID #002  NTAPI #003  KiReadyThread(IN PKTHREAD Thread) #004  {   获取

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(41)

    reactos操作系统实现(41)

    当线程初始化成功后,是怎么样放到推迟就绪队列的呢?通过下面这几个函数的分析,就会了解这个问题了。从以前的分析可以知道是调用函数KeReadyThread来执行的,这个函数的代码如下: #001  VOID #002  NTAPI #003  KeReadyThread(IN

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(43)

    reactos操作系统实现(43)

    前面介绍放到延迟队列是单核的版本,下面来学习多核的版本,代码如下: #001  // #002  // This routine makes the thread deferred ready on the boot CPU. #003  // #004  FORCEINLINE #005  VOI

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(50)

    reactos操作系统实现(50)

      当运行到内核函数Phase1Initialization里,就是进行内核第一阶段初始化了,这时在这个函数又调用函数Phase1InitializationDiscard进行复杂的处理,在这里有一个重要的步骤,就是打开内核应用程序smss.exe来运行。具体代码如下: #001 

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(53)

    reactos操作系统实现(53)

    在前面的代码分析里,发现创建一个线程,而这个线程运行的主函数是PnpEventThread。那么创建这个线程是用来做什么事情的呢?那就得去分析文件reactos/base/setup/usetup/interface/devinst.c里的代码,如下: #001  DWORD W

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(63)

    reactos操作系统实现(63)

      前面把注册表初始化完成之后,就开始进行安装引导程序了。这里安装的引导程序是分区引导程序,或者安装到软盘引导程序。当然也可以选择跳过不安装它,界面如下:     这个函数的代码如下: #001  static PAGE_NUMBER #002  BootLoaderPage

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(65)

    reactos操作系统实现(65)

      激动人心的时刻到了,最后安装成功了。会出现下面的界面,如下:     上面成功的实现代码如下: #001  static PAGE_NUMBER #002  SuccessPage(PINPUT_RECORD Ir) #003  {   显示成功安装的信息。 #004     

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(68)

    reactos操作系统实现(68)

    前面介绍怎么样调用动态连接库里的InstallReactOS函数,下面就来分析这个函数的代码,看看这个函数是怎么运行向导界面,又做了些什么样的工作。如下: #001  DWORD WINAPI #002  InstallReactOS(HINSTANCE hInstance) #003 

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(72)

    reactos操作系统实现(72)

    ReactOS通过对象管理机制为内核提供了一致的和安全的访问方式。对象管理器是一个用于创建、删除、保护和跟踪对象的内核一部份。由于I/O管理的设备是多方面的,就需要创建很多对象来表达这种设备,下面就来了解关于I/O相关的对象,初始化的代码如下: #001  BOOLEAN #002  INI

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(73)

    reactos操作系统实现(73)

    即插即用(Plug and Play,PnP)是计算机系统I/O设备与部件配置的应用技术。PnP就是指插入就可以使用,不需要进行任何的硬件配置。其实还是需要安装相应的驱动程序才可以使用的。随着人们对计算机使用多样化,不断地需要添加各种各样的硬件卡到计算机的主板上,这样就需要配置硬件

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(76)

    reactos操作系统实现(76)

    当键盘类驱动程序或鼠标类驱动程序枚举时,会找到很多设备,这些设备需要使用回调的方式来进行初始化。下面的函数,就是实现回调初始化驱动程序,如下: #001  VOID #002  NTAPI #003  IopReinitializeBootDrivers(VOID) #00

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(80)

    reactos操作系统实现(80)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(78)

    reactos操作系统实现(78)

    ARC命名是Windows NT系统用来定位其引导分区所在的路径,也就是利用它指明引导分区在哪一个磁盘控制器,哪一个硬盘,哪一个分区内。ARC命名可分为两大类,以scsi为首或以multi为首,现分别说明如下: scsi(x)disk(y)rdisk(0)partit

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(91)

    reactos操作系统实现(91)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(99)

    reactos操作系统实现(99)

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

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(100)

    reactos操作系统实现(100)

      在分析文件所有操作之前,先来看看文件操作的基来流程,与那些系统是相关联的。如下图所示:   应用程序先发起文件的操作,接着就调用到IO管理器的内核函数,IO管理器函数就会生成IRP请求包,并把IRP请求包传送给文件系统驱动程序,接着文件系统把请求

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(111)

    reactos操作系统实现(111)

    IdeSendSmartCommand函数主要发送IDE的命令。具体实现代码如下: #001  ULONG #002  NTAPI #003  IdeSendSmartCommand( #004      IN PVOID HwDeviceExtension, #005      IN PSCSI_REQUEST_BLOCK

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(126)

    reactos操作系统实现(126)

     VfatCreateFile函数主要用来创建或者打开一个文件,具体实现如下: #001  static NTSTATUS #002  VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) #003  /* #004   * FUNCTION: Create o

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(119)

    reactos操作系统实现(119)

     前介绍了初始化函数ScsiClassInitialize,那么在这个函数里使用下面的语句来查找SCSI的磁盘,如下: if (InitializationData->ClassFindDevices(DriverObject, Argument2, InitializationData,portDevic

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(123)

    reactos操作系统实现(123)

     目前,Reactos主要使用FAT的文件系统,因此下面就先来分析这个文件系统,以便了解这个文件系统的功能。这个文件系统的实现是在驱动程序FASTFAT.SYS里实现的,所以来分析这个驱动程序的源码,就可以了解FAT文件系统了。   6.2.1 FAT文件系统驱动程序入口函数 FA

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(131)

    reactos操作系统实现(131)

     VfatRead函数用来读取FAT文件系统里的文件数据,如果缓冲区里有数据就直接从缓冲区里读取,否则就从磁盘上读取。具体实现如下: #001  NTSTATUS #002  VfatRead(PVFAT_IRP_CONTEXT IrpContext) #003  { #004     NTSTATUS S

    日期 2023-06-12 10:48:40     
  •  reactos操作系统实现(134)

    reactos操作系统实现(134)

     文件控制块主要用来表示一个ReactOS打开文件的对象。下面就来仔细地分析文件控制块的结构,如下: #001  typedef struct _VFATFCB #002  {   ROS的文件头部,主要包括文件流的描述和系统使用的变量。 #003    /* FCB header required by

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(180)

    reactos操作系统实现(180)

    DefWndNCPaint函数实现窗口非客户区的显示部分,比如窗口的标题、最大化、最小化、关闭按钮、滚动条等等。 #001  LRESULT #002  DefWndNCPaint(HWND hWnd, HRGN hRgn, BOOL Active) #003  { #004     HDC hDC; #005     DWO

    日期 2023-06-12 10:48:40     
  • reactos操作系统实现(140)

    reactos操作系统实现(140)

     在创建文件成功后,然后就往文件里写入数据,而写入数据说明就需要文件系统给文件分配储存空间,以便保存这些数据到磁盘里,下面就来分析分配文件大小的函数,如下: #001  NTSTATUS #002  VfatSetAllocationSizeInformation(PF

    日期 2023-06-12 10:48:40     
  •  reactos操作系统实现(184)

    reactos操作系统实现(184)

    GreExtTextOutW函数实现一串字符串输出到指定区域,当然是从字符串变成图片输出。这些都调用FreeType库来实现的,具体实现代码如下: #001  BOOL #002  APIENTRY #003  GreExtTextOutW( #004      IN HDC hDC, #005  

    日期 2023-06-12 10:48:40