线程虚拟内存不足怎么办

虚拟内存不足怎么办  时间:2021-01-19  阅读:()

WindowsCE的体系结构WindowsCE的体系结构概述WindowsCE5.
0的体系结构WindowsEmbeddedCE6.
0的体系结构内存管理存储管理与文件系统进程和线程中断处理WindowsCE5.
0的体系结构大致4层硬件层OEM层OS层应用程序层WindowsCE5.
0的体系结构WindowsCE5.
0的体系结构硬件层WinCE支持4种CPU体系结构(分别是ARM、MIPS、x86、SHx).
OEM层OAL:WinCE内核与硬件通信,初始化硬件平台(包括中断服务例程ISR、实时时钟RTC、计算器、内核调试、开关中断、内核性能检测等),BootLoader:初始化硬件,加载OS执行配置文件:如何配置OS映像,如何编译某些源代码.
驱动程序:不同的硬件体系结构由不同的BSP支持.
WindowsCE5.
0的体系结构操作系统层操作系统的基本功能被放在多个独立的进程(exe)里面实现.
在运行的时候,这些进程大致有如下几个:内核NK.
EXE:进程、线程管理、中断处理和内存管理.
图形系统GWES.
EXE:操作绘图相关功能.
加载管理用户I/O(键盘、触摸屏、显示等)相关的驱动等.
对象存储FILESYS.
EXE:负责文件系统、WinCE数据库、系统注册表的操作.
设备管理系统DEVICE.
EXE:管理除GWES.
EXE管理之外的驱动程序.
服务SERVICES.
EXE:管理系统服务(与驱动类似,但没管理真实硬件.
它们提供一些后台处理或服务).
只有NK.
EXE和FILESYS.
EXE是必须的WindowsCE5.
0的体系结构Application(s)COREDLLNK.
EXEOALGWES.
EXEFILESYS.
EXEObjectStoreTouchDisplayKeyboardROMFSStorageManagerDEVICE.
EXESERVICES.
EXEFTPHTTPDTELNETDRAMROM/FLASHTimerINTCCPUHARDWARESerialUSB(Function)PCCard.
.
.
DevMgr.
DllBlockDeviceSerialCustomNK.
EXENK.
EXE=〉NK.
LIB+OAL.
LIBNK.
LIB代码与硬件外设无关但与处理器相关OAL越小越好微软提供了预先编译的NK.
LIB库文件NK.
lib的大多数代码都是公开的通过高级代码共享,可以得到更多代码提供:内存管理调度管理系统调用转发实现了一些基本的WinCE32函数NK.
EXEOALRAMROM/FLASHTimerINTCCPUGWES.
EXE图形窗口事件系统(GWES,Graphics,Windowing,andEventSubsystem)提供基本的绘图功能和窗口管理器,管理所有的图形界面处理以及用户输入:图像输出显示和打印用户输入设备:键盘、鼠标等窗口管理消息路由相当于桌面的USER32+GDI32(GraphicDeviceInterface)5.
0前,还包含电源管理GWES.
EXETouchDisplayKeyboardHARDWAREDEVICE.
EXE设备管理器电池驱动已经被从GWES中拿到此.
大多数功能都放在了devmgr.
dll中.
提供所有的与驱动相关的函数实现在启动的时候通过注册表加载驱动程序DEVICE.
EXEHARDWAREDevMgr.
DllBlockDeviceSerialCustomServices.
EXE所有服务的宿主进程与Device.
exe分开FTP,TELNET,HTTPD(Web),UPnP,SMB,其它…用户可以添加服务提供命令行工具来启动、关闭服务提供API管理服务4.
0前,无Services.
EXE,实现的服务做成伪驱动,让Device.
exe加载.
SERVICES.
EXEFTPHTTPDTELNETDFILESYS.
EXE所有与文件系统相关的函数都在FileSys.
exe中实现单根"\",没有像"C:\"一样的盘符有三个组件:对象存储存储管理器ROM文件系统WindowsCE5.
0的体系结构系统调用与CoreDLL.
DLLCoreDLL.
DLL不是一个单独的进程,它是一个会被所有用户进程都加载的动态链接库.
所有的应用程序都不能直接与操作系统或硬件打交道,如果用户程序希望访问WinCE提供的服务,那么只能通过CoreDLL.
DLL进行.
系统调用是OS向应用程序提供的服务,一般以函数形式提供.
WinCE系统调用的过程为:WindowsCE5.
0的体系结构WindowsCE5.
0的体系结构1.
应用程序进行系统调用时,直接调用CoreDLL.
DLL中的一个包装函数,此包装函数为系统调用准备所需的参数.
因为CoreDLL.
DLL会被WindowsCE的所有进程加载,因此这一步其实只是进程内部的函数调用.
2.
CoreDLL.
DLL会发起一个异常(软件中断),作用是把执行权重新由应用程序还给操作系统.
3.
操作系统内核会捕捉所有的异常,当操作系统捕获到此异常时,也就重新获得CPU.
在WindowsCE上,NK.
EXE会处理这个软件中断,这样进行系统调用的应用程序进程就挂起了,执行转入NK.
EXE.
4.
接下来,NK.
EXE根据系统调用的不同,找到具体实现该系统调用的进程(这些进程在WindowsCE上也被叫做PSL,ProtectedServerLibrary).
此进程如果不是NK.
EXE,那么执行就再次跳转,把执行转到具体实现系统调用的进程去执行.
5.
实现这个系统调用的进程得到执行的机会.
6.
系统调用结束,应用程序可以从对CoreDLL.
DLL的调用处返回,然后继续执行.
WindowsCE5.
0的体系结构如:某应用程序App.
exe要调用CreateWindow()来创建一个新窗口WindowsCE5.
0的体系结构应用程序层每个应用程序都是WinCE的一个单独进程,运行权限较低.
使用WinCEAPI与OS交互.
WindowsEmbeddedCE6.
0的体系结构被划分为UserMode(用户模式)和KernelMode(内核模式)两个"层",CoreDLL同时出现在两个层中,驱动程序也可以被加入到内核中,以前的.
exe基本上都变成了.
dll.
WindowsEmbeddedCE6.
0的体系结构所有系统提供的服务部分(如Filesys.
exe、GWES.
exe、Device.
exe等)"转移"到系统内核模式下(变成了Filesys.
dll、GWES.
dll、Device.
dll).
下页图展示了WindowsEmbeddedCE6.
0里的系统模块好处:提高效率.
当发生系统调用时,已变成了进程内的一个调用;确省的驱动也运行在内核模式.
坏处:引入了潜在的不稳定因素.
如果驱动程序不稳定,将对系统的整体稳定性产生非常严重的影响.
WindowsEmbeddedCE6.
0的体系结构WindowsEmbeddedCE6.
0的体系结构与5.
0的不同由上图可见,在WinCE5中的各种系统模块,如Filesys.
exe、Device.
exe、GWES.
exe等,都变成了Filesys.
dll、GWES.
dll、Device.
dll,在WindowsEmbeddedCE6.
0中这些服务已不再是一个个单独进程,而是一个个系统调用;NK.
exe的名字没有变,但已经不再是WinCE5中的NK.
exe了,WinCE5中NK.
exe提供的各种功能将由Kernel.
dll来替代,NK.
exe中仅仅包含一些OAL代码和保证兼容性的程序.
好处:除了提高效率外,还使得OEM和ISV商定制的驱动、服务代码和微软提供的WindowsEmbeddedCE6.
0的代码进行了分离,使得内核代码的升级更加容易且更加方便.
WindowsEmbeddedCE6.
0的体系结构内核独立传输层KITL(KernelIndependentTransportLayer)是为了调试工作更加方便而设计的,它削弱了通信协议与通信硬件之间的直接性依赖,降低了硬件传输层(HardwareTransportLayer)相关的开发工作量,硬件传输层在KITL的下层,使得KITL可以支持不同类型的通信,如,可以支持桌面操作系统和WindowsEmbeddedCE6.
0的设备通信.
WindowsEmbeddedCE6.
0的体系结构内核最基本的底层功能,这些功能包括进程、线程、内存管理,还包括一些文件管理功能、进程和线程的调度、实时支持、系统调用、内核电源管理等.
NK.
exe是OAL进程,内核KERNEL.
DLL是伴随着OAL启动的,NK.
exe是WindowsEmbeddedCE6.
0的核心.
下图表明了WindowsEmbedded的内核结构.
值得注意的是,图中Kernel.
dll所在的位置在WindowsCE5.
0中为NK.
exe.
WindowsEmbeddedCE6.
0的体系结构WindowsEmbeddedCE6.
0的体系结构CoreDLLCoreDLL同时出现在用户模式和内核模式中,CoreDLL提供核心OS服务,使应用程序能访问WindowsEmbeddedCE6.
0之下的计算资源,如文件系统、内存、设备、进程和线程等.
应用程序也通过这些服务管理和监视其所要完成任务所需要的资源,通过它,应用程序之间还可以共享程序代码和其他数据信息.
WindowsEmbeddedCE6.
0的体系结构文件系统包括文件系统,存储对象的管理.
WinCE6的对象存储系统提供各种文件系统的支持,包括FAT文件系统、RAM文件系统和其他CD等通用磁盘文件系统.
支持第三方定制的文件系统,支持与SQL-CE和SQLServer数据库的链接,有良好的安全特性,支持第三方程序对磁盘进行的加密.
WindowsEmbeddedCE6.
0的体系结构图形、窗口、事件管理子系统GWES(Graphic、Windowing、EventsSubsystem)集Win32API、UserInterface、GraphicDeviceInterface于一体,是用户、应用程序和WinCE6之间的一个共同的接口,三者通过GEWS进行通信和相关操作.
GWES所支撑的WinCE6的用户接口元素非常丰富,几乎可和桌面Windows相比,包括窗口、对话框、控制按钮、菜单和其他资源,还提供了光标、位图、文字、图标进行其他方面的控制操作.
WindowsEmbeddedCE6.
0的体系结构设备管理器设备管理器是被内核加载的,而且只要WinCE6还在运行设备管理器就不会停止工作,当设备管理器被加载时,I/O资源管理器也将被加载,用它从注册表中读取一个有效的可用资源列表.
设备管理器通过GUID(GloballyUniqueIdentifier,全局唯一标识符)来发现和管理设备.
设备管理器是通过device.
dll来实现的.
设备管理器与注册表的配合非常紧密,它运行和管理的大多数数据都来自注册表.
WindowsEmbeddedCE6.
0的体系结构驱动程序WinCE6中,驱动程序有两种模式,一种是内核模式,另外一种是用户模式,默认状况下,驱动程序运行在内核模式下,这有利于设备性能的提高,但也增加了不确定因素,这使得驱动程序在发布和认证时必须有严格的性能保证措施.
驱动根据各自类的不同将会被不同的进程加载,一般情况下,驱动会被以下三种进程加载:1.
文件系统Filesys.
dll;2.
设备管理器device.
dll;3.
GWESGWES.
dll.
这三种不同的进程将加载各自的驱动而不发生冲突.
WindowsEmbeddedCE6.
0的体系结构应用程序WinCE6提供了对.
NETCompactFramework的支持,使得开发应用程序有了良好的应用编程接口.
开发CE6.
0的应用程序,可以使用现有的开发工具和环境,也可以仅仅使用一些SDK(SoftwareDevelopmentKit).
WinCE6支持Unicode超大字符集,NLS(NationalLanguageSupport),对已有软件的国际化和本地化也更容易实现.
通常使用VisualStudio.
NET2005/2008来开发WindowsEmbeddedCE6.
0上的应用程序.
内存管理内存结构WinCE5的虚拟内存模型WinCE6的虚拟内存模型内存管理API内存结构*只在桌面Windows上存在PhysicalMemory*StorageDeviceVirtualMemoryLogicalMemory(Heap,stack)CRuntime(mallc,new…)Application内存结构物理内存在内部或外部总线上可访问的实际的RAM/ROMRAM分为对象存储区域(objectstore,往往在关闭电源后提供电力来保存)和应用程序内存区域(programmemory).
ROM中存放的内容可以是压缩的,也可以是不压缩的(可本地执行--XIP,executedinplace).
WindowsCE只能管理512MB的物理内存虚拟内存虚拟内存是通过内存管理单元(MMU)转换过的虚拟地址应用程序使用虚拟内存而不关心实际物理内存,只要有内存可用就行.
操作系统使用MMU来处理虚拟地址和物理地址间的实时转换.
WindowsCE能管理4GB大小的虚拟地址空间.
允许代码在需要的时候再换入内存结构堆堆是一段连续的较大的虚拟地址空间,用来存放动态数据.
创建进程时,会创建默认大小为192K的堆.
应用程序可创建自己的堆,在堆中可以动态地分配、释放所需大小的内存块.
以字节为粒度来分配内存数据不可移动.
简化了虚拟内存分配,但易造成碎片.
不可变更(当整个堆被释放时进行页面回收)自动的分配内存和按要求提交页栈存储在一个函数中使用的临时数据为每一个线程创建时分配默认的栈(64K,栈顶2K用来检测栈满)虚拟内存的三种状态free(可用):可被分配reserved(保留):虚拟地址被保留,不能再分配.
但不能被使用,因为它没有被映射到物理内存.
committed(提交):映射到物理地址.
WinCE5的虚拟内存模型如下图,WindowsCE将4G的虚拟地址空间分为128个槽slot,每个slot32MB(225字节),序号从0-127,每个槽被分成512个大小为64KB的块,根据CPU的不同,每个块被分成1KB或4KB的页面,这些页面映射到物理内存.
整个空间有二种:内核空间(0x80000000到0xFFFFFFFF)只被特权访问的内核模式代码使用(Kmode)大多数是静态虚拟地址映射(不会有页内错误)用户空间(0x00000000到0x7FFFFFFF)被应用程序使用大多数是动态虚拟地址映射WinCE5的虚拟内存模型KernelSpaceUserSpaceKernelAddresses:KPAGE,TrapArea,OthersSlot97:NK.
EXEUnusedStaticallyMappedVirtualAddresses:Un-CachedStaticallyMappedVirtualAddresses:CachedSlot0–CurrentProcessSlot1–XIPDLLcodeSlots2-32-ProcessesSlots33-63ObjectStoreMemory-MappedFilesFFFFFFFFE0000000C4000000C2000000C0000000A0000000800000007FFFFFFF42000000040000000200000000000000Total4GBVirtualSpace2GB2GBKernelSpaceUserSpaceUnusedWinCE5的虚拟内存模型内核空间0x80000000~0x9FFFFFFF:共512M,静态映射所有的物理地址(1:1)0xA0000000~0xBFFFFFFF:重复映射所有的物理地址.
与上段地址的区别是:上段地址内存有缓冲,而本段没有.
solt97(0xC2000000~0xC3FFFFFF):nk.
exe专用.
0xE0000000~0xFFFFFFFF:通常存放供虚拟内存用的页表和中断向量表等数据结构KernelSpaceUserSpaceKernelAddresses:KPAGE,TrapArea,OthersSlot97:NK.
EXEUnusedStaticallyMappedVirtualAddresses:Un-CachedStaticallyMappedVirtualAddresses:CachedFFFFFFFFE0000000C4000000C2000000C0000000A000000080000000Total4GBVirtualSpace2GB2GBKernelSpaceUnused静态映射虚拟地址2GBUser512MBUncached512MBCached32MBFlashPhysicalMemoryVirtualMemory040000008200000080000000A0000000C00000000000000064MBRAM0000000064MBRAM32MBFlash64MBRAMFFFFFFFFAddressTranslation32MBFlashKernelSpaceUserSpaceWinCE5的虚拟内存模型用户空间又分成二部分前33个,即0~32solt(地址为0~0x41FFFFFF)solt0用于映射当前正执行的进程solt1由XIP方式执行的DLL代码使用solt2~32:存放进程,每个solt运行一个进程.
其中前几个solt通常被系统进程占用.
后31个solt(地址为0x42000000~0x7FFFFFFF)由所有进程共享当进程所需地址空间超过32M时,可申请此段空间.
solt63用于存放纯资源DLL.
KernelSpaceUserSpaceSlot0–CurrentProcessSlot1–XIPDLLcodeSlots2-32-ProcessesSlots33-63ObjectStoreMemory-MappedFiles7FFFFFFF420000000400000002000000000000002GB2GBUserSpaceWinCE5的虚拟内存模型Slot33-62对象存储&内存映射文件Slot1:XIPDLLsSlot0:当前进程0x020000000x7FFFFFFF0x00000000Slot2-32进程Slot63:ResourceMappings0x42000000当前进程的拷贝同时可运行32个进程对象存储受保护所有的线程均可存取内存映射文件所有线程均可存取DLL资源WinCE5的虚拟内存模型单个进程(solt0)的虚拟地址空间,见下图Slot30Slot31Slot32.
.
.
01FFFFFF000100000000000032MBProcessSpaceCurrentProcessXIPROMDLLsnk.
exefilesys.
exeshell.
exedevice.
exegwes.
exeC4000000C2000000FreeVirtualSpaceSlot63.
.
.
ResourceDLLsSlot2Slot3Slot4Slot5Slot1Slot00A0000003E0000003C000000400000004200000000000000040000000200000006000000080000000C000000.
.
.
Slot97800000007E000000WinCE5的虚拟内存模型单个进程(solt0)的虚拟地址空间,见下图0x00000000~0x00010000(64K):出于处理器安全考虑,系统保留,用来捕获野指针(NULL).
64K之上:代码、数据、堆和栈.
进程申请虚拟内存从低向高.
最高空间:存放进程加载的DLL.
DLL代码和数据申请的空间从高到低.
如果这二个高低增长相撞,产生虚拟空间不足.
01FFFFFF000100000000000032MBProcessSpaceFreeVirtualSpaceWinCE6的虚拟内存模型为每个正运行的进程提供2G虚拟地址空间.
进程数可高达32000.
WinCE6的虚拟内存模型-用户空间与WinCE5类似,用户虚拟地址空间被一分为二.
最低64K,被系统保留,捕获野指针.
低1G的其余空间用来加载进程(代码、数据、堆、栈等)0x40000000~0x5FFFFFFF(512M):加载正运行的不同进程的DLL代码和只读数据.
空间分配从低向高.
WinCE6的虚拟内存模型-用户空间0x60000000~0xFFFFFFF(256M):分配给MMF(概念见下页)0x70000000~0x7FEFFFFF:核心程序和用户进程间的共享堆,实现核心程序和用户进程间通信(无需通过API).
此区域用户程序只读,但OS可写.
0x7FF00000–0x7FFFFFFF:不可访问,作为用户和核心间的缓存内存映射文件MMF(Memory-MappedFiles):基于RAM的映射文件为内存映射文件对象,而不以实际文件为基础.
内存映射文件常用于进程间通信.
另外,它可以是加载的各类文件.
还可使用它来映射大容量的文件,这样就不必在读取文件数据前设置很大的缓冲区.
通过调用hFile等于INVALID_HANDLE_VALUE的CreateFileMapping可获得这些文件.
WinCE6的虚拟内存模型-内核空间低1G:静态虚拟地址0xC0000000–0xC7FFFFFF:内核加载的(XIP)DLL0xC8000000–0xCFFFFFFF:文件系统的对象存储区0xD0000000–0xDFFFFFFF:内核模式的程序执行区.
如GWES.
DLL,系统DLL,内核驱动等.
0xE0000000–0xEFFFFFFF:同上.
除了SH4架构的CPU.
0xF0000000–0xFFFFFFFF:捕获系统调用,包含核心数据页.
WinCE6的虚拟内存模型-内核空间虚拟地址映射一旦内存管理单元(MMU)开始工作,CPU就不再直接访问物理内存了.
CE提供了两种物理内存地址同虚拟内存地址的映射关系,分别为静态映射和动态映射.
静态映射的虚拟地址空间只能由内核访问,而动态映射的地址空间可以由用户模式的应用程序访问.
WinCE6的虚拟内存模型-内核空间静态虚拟地址配置文件静态映射一般是通过对OAL中OEMAddressTable的定义来实现.
格式为:虚拟地址,物理地址,大小如,X86平台中地址映射在startup.
asm中,目录是WINCE600\PLATFORM\COMMON\SRC\X86\COMMON\STARTUP如:;RAM0x80000000->0x00000000,size64M80000000h,0,04000000h表示将虚拟地址80000000映射到物理地址0,大小为64MB.
静态映射的虚拟地址空间只能由内核访问WinCE6的虚拟内存模型-内核空间虚拟地址映射(续)静态虚拟地址配置文件(续)还可通过调用API来实现:LPVOIDCreateStaticMapping(DWORDdwPhysBase,DWORDdwSize);作为配置文件的补充,调用这个函数能够将指定首地址的物理内存块映射到虚拟地址空间,函数返回虚拟地址.
虚拟地址范围是内核的地址空间,只能由内核访问.
WinCE6的虚拟内存模型-内核空间虚拟地址映射(续)动态虚拟地址映射通过二个API函数实现:VirtualAlloc负责在虚拟内存空间内保留一段虚拟内存,而VirtualCopy负责虚拟内存提交到物理内存.
LPVOIDVirtualAlloc(虚拟起始地址,大小,申请类型,访问权限);BOOLVirtualCopy(虚拟目标地址,物理地址,大小,访问权限);VirtualCopy函数用于动态地将指定首地址的物理内存块映射到虚拟地址空间,这个虚拟地址空间一般为用户进程的地址空间,因为VirtualCopy函数被设计专用于驱动程序调用,它常被用于将一个物理内存块映射到不同的虚拟地址空间.
虚拟内存管理函数函数功能VirtualAlloc保留和提交虚拟内存VirtualQuery提供虚拟内存页的状态信息VirtualProtect改变提交页面的访问权限VirtualFree释放虚拟内存VirtualCopy绑定指定的物理内存地址范围到静态映射虚拟地址内存管理内存管理编程接口(2.
WinCE体系结构API.
PPT)存储管理与文件系统概述对象存储文件系统注册表数据库存储管理器相关API(参考http://msdn2.
microsoft.
com/zh-cn/library/aa459155.
aspx)存储管理与文件系统FileSys管理存储管理与文件系统,实现对象存储、ROM文件系统和存储管理器.
存储管理与文件系统对象存储对象存储是一个内存堆,逻辑上包含RAM系统注册表、RAM文件系统(可选)和数据库(可选).
若有后备电源,它提供对程序或数据的永久存储.
对象存储的功能:管理栈和内存堆;压缩和展开文件;无缝集成基于RAM的数据和基于ROM的数据.
对象存储中的数据存储是基于事务的.
随着WindowsEmbeddedCE的发展,对象存储的作用越来越小,而大容量的永久存储设备被越来越多地采用.
对象存储的大小可修改Config.
bib文件中的FSRAMPERCENT选项控制面板选项使用SetSystemMemoryDivision()函数文件系统概述文件系统格式文件系统驱动程序的创建与加载文件I/O操作文件系统:概述文件系统提供对存储设备的高效访问.
文件系统将存储设备结构化以便读写.
FileSys将所有文件系统统一到一个根"\"下面的单个系统中,无驱动器号,驱动器作为文件夹装在根的下面,其路径类似于"\StorageCard".
WINdowsCE提供3类文件系统:RAM文件系统,ROM文件系统,可安装文件系统.
RAM的文件系统:通常连接到呈现给应用程序的统一文件系统的根.
ROM文件系统:连接到统一文件系统中的"\Windows"文件夹.
可安装文件系统:外设可作为用户的文件系统挂载,如CD驱动器常挂载到\CDDriver目录.
也可根据设备需要自定义文件系统文件系统:文件系统格式FAT(FileAllocationTable)文件系统适用于所有外部存储卡,包括ATA卡(IDE接口)、线性flash卡以及PC卡等卡可被分区,每个分区可作为一个FAT卷挂载,放置在根目录的一个文件夹下.
BinFS文件系统BinFS:BinaryROMimagefilesystem,用于读取由Romimage.
exe产生的二进制文件格式.
.
bin文件格式将数据按特定的分段组织CD/UDFS文件系统CompactDiscFileSystem(CDFS)和UniversalDiscFileSystem(UDFS)用于读取CD,DVD,CD-ROM.
文件系统驱动程序的创建与加载文件系统驱动程序的创建函数映射文件系统驱动程序的输出函数被映射到标准Win32API上.
文件系统管理器将系统调用映射到文件系统驱动程序相应的输出函数上去.
WindowsCE为FSD的开发提供模板开发人员只要提供各种所需的函数就可以了.
如果不允许用户在设备上的某些操作,只要在FSD中不提供相应的函数即可.
保存所需信息的数据结构三种有用的数据结构PVOLUME,PFILE和PSEARCH分别保存已装载的卷、文件和查找句柄信息的数据结构,默认为DWORD型,也可以在FSD中重新定义指向所需要的结构.
文件系统驱动程序的创建与加载文件系统驱动程序的加载1)插入PC卡.
2)该卡驱动程序读取PC卡驱动注册表入口,它定义了该卡要使用的FSD的名称.
3)发送给存储管理器一条通知.
4)存储管理器安装适当的分区驱动程序,然后为分区装载相应的文件系统.
5)FSD管理器调用MyFSD.
dll的输出函数MyFSD_MountDisk.
6)当调用MyFSD_UnmountDisk时,设备上的所有卷会被注销.
文件系统一些文件I/O操作的API创建并打开文件:CreateFile读文件:ReadFile写文件:WriteFile移动文件指针:SetFilePointer关闭文件:CloseHandle获取文件信息:GetFileAttributes获取文件时间:GetFileTime获取文件大小:GetFileSize注册表注册表的作用注册表类型注册表操作注册表:注册表的作用注册表用于存储应用程序、驱动程序、用户参数、以及其他配置信息.
CE下注册表和windows操作系统中注册表概念和结构基本相同.
主要分为根键,子键,键值项.
形式:[ROOT]\[Key]\[Subkey]\[Subkeyorentry]如[HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer(8.
2)注册表:注册表的作用CE支持四个根键,描述如下:键名描述HKEY_LOCAL_MACHINE硬件和驱动配置数据HKEY_CURRENT_USER用户配置数据HKEY_CLASSES_ROOTOLE和文件类型匹配配置数据HKEY_USERS适用于所有用户的数据键值项由三部分组成:名称,类型,数据.
类型又分为多种,主要包括如下:注册表:注册表的作用REG_BINARY二进制数据REG_DWORD32位双字节数据REG_SZ以0结尾的字符串REG_DWORD_BIG_ENDIAN高位排在底位的双字big-endian格式,一个多字节值在内存职被从高字节到低字节存贮.
如,值0x12345678在big-endian格式中被存贮为(0x120x340x560x78)REG_DWORD_LITTLE_ENDIAN:一个little-endian格式的32位数字.
这相当于REG_DWORD.
little-endian格式,是一个多字节值在内存中被从低字节到高字节存贮.
如,值0x12345678在little-endian格式中被存贮为(0x780x560x340x12).
REG_EXPAND_SZ扩展字符串,可以是包含未被引用的环境变量字符串(如,"%PATH%")REG_LINK一个UNICODE符号链接REG_RESOURCE_LIST设备驱动程序资源列表REG_MULTI_SZ多字符串(字符串数组)REG_NONE:未定义值类型.
注册表:注册表类型CE支持两种类型的注册表:一种基于RAM,一种基于配置单元(Hive).
基于RAM的注册表把注册表作为一个对象存储堆存放在系统的内存中.
在对象存储中保存所有注册表数据必须为RAM持续供电,断电则丢失数据(不为RAM供电的设备必须在关闭电源过程中备份注册表,在恢复电源时还原注册表).
用于从不或很少冷启动的设备基于RAM的注册表WindowsCE提供了两种方法用来断电保存基于RAM的注册表:1.
WindowsCE提供的两个系统API,用来保存和还原整个注册表,它们的原形如下:BOOLRegCopyFile(LPCWSTRlpszFile);BOOLRegRestoreFile(LPCWSTRlpszFile);lpszFile:保存注册表信息的文件的名字2.
这种方法需OEM参与,OEM可在BSP的OAL层中实现两个函数,它们的声明为:DWORDReadRegistryFromOEM(DWORDdwFlags,LPBYTElpData,DWORDcbData);BOOLWriteRegistryToOEM(DWORDdwFlags,LPBYTElpData,DWORDcbData);dwFlags:REG_READ_BYTES_START表示读新的注册表,REG_WRITE_BYTES_START表示写新的注册表;lpData:指向注册表数据的缓冲区,由OS分配cbData:缓冲区的大小,0表示到达注册表尾部如,下例使用基于RAM的注册表,利用RegCopyFile和RegRestoreFile实现永久保存注册表数据.

iON Cloud七月促销适合稳定不折腾的用户,云服务器新购半年付8.5折,洛杉矶/圣何塞CN2 GT线路,可选Windows系统

iON Cloud怎么样?iON Cloud今天发布了7月份优惠,使用优惠码:VC4VF8RHFL,新购指定型号VPS半年付或以上可享八五折!iON的云服务器包括美国洛杉矶、美国圣何塞(包含了优化线路、CN2 GIA线路)、新加坡(CN2 GIA线路、PCCW线路、移动CMI线路)这几个机房或者线路可供选择,有Linux和Windows系统之分,整体来说针对中国的优化是非常明显的,机器稳定可靠,比...

香港服务器租用多少钱一个月?影响香港服务器租用价格因素

香港服务器租用多少钱一个月?香港服务器受到很多朋友的青睐,其中免备案成为其特色之一。很多用户想了解香港云服务器价格多少钱,也有同行询问香港服务器的租赁价格,一些实际用户想要了解香港服务器的市场。虽然价格是关注的焦点,但价格并不是香港服务器的全部选择。今天小编介绍了一些影响香港服务器租赁价格的因素,以及在香港租一个月的服务器要花多少钱。影响香港服务器租赁价格的因素:1.香港机房选择香港机房相当于选择...

创梦网络-江苏宿迁BGP云服务器100G高防资源,全程ceph集群存储,安全可靠,数据有保证,防护真实,现在购买7折促销,续费同价!

官方网站:点击访问创梦网络宿迁BGP高防活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式宿迁BGP4vCPU4G40G+50G20Mbps1个100G不限流量299元/月 209.3元/月点击自助购买成都电信优化线路8vCPU8G40G+50G20Mbps1个100G不限流量399元/月 279.3元/月点击自助购买成都电信优化线路8vCPU16G40G+50G2...

虚拟内存不足怎么办为你推荐
域名空间代理免费空间代理,免费域名代理,哪里有?租服务器开个小型公司,租个服务器需要多少钱?虚拟主机申请在哪里可以申请到虚拟主机呢php虚拟空间php虚拟主机空间如何连接mysql重庆网站空间重庆建网站的公司 我司准备建一个好点的网站,求推荐虚拟主机软件虚拟主机管理软件那个最好用?成都虚拟主机成都唯度科技有限公司怎么样?深圳虚拟主机深圳鼎峰网络科技 虚拟主机空间怎么样美国虚拟主机推荐美国独立ip虚拟主机哪儿有,推荐下?二级域名一级域名与二级域名有啥区别
域名服务 服务器租用托管 谷歌域名邮箱 google镜像 仿牌空间 blackfriday eq2 panel1 www789 国外的代理服务器 广州虚拟主机 iki 测试网速命令 如何登陆阿里云邮箱 开心online ncp是什么 认证机构 卡巴斯基免费版下载 大容量存储模式 免费邮件服务器软件 更多