随笔分类 -  React OS

摘要:BTS 指令,一般用在自旋锁上或者类似概念。自旋锁核心操作就是InterlockedBitTestAndSet。 InterlockedBitTestAndSet有两种实现: 1. ReactOS方法 static __inline__ BOOLEAN InterlockedBitTestAndSet(IN LONG volatile *Base, ... 阅读全文
posted @ 2012-04-12 17:04 Fan Zhang 阅读(4985) 评论(0) 推荐(1)
摘要:NT_UP Use this macro to indicate whether your driver will run on a uniprocessor machine or multiprocessor machine. The default is uniprocessor, as follows: NT_UP=1 To specify multiprocessor... 阅读全文
posted @ 2012-02-13 15:48 Fan Zhang 阅读(409) 评论(0) 推荐(0)
摘要:试图用ubuntu apt-get源里的gcc-mingw32,后来发现编译有错误。 后来还是老老实实的下载RosBE for Unix,编译 并安装。 然后执行/usr/local/RosBE/RosBE.sh 或者执行/usr/local/RosBE/createshortcut.sh,在桌面创建快捷方式 阅读全文
posted @ 2012-01-13 15:34 Fan Zhang 阅读(225) 评论(0) 推荐(0)
摘要:MachHwDetect调用,它其实是个宏,对应i386,它对应着PcHwDetect。 SystemKey = DetectSystem(); /* Detect buses */ DetectPciBios(SystemKey, &BusNumber); DetectApmBios(SystemKey, &BusNumber); DetectPnpBios(SystemKey, &BusNumber); DetectIsaBios(SystemKey, &BusNumber); DetectAcpiBios(SystemKey, &BusNumber 阅读全文
posted @ 2011-03-16 15:15 Fan Zhang 阅读(1405) 评论(0) 推荐(0)
摘要:建立全局PAGE_LOOKUP_TABLE_ITEM类型的数组PageLookupTableAddress,元素个数是TotalPageCount(总共可用页数)。 然后调用MmInitPageLookupTable函数初始化PageLookupTableAddress,并且标记每个元素记录的类型是什么。 MmInitializeHeap初始化Heap 阅读全文
posted @ 2011-03-16 15:05 Fan Zhang 阅读(185) 评论(0) 推荐(0)
摘要:MmInitializeMemoryManager函数是BootMain函数中很重要的一步。 MmInitializeMemoryManager的前面会打印出一段log,代码如下。 #if DBG // Dump the system memory map DPRINTM(DPRINT_MEMORY, "System Memory Map (Base Address, Length, Type):... 阅读全文
posted @ 2011-03-16 11:51 Fan Zhang 阅读(270) 评论(0) 推荐(0)
摘要:1.代码从MBR启动(boot\freeldr\bootsect\dosmbr.asm) 2.转到硬盘启动分区(boot\freeldr\bootsect\fat32.asm),它负责寻找freeldr.sys。找到后加载到0000:8000h,然后找到freeldr.sys的入口地址。 3.代码跳转到_mainCRTStartup代码(boot\freeldr\freeldr\arch\i386... 阅读全文
posted @ 2011-03-15 16:24 Fan Zhang 阅读(375) 评论(0) 推荐(0)
摘要:RunLoader函数有两个版本,分别位于bootmgr.c(安装时使用)和setupldr.c中。 先分析bootmgr.c中的RunLoader函数。默认USE_UI宏被定义。UiDrawStatusText等函数会在安装时在屏幕上打出文字。 MachHwDetect是检测硬件。它会调用PcHwDetect。   现在分析setupldr.c中的RunLoader函数 它调用... 阅读全文
posted @ 2010-10-25 15:41 Fan Zhang 阅读(3144) 评论(0) 推荐(0)
摘要:MmInitializeMemoryManager函数调用了BIOS的15H中断(AX=​E820h​),此功能是枚举出系统的扩展内存。 调用MmGetAddressablePageCountIncludingHoles,返回物理内存的页面数,即物理内存大小/页面大小。 调用MmFindLocationForPageLookupTable,返回一个数组地址,来存放PageLookupTable... 阅读全文
posted @ 2010-10-25 13:37 Fan Zhang 阅读(172) 评论(0) 推荐(0)
摘要:如果想在屏幕上输出,调用printf 如果想在串口里输出,调用DbgPrint宏或者DebugPrint函数。 其中DbgPrint在DBG宏定义时有效,默认情况下DBG宏被定义。 其中宏DBG是在ReactOS-i386.rbuild里面控制的。 阅读全文
posted @ 2010-10-25 11:35 Fan Zhang 阅读(137) 评论(0) 推荐(0)
摘要:fathelp.asm开头就是个向后跳转,这个距离是512字节。这个跳转将转移到arch.S的RealEntryPoint函数里。RealEntryPoint的任务是跳入保护模式,设置GDT和IDT,然后freeldr.c中的BootMain函数。 阅读全文
posted @ 2010-10-24 23:56 Fan Zhang 阅读(188) 评论(0) 推荐(0)
摘要:版本:0.3.3 FAT32.asm编译后占用2个sector,它首先从7c00:0000处加载,DL初始值代表启动磁盘。 FAT32.asm的前512字节的作用是把后512字节调入内存7e00:0000,并跳入这个位置。 FAT32.asm的前512字节的作用是搜索FREELDR.sys,并把它调入内存0:8000,并且跳入这个位置。 FREELDR.sys的头部其实是fathelp.a... 阅读全文
posted @ 2010-10-22 18:42 Fan Zhang 阅读(369) 评论(0) 推荐(0)
摘要:在\include\ndk\iofuncs.h中增加 ---------------------------------------------------------------- NTSYSCALLAPI NTSTATUS NTAPI NtMyTest( ); 在\include\ndk\ddk.h中增加 -------------------------------------------... 阅读全文
posted @ 2010-05-25 13:57 Fan Zhang 阅读(292) 评论(0) 推荐(0)
摘要:指针不支持比较大小,将指针转换成ULONG_PTR类型,可以比较大小。 阅读全文
posted @ 2010-03-28 17:17 Fan Zhang 阅读(861) 评论(0) 推荐(0)
摘要:ObInit会被调用两次,ObpInitializationPhase分别为TRUE和FALSE的时候。 在ObpInitializationPhase==TURE时,创建根目录\和\ObjectTypes 在ObpInitializationPhase==FALSE时,调用ObCreateObjectType,创建\ObjectTypes中下的的Type、Directory、SymbolicL... 阅读全文
posted @ 2010-02-10 16:53 Fan Zhang 阅读(329) 评论(0) 推荐(0)
摘要:http://svn.reactos.org/reactos/tags/ReactOS-0.3.14/http://svn.reactos.org/reactos/tags/ReactOS-0.3.9/reactos/http://svn.reactos.org/reactos/tags/ReactOS-0.3.3/reactos/可以证明用RosBE-1.4.5.exe编译ReactOS-0.3.9在编译ReactOS-0.3.3的时候,用RosBE-1.4.5编译会出现一点小问题。解决方法如下: 1. 修改lib\3rdparty\mingw\mingw.rbuild,将mingw_mai 阅读全文
posted @ 2010-02-04 21:46 Fan Zhang 阅读(438) 评论(0) 推荐(0)
摘要:IopCreateFile=>IoMountVolume=>IopMountFileSystemIopMountFileSystem构造IRP StackPtr->MajorFunction = IRP_MJ_FILE_SYSTEM_CONTROL; StackPtr->MinorFunction = IRP_MN_MOUNT_VOLUME; 然后依次查询注册过的分区驱动,... 阅读全文
posted @ 2009-06-24 17:29 Fan Zhang 阅读(304) 评论(0) 推荐(0)
摘要:make dist会将所有文件编译后,放在\dist目录下。 阅读全文
posted @ 2009-06-24 16:11 Fan Zhang 阅读(299) 评论(0) 推荐(0)
摘要:感觉IoCreateFile应该算是系统调用,它会调用ObCreateObject函数。 IoCreateFile和IoCreateDevice都会调用ObCreateObject函数。在中IoCreateFile中, Status = ObCreateObject(FileHandle, DesiredAccess, ObjectAttributes, IoFileObjectType, (PV... 阅读全文
posted @ 2009-06-24 15:40 Fan Zhang 阅读(834) 评论(0) 推荐(0)
摘要:在DriverEntry中,创建了一个device,并调用IoRegisterFileSystem,将它注册到文件系统类型中。每个分区类型驱动加载时候,都会调用IoRegisterFileSystem。 阅读全文
posted @ 2009-06-24 13:11 Fan Zhang 阅读(212) 评论(0) 推荐(0)