E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
reactos
reactos
操作系统实现(167)
co_UserRedrawWindow函数是用来实现窗口重画的功能,实现代码如下:#001 BOOLFASTCALL#002 co_UserRedrawWindow(PWINDOW_OBJECTWindow,constRECT*UpdateRect,HRGNUpdateRgn,#003 ULONGFlags)#004 {#005 HRGNhRgn=NU
caimouse
·
2009-12-23 23:00
reactos
操作系统实现(166)
NtUserRedrawWindow函数主要用来重画窗口显示。具体代码如下:#001 BOOLAPIENTRY#002 NtUserRedrawWindow(HWNDhWnd,CONSTRECT*lprcUpdate,HRGNhrgnUpdate,#003 UINTflags)#004 {#005 RECTSafeUpdateRect;#006 N
caimouse
·
2009-12-22 21:00
“开源”的Windows XP
ReactOS
就是这个东东。是个拼命在兼容Windows的一个开源的操作系统。有很多Windows下的程序都能在其上运行。
kongjiajie
·
2009-12-22 11:00
windows
XP
reactos
操作系统实现(165)
在应用程序里,当窗口显示出来之后,需要立即调用一个函数UpdateWindow来更新窗口,否则窗口里面的内容就不会更新,显示还是前面其它窗口显示的内容。现在就来分析这个函数又是怎么样实现的,代码如下:#001 BOOL#002 WINAPI#003 UpdateWindow(#004 HWNDhWnd)#005 { 在这个函数里只是简单调用RedrawWindow函数来重新画窗口。#006
caimouse
·
2009-12-21 21:00
reactos
操作系统实现(164)
继续前面的分析,上次说到需要调用函数co_WinPosShowWindow来显示窗口,那么这个函数里怎么样实现窗口的显示呢?实现代码如下:#001 BOOLEANFASTCALL#002 co_WinPosShowWindow(PWINDOW_OBJECTWindow,INTCmd)#003 {#004 BOOLEANWasVisible;#005 UINTSwp=0;#006
caimouse
·
2009-12-20 13:00
object
cmd
reactos
操作系统实现(163)
在应用程序里,当创建窗口之后,就需要把窗口显示出来,那么就需要调用函数ShowWindow,具体这个函数是怎么实现的呢?现在就来分析它的实现代码,如下:#001 EXTINLINEBOOLWINAPI#002 ShowWindow(HWNDhWnd,intnCmdShow)#003 { 这里直接就调WIN32K.SYS里的代码了。#004 returnNtUserShowWin
caimouse
·
2009-12-19 21:00
object
user
reference
reactos
操作系统实现(162)
co_IntCreateWindowEx函数主要用创建一个显示的窗口,具体实现代码如下:#001 HWNDAPIENTRY#002 co_IntCreateWindowEx(DWORDdwExStyle,#003 PUNICODE_STRINGClassName,#004 PUNICODE_STRINGWindow
caimouse
·
2009-12-17 22:00
reactos
操作系统实现(161)
NtUserCreateWindowEx函数主要用来创建一个窗口显示。在Win32k.sys里的代码如下:#001 HWNDAPIENTRY#002 NtUserCreateWindowEx(DWORDdwExStyle,#003 PUNICODE_STRINGUnsafeClassName,#004 PUNICO
caimouse
·
2009-12-16 23:00
reactos
操作系统实现(160)
CreateWindowExW函数主要用来根据已经注册窗口类来创建一个窗口。它在User32.dll实现代码如下:#001 HWNDWINAPI#002 CreateWindowExW(DWORDdwExStyle,#003 LPCWSTRlpClassName,#004 LPCWSTRlpWindowName,#005
caimouse
·
2009-12-15 21:00
reactos
操作系统实现(159)
NtUserRegisterClassEx函数是Win32k.sys里实现窗口类的注册,那么窗口类的注册是什么意思呢?到底注册是为了什么样的目的呢?下面就通过实现代码的分析来解决这些问题,代码如下:#001 RTL_ATOMAPIENTRY#002 NtUserRegisterClassEx(INCONSTWNDCLASSEXW*lpwcx,#003 I
caimouse
·
2009-12-14 22:00
exception
String
list
null
Class
Parameters
reactos
操作系统实现(158)
在
ReactOS
的应用程序里,每个有窗口的应用程序都需要注册一个窗口类,然后根据窗口类来创建窗口。
caimouse
·
2009-12-13 11:00
String
user
null
Class
扩展
structure
reactos
操作系统实现(147)
下面来分析目录里
reactos
/drivers/video/miniport/vga
caimouse
·
2009-11-30 22:00
制造
IO
video
扩展
interface
initialization
reactos
操作系统实现(146)
Reactos
的显示组成主要由GDI、视频端口驱动程序、小端口驱动程序和显示驱动程序组成。
·
2009-11-29 18:00
react
reactos
操作系统实现(145)
前面的函数已经介绍怎么样显示一个字符串了,那么下面就来仔细地实查看怎么样实现一个字符的显示,当然这里字符的显示,只是字母的显示,没有中文显示,如果需要实现中文字符的显示,就需要修改这个函数和相应的排版函数、读取相应的字体文件。由于显示卡已经被初始化为图形模式,那么所有字符的显示都生成图形方式来显示,文字也不例外,因此需要使用字体的点阵数据。具体实现代码如下:#001 VOID#002 NTAPI
caimouse
·
2009-11-28 22:00
reactos
操作系统实现(144)
当操作系统引导过程中,需要输出一些信息给用户来查看,那么就需要这个简单的VGA驱动程序,可以输出字符串显示,实现这个功能的函数就是VidDisplayString函数,具体实现的代码如下:#001 VOID#002 NTAPI#003 VidDisplayString(PUCHARString)#004 {#005 ULONGTopDelta=14;#006 开始循环显示所有字符。#0
caimouse
·
2009-11-27 23:00
String
scroll
reactos
操作系统实现(143)
VgaIsPresent函数通过读取图形模式的索引寄存器和数据寄存器来检查VGA显示卡是否安装,实现代码如下:#001 BOOLEAN#002 NTAPI#003 VgaIsPresent(VOID)#004 {#005 UCHARVgaReg,VgaReg2,VgaReg3;#006 UCHARSeqReg,SeqReg2;#007 UCHARi;#008 读取VAG
caimouse
·
2009-11-26 21:00
c
null
图形
reactos
操作系统实现(142)
VidInitialize函数主要进行VGA简单视频显示模式初始化。具体实现代码如下:#001 BOOLEAN#002 NTAPI#003 VidInitialize(INBOOLEANSetMode)#004 {#005 ULONGContext=0;#006 PHYSICAL_ADDRESSTranslatedAddress;#007 PHYSICAL_ADDRESS
caimouse
·
2009-11-25 23:00
function
initialization
translation
reactos
操作系统实现(141)
在操作系统启动的早期阶段,由于很多基本的功能没有初始化(比如IO管理器都没有初始化),因此完整和功能强大的显示驱动程序是不可能运行的,那么就需要在这个阶段写一个比较简单的VGA显示驱动程序给内核引导时使用,这个驱动程序就是bootvid.dll。 先来分析在内核里调用初始化的位置,具体如下:#001 VOID#002 NTAPI#003 Phase1InitializationDiscard(I
caimouse
·
2009-11-24 23:00
IO
reactos
操作系统实现(140)
在创建文件成功后,然后就往文件里写入数据,而写入数据说明就需要文件系统给文件分配储存空间,以便保存这些数据到磁盘里,下面就来分析分配文件大小的函数,如下:#001 NTSTATUS#002 VfatSetAllocationSizeInformation(PFILE_OBJECTFileObject,#003 PVFATFCBFcb,#004
caimouse
·
2009-11-23 22:00
File
extension
disk
磁盘
reactos
操作系统实现(139)
当用户删除文件时,就会通过
ReactOS
的API调用IO管理器函数,然后创建IRP包发送到文件系统驱动程序来,然后就调用下面函数来把文件分配的簇从FAT分配表时删除。
caimouse
·
2009-11-22 11:00
api
IO
null
Integer
reactos
操作系统实现(138)
在FAT里,需要从目录入口项里找到文件的首簇数,下面这段代码就是实现这样的功能,如下:#001 ULONG#002 vfatDirEntryGetFirstCluster(PDEVICE_EXTENSION pDeviceExt,#003 PDIR_ENTRY pFatDirEntry)#004 {#005 ULONGcluste
caimouse
·
2009-11-21 23:00
reactos
操作系统实现(137)
VfatHasFileSystem函数主要用来读取FAT文件系统信息,并且判断这个磁盘卷是否为FAT文件系统,具体实现如下:#001 staticNTSTATUS#002 VfatHasFileSystem(PDEVICE_OBJECTDeviceToMount,#003 PBOOLEANRecognizedFS,#004
caimouse
·
2009-11-20 23:00
reactos
操作系统实现(136)
VfatMount函数主要用来安装FAT文件卷,具体实现代码如下:#001 staticNTSTATUS#002 VfatMount(PVFAT_IRP_CONTEXTIrpContext)#003 /*#004 *FUNCTION:Mountthefilesystem#005 */#006 {#007 PDEVICE_OBJECTDeviceObject=NULL;#008 P
caimouse
·
2009-11-19 23:00
reactos
操作系统实现(135)
当从IO管理器里调用函数IopParseDevice来分析设备时,就可以找到相应的磁盘设备,并在这个函数里调用函数IopCheckVpbMounted来检查这个文件系统是否加载,如果没有加载,就会调用函数IopMountVolume来加载文件卷,那么在这个函数里就会构造一个IRP发送给文件系统驱动程序,驱动程序就收到主功能码为IRP_MJ_FILE_SYSTEM_CONTROL和次功能码为IRP
caimouse
·
2009-11-18 22:00
reactos
操作系统实现(134)
文件控制块主要用来表示一个
ReactOS
打开文件的对象。
caimouse
·
2009-11-16 22:00
String
object
struct
File
header
Access
reactos
操作系统实现(133)
VfatReadDiskPartial函数主要用来构造一个IRP给底层驱动程序去读取数据返回。具体实现代码如下:#001 NTSTATUS#002 VfatReadDiskPartial(INPVFAT_IRP_CONTEXTIrpContext,#003 INPLARGE_INTEGERReadOffset,#004 INULONGReadLengt
caimouse
·
2009-11-15 22:00
null
Integer
buffer
reactos
操作系统实现(121)
CreatePartitionDeviceObjects函数是通过分析MBR扇区的数据,然后来创建所有分区对象。具体实现代码如下:#001 NTSTATUS#002 NTAPI#003 CreatePartitionDeviceObjects(#004 INPDEVICE_OBJECTPhysicalDeviceObject,#005 INPUNICODE_STRINGRegis
caimouse
·
2009-10-31 22:00
object
File
extension
disk
磁盘
Allocation
reactos
操作系统实现(120)
CreateDiskDeviceObject函数主要就是为了物理设备创建磁盘对象,并且查找磁盘上每个分区和创建相应的对象。具体实现代码如下:#001 NTSTATUS#002 NTAPI#003 CreateDiskDeviceObject(#004 INPDRIVER_OBJECTDriverObject,#005 INPUNICODE_STRINGRegistryPath,#
caimouse
·
2009-10-30 22:00
object
null
buffer
extension
disk
磁盘
reactos
操作系统实现(119)
前介绍了初始化函数ScsiClassInitialize,那么在这个函数里使用下面的语句来查找SCSI的磁盘,如下:if(InitializationData->ClassFindDevices(DriverObject,Argument2,InitializationData,portDeviceObject,portNumber))其实这里的函数InitializationData->Cla
caimouse
·
2009-10-29 22:00
object
search
buffer
Access
disk
磁盘
reactos
操作系统实现(118)
ScsiClassInitialize函数初始化驱动程序对象,主要是找到合适的端口驱动程序,并设置它来处理磁盘的命令,具体实现代码如下:#001 ULONG#002 NTAPI#003 ScsiClassInitialize(#004 IN PVOID Argument1,#005 IN PVOID Argument2,#006 I
caimouse
·
2009-10-27 21:00
数据结构
object
String
Class
attributes
initialization
reactos
操作系统实现(117)
在
Reactos
里,磁盘类的驱动程序是由disk.sys实现的。
caimouse
·
2009-10-27 21:00
function
Class
extension
disk
initialization
磁盘
reactos
操作系统实现(116)
PciIdeXFdoStartDevice函数是用来处理即插即用的启动设备消息,主要设置了DMA操作和保存设备端口的基地址,这里就是启动PCIIDE的物理设备,具体实现代码如下:#001 staticNTSTATUS#002 PciIdeXFdoStartDevice(#003 INPDEVICE_OBJECTDeviceObject,#004 INPIRPIrp)#005 {#006
caimouse
·
2009-10-26 22:00
reactos
操作系统实现(115)
PciIdeXFdoPnpDispatch函数主要处理PCIIDE即插即用的消息处理。具体实现代码如下:#001 NTSTATUSNTAPI#002 PciIdeXFdoPnpDispatch(#003 INPDEVICE_OBJECTDeviceObject,#004 INPIRPIrp)#005 {#006 ULONGMinorFunction;#007 PIO_STACK_L
caimouse
·
2009-10-25 14:00
reactos
操作系统实现(114)
PciIdeXAddDevice函数是用来添加PCIIDEX的设备,设置一个功能设备,并读取PCI总线的配置参数。具体实现代码如下:#001 NTSTATUSNTAPI#002 PciIdeXAddDevice(#003 INPDRIVER_OBJECTDriverObject,#004 INPDEVICE_OBJECTPdo)#005 {#006 PPCIIDEX_DRIVER_EX
caimouse
·
2009-10-24 21:00
reactos
操作系统实现(113)
下面来分析PCIIDE和PCIIDEX驱动程序,这两个都是PCI的IDE总线驱动程序。先从PCIIDE的入口函数开始,具体实现代码如下:#001 NTSTATUSNTAPI#002 DriverEntry(#003 INPDRIVER_OBJECTDriverObject,#004 INPUNICODE_STRINGRegistryPath)#005 {#006 NTSTATUSSta
caimouse
·
2009-10-23 21:00
properties
object
String
ide
扩展
extension
reactos
操作系统实现(112)
IdeReadWrite函数主要实现了IDE设备的读和写命令发送。具体实现函数如下:#001 ULONG#002 NTAPI#003 IdeReadWrite(#004 INPVOIDHwDeviceExtension,#005 INPSCSI_REQUEST_BLOCKSrb#006 )#007 #008 /*++#009 #010 RoutineDescription:
caimouse
·
2009-10-22 22:00
IO
command
ide
扩展
UP
returning
reactos
操作系统实现(111)
IdeSendSmartCommand函数主要发送IDE的命令。具体实现代码如下:#001 ULONG#002 NTAPI#003 IdeSendSmartCommand(#004 INPVOIDHwDeviceExtension,#005 INPSCSI_REQUEST_BLOCKSrb#006 )#007 #008 /*++#009 #010 RoutineDescri
caimouse
·
2009-10-21 20:00
IO
ide
buffer
input
attributes
returning
reactos
操作系统实现(110)
AtapiStartIo函数主要处理同步的IO请求包。具代的实现代码如下:#001 BOOLEAN#002 NTAPI#003 AtapiStartIo(#004 INPVOIDHwDeviceExtension,#005 INPSCSI_REQUEST_BLOCKSrb#006 )#007 #008 /*++#009 #010 RoutineDescription:#01
caimouse
·
2009-10-20 22:00
reactos
操作系统实现(109)
AtapiInterrupt函数是实现ATAPI的中断功能,主要根据SRB来判断是读取数据还是写入数据,然后对IDE设备读取或写入数据,还需要处理很多出错的情况。具体实现代码如下:#001 BOOLEAN#002 NTAPI#003 AtapiInterrupt(#004 INPVOIDHwDeviceExtension#005 )#006 #007 /*++#008 #009 R
caimouse
·
2009-10-19 22:00
reactos
操作系统实现(108)
AtapiHwInitialize函数初始化不是ATAPT设备,设置它支持多块传送。接着判断那些设备是CD-ROM设备,还清除忙状态。具体实现代码如下:#001 BOOLEAN#002 NTAPI#003 AtapiHwInitialize(#004 INPVOIDHwDeviceExtension#005 )#006 #007 /*++#008 #009 RoutineDescr
caimouse
·
2009-10-18 11:00
reactos
操作系统实现(107)
IssueIdentify函数主要是发送IDENTIFY命令给一个ATAPI设备,并且获取这个设备相关信息,比如磁头的个数。#001 BOOLEAN#002 NTAPI#003 IssueIdentify(#004 INPVOIDHwDeviceExtension,#005 INULONGDeviceNumber,#006 INULONGChannel,#007 I
caimouse
·
2009-10-17 22:00
IO
command
J#
ide
UP
360
reactos
操作系统实现(99)
下面来分析键盘的中断处理函数的实现,如下:#001 BOOLEANNTAPI#002 i8042KbdInterruptService(#003 INPKINTERRUPTInterrupt,#004 PVOIDContext)#005 {#006 PI8042_KEYBOARD_EXTENSIONDeviceExtension;#007 PPORT_DEVICE_EXTENSIO
caimouse
·
2009-09-29 23:00
扩展
Crash
extension
scroll
keyboard
output
reactos
操作系统实现(97)
在这个函数里,又继续地调用内核的两个函数KiConnectVectorToInterrupt和HalEnableSystemInterrupt来处理。#001 VOID#002 NTAPI#003 KiConnectVectorToInterrupt(INPKINTERRUPTInterrupt,#004 INCONNECT_TYPEType)
caimouse
·
2009-09-27 20:00
vector
null
patch
reactos
操作系统实现(96)
调用函数IoConnectInterrupt来设置键中断处理函数。#028 Status=IoConnectInterrupt(#029 &PortDeviceExtension->KeyboardInterrupt.Object,#030 i8042KbdInterruptService,#031 DeviceExtension,&PortDeviceEx
caimouse
·
2009-09-25 21:00
vector
IO
list
insert
keyboard
structure
reactos
操作系统实现(95)
在PNP管理器里,最重要的处理,就是即插即用消息。下面来分析键盘的即插即用消息处理函数,实现的代码如下:#001 NTSTATUSNTAPI#002 i8042Pnp(#003 INPDEVICE_OBJECTDeviceObject,#004 INPIRPIrp)#005 {#006 PIO_STACK_LOCATIONStack;#007 ULONGMinorFunction;
caimouse
·
2009-09-24 22:00
query
resources
extension
Descriptor
keyboard
translation
reactos
操作系统实现(94)
现在就来依次分析函数i8042Create、i8042Cleanup、i8042Close、i8042DeviceControl、i8042InternalDeviceControl和i8042Pnp。首先分析函数i8042Create,它的实现代码如下:#001 NTSTATUSNTAPI#002 i8042Create(#003 INPDEVICE_OBJECTDeviceObject,#
caimouse
·
2009-09-23 22:00
object
IO
button
interface
extension
keyboard
reactos
操作系统实现(93)
现在来分析一下键盘驱动程序里主要使用的IRP主功能代码,由于每一个IRP都在首部包括有一个主功能代码码,并且还可能有次功能代码。大体有下面几种主功能代码:IRP_MJ_CREATE 创建或打开设备文件。IRP_MJ_CREATE_NAMED_PIPE 名管道驱动主功能。IRP_MJ_CLOSE 关闭句柄。IRP
caimouse
·
2009-09-22 23:00
function
IO
Security
File
System
query
reactos
操作系统实现(92)
在DirverEntry函数,可以看到下面这句:#054 DriverObject->DriverExtension->AddDevice=i8042AddDevice;这里是设置了驱动程序的AddDevice函数指针,它是指向函数i8042AddDevice。PnP管理器将为每个硬件调用一次AddDevice函数,如下:下面开始调用即插即用的函数AddDevice来添加设备。#023
caimouse
·
2009-09-21 21:00
object
null
扩展
extension
scroll
keyboard
reactos
操作系统实现(91)
驱动程序很多配置参数是保存在注册表里,比如IO资源参数,中断号等内容。因此只有了解注册表的读取,以及相关内容才可以清楚知道键盘驱动程序,主要操作那些相关的端口,还有配置参数。下面来分析函数ReadRegistryEntries的实现,如下:#001 NTSTATUS#002 ReadRegistryEntries(#003 INPUNICODE_STRINGRegistryPath,#004
caimouse
·
2009-09-20 10:00
object
String
null
query
Build
Parameters
reactos
操作系统实现(90)
下面来分析函数IoAllocateDriverObjectExtension的实现,这个函数主要实现创建驱动程序扩展内存。#001 NTSTATUS#002 NTAPI#003 IoAllocateDriverObjectExtension(INPDRIVER_OBJECTDriverObject,#004 INPVOIDClient
caimouse
·
2009-09-19 23:00
上一页
2
3
4
5
6
7
8
9
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他