zl程序教程

reactos操作系统实现(6)

  • reactos操作系统实现(17)

    reactos操作系统实现(17)

    从上面分析可以看到,主要调用函数 KiInitializeKernel 来初始化内核,这个函数传送的参数与函数 KiSetupStackAndInitializeKernel 的参数是一样的,如下: #001  VOID #002  NTAPI #003  KiIniti

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

    reactos操作系统实现(19)

    由于 CPU 是多种多样,具备能力也是不一样的,并且不同厂家都会创新不同的功能。下面就来了解 CPU 特征识别,如下: /* Get the processor features for the CPU */     FeatureBits = KiGetFeatureBi

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

    reactos操作系统实现(22)

     从Boot.S文件里初始化系统基本组件后,就跳到空闲函数处理,就成为一个空闲处理的线程,其实也是一个管理系统的任务。下面就来分析KiIdleLoop函数的代码,如下: #001  .globl @KiIdleLoop@0 #002  .func @KiIdl

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

    reactos操作系统实现(23)

    下面来仔细查看Windows系统结构图:   由于ReactOS是兼容Windows为目标的,那么它的体系结构跟Windows越像,就具有兼容性。这里先来了解Windows的体系结构。最低层是硬件抽象层HAL;接着是内核层,设备驱动程序和文件系统,I/O管理器&#x

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

    reactos操作系统实现(24)

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

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

    reactos操作系统实现(11)

    中断机制发明以来,就一直成为 CPU 的主导地位通知机制,因为中断的高效方式,没有其它任何的方式可以取代它的。在 IA-32 的 CPU 架构里,采用了中断寄存器和中断描述符来判断中断的来源,如下图所示: 在ReactOS里使用

    日期 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操作系统实现(46)

    reactos操作系统实现(46)

    在线程调度里可以看到,需要调用函数KiSwapContext来进行运行环境切换,由于每个CPU都是只能运行一个线程,而多个线程在运行过程中被中断了,那么就需要保存CPU所有寄存器,以便下一次恢复线程时可以接续运行。现在就来分析这个函数是怎么样实现这些工作的,代码如下&

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

    reactos操作系统实现(48)

      每当安装到一个全新的电脑时,都需要使用安装程序来把系统安装到电脑的硬盘里面,这个过程其实是一个极其重要的过程,如果用户不容易安装系统的话,那么这个系统也是很难使用的系统,不利于系统广泛使用和推广。下面就来了解Reactos是怎么实现整个安装过程的。 当使用make bootcd的

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

    reactos操作系统实现(59)

      当用户安装ReactOS系统时,需要选择合适的安装目录,因为同一个类型的操作系统,可以安装多次,可以选择不同的目录来安装,以便在同一台电脑,同一个磁盘分区里安装不同的系统。如下图: 选择系统目录的实现代码如下: #001  stat

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

    reactos操作系统实现(33)

    当Reactos在系统初始化时,就会调用进程管理初始化函数PsInitSystem来进行初始化。只有把进程管理初始化后,才可以创建进程,这样才可运行各种各样的任务。下面就来分析进程管理器初始化函数: #001  BOOLEAN #002  NTAPI #003  PsInitSystem(IN

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

    reactos操作系统实现(84)

    在系统里User32.dll,kernel32.dll,shell32.dll,gdi32.dll,rpcrt4.dll,comctl32.dll,advapi32.dll,version.dll等dll代表了Win32 API的基本提供者。Win32

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

    reactos操作系统实现(39)

    到底一个线程是怎么样创建的呢?又是怎么样放到就绪队列呢? #001  NTSTATUS #002  NTAPI #003  PspCreateThread(OUT PHANDLE ThreadHandle, #004                  IN ACCESS_MASK DesiredAccess, #

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

    reactos操作系统实现(88)

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

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

    reactos操作系统实现(112)

    IdeReadWrite函数主要实现了IDE设备的读和写命令发送。具体实现函数如下: #001  ULONG #002  NTAPI #003  IdeReadWrite( #004      IN PVOID HwDeviceExtension, #005      IN PSCSI_REQUEST_BLOCK Srb #

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

    reactos操作系统实现(115)

    PciIdeXFdoPnpDispatch函数主要处理PCIIDE即插即用的消息处理。具体实现代码如下: #001  NTSTATUS NTAPI #002  PciIdeXFdoPnpDispatch( #003     IN PDEVICE_OBJECT DeviceObject, #004     IN PIRP Irp)

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

    reactos操作系统实现(122)

     IoReadPartitionTable函数是读取磁盘分区表数据。它的实现代码如下: #001  NTSTATUS #002  FASTCALL #003  IoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, #004                       IN ULONG

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

    reactos操作系统实现(130)

     vfatMakeRootFCB函数是用来创建FAT文件系统的根目录,实现代码如下: #001  PVFATFCB #002  vfatMakeRootFCB(PDEVICE_EXTENSION  pVCB) #003  { #004     PVFATFCB  FCB; #005     ULONG FirstClu

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

    reactos操作系统实现(133)

     VfatReadDiskPartial函数主要用来构造一个IRP给底层驱动程序去读取数据返回。具体实现代码如下: #001  NTSTATUS #002  VfatReadDiskPartial (IN PVFAT_IRP_CONTEXT IrpContext, #003              IN PLARGE_INTEGER

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

    reactos操作系统实现(183)

    UserDrawCaptionText函数实现窗口上标题的显示。实现的代码如下: #001  BOOL #002  UserDrawCaptionText(HDC hDc, #003     const PUNICODE_STRING Text, #004     const LPRECT lpRc, #005     UIN

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

    reactos操作系统实现(185)

    在ReactOS系统里,当安装完成后,如果网络已经可能使用,就可以立即打开应用程序管理器,直接从网络上下载相应的应用程序,这样是很方便安装和管理软件,这些都是跟Linux操作系统学习过来的。具体的界面如下:     这是ReactOS 0.3.11

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

    reactos操作系统实现(144)

     当操作系统引导过程中,需要输出一些信息给用户来查看,那么就需要这个简单的VGA驱动程序,可以输出字符串显示,实现这个功能的函数就是VidDisplayString函数,具体实现的代码如下: #001  VOID #002  NTAPI #003  VidDispla

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

    reactos操作系统实现(143)

     VgaIsPresent函数通过读取图形模式的索引寄存器和数据寄存器来检查VGA显示卡是否安装,实现代码如下: #001  BOOLEAN #002  NTAPI #003  VgaIsPresent(VOID) #004  { #005      UCHAR VgaReg, VgaReg2, VgaReg3; #

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

    reactos操作系统实现(151)

    图形模块包括用户模式gdi32和内核模式的win32k,gdi32的代码在目录reactos/dll/win32/gdi32里,win32k的代码在目录reactos/subsystems/win32/win32k里。所有客户端的应用程序都是调用gdi32库里的API函数,编译时也是连接这个库里的函数。由于g

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

    reactos操作系统实现(193)

    SelectObject函数是将对象选定到指定的设备场境中。具体实现代码如下: #001  HGDIOBJ #002  WINAPI #003  SelectObject(HDC hDC, #004               HGDIOBJ hGdiObj) #005  { #006      PDC_ATTR pDc_A

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

    reactos操作系统实现(197)

    所有API都需要通过兼容性测试,才说明这个API没有问题,达到可以使用的程度。下面这段代码就是测试API的兼容性,当测试到GetPixel函数时,就发现有一个BUG,就是最后一行,当希望这个单色的图片返回0xFFFFFF值,但在ROS返回是0值。说明这个

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

    reactos操作系统实现(156)

    在USER32.DLL里也不例外,它的入口函数也是DllMain,当每个应用程序启动时就会调用本函数进行实始化。具体实现代码如下: #001  INT WINAPI #002  DllMain( #003     IN PVOID hInstanceDll, #004     IN ULONG dwR

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

    reactos操作系统实现(158)

    在ReactOS的应用程序里,每个有窗口的应用程序都需要注册一个窗口类,然后根据窗口类来创建窗口。注册窗口的调用函数就是RegisterClassW,这个函数是UNICODE的版本,其实还有多节字版本,但代码是差不多的。这里主要分析UNICODE版本的实现,其代码如下

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

    reactos操作系统实现(168)

    当应用程序更新窗口后,就需要不断地接收系统发过来的消息,然后处理消息,最后发送消息出去,这样就构成了应用程序的消息循环处理。不断地获取系统消息的函数是GetMessage函数,下面就是它的实现代码: #001  BOOL WINAPI #002  GetMessa

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

    reactos操作系统实现(171)

    TranslateMessage函数用来把虚拟键消息转换为字符消息,其实现的代码如下: #001  BOOL WINAPI #002  TranslateMessage(CONST MSG *lpMsg) #003  {   在这个函数里只是简单地调用函数TranslateMessageEx。 #004   

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

    reactos操作系统实现(174)

    DispatchMessage函数主要分发一个消息给窗口处理函数。具体实现代码如下: #001  LRESULT WINAPI #002  DispatchMessageW(CONST MSG *lpmsg) #003  { #004      LRESULT Ret = 0; #005      PWINDOW Wn

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