线程虚拟内存不足怎么办

虚拟内存不足怎么办  时间: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实现永久保存注册表数据.

易探云:买香港/美国/国内云服务器送QQ音乐绿钻豪华版1年,价值180元

易探云产品限时秒杀&QQ音乐典藏活动正在进行中!购买易探云香港/美国云服务器送QQ音乐绿钻豪华版1年,价值180元,性价比超级高。目前,有四大核心福利产品推荐:福利一、香港云服务器1核1G2M,仅218元/年起(香港CN2线路,全球50ms以内);福利二、美国20G高防云服务器1核1G5M,仅336元/年起(美国BGP线路,自带20G防御);福利三、2G虚拟主机低至58.8元/年(更有免费...

香港 E5-2650 16G 10M 900元首月 美国 E5-2660 V2 16G 100M 688元/月 华纳云

华纳云双11钜惠出海:CN2海外物理服务器终身价688元/月,香港/美国机房,免费送20G DDos防御,50M CN2或100M国际带宽可选,(文内附带测评)华纳云作为一家专业的全球数据中心基础服务提供商,总部在香港,拥有香港政府颁发的商业登记证明,APNIC 和 ARIN 会员单位。主营香港服务器、美国服务器、香港/美国OpenStack云服务器、香港高防物理服务器、美国高防服务器、香港高防I...

Kinponet是谁?Kinponet前身公司叫金宝idc 成立于2013年 开始代理销售美国vps。

在2014年发现原来使用VPS的客户需求慢慢的在改版,VPS已经不能满足客户的需求。我们开始代理机房的独立服务器,主推和HS机房的独立服务器。经过一年多的发展,我们发现代理的服务器配置参差不齐,机房的售后服务也无法完全跟上,导致了很多问题发生,对使用体验带来了很多的不便,很多客户离开了我们。经过我们慎重的考虑和客户的建议。我们在2015开始了重大的改变, 2015年,我们开始计划托管自己...

虚拟内存不足怎么办为你推荐
域名价格请问域名有什么价值吗?免费国内空间想做一个网站想找个免费的空间最好是国外的,国内的太多都是骗人的或者不稳定的。谢谢!台湾主机台湾的电脑硬件比韩国,日本,美国强?虚拟空间哪个好虚拟空间哪个好网站空间商个人网站备案如何从空间商到备案虚拟主机试用30天虚拟主机返佣是怎么回事?安徽虚拟主机合肥蜀山区哪家网络公司做网站最好双线虚拟主机双线虚拟主机是智能的吗双线虚拟主机G型双线虚拟主机是什么意思华众虚拟主机管理系统华众虚拟主机管理系统请问。华众 虚拟主机管理系统 这个问题 怎么解决 。就是后台可以开通虚拟主机 没有问题,但是 删除虚拟主机 后台显示删除成功的,但是实际在服务器上 文件夹 ftp iis站点 都没有被删除 是什么问题
政务和公益机构域名注册管理中心 安云加速器 香港cdn 网络星期一 好看的留言 抢票工具 directadmin 美国php空间 青果网 512m内存 eq2 免费ftp站点 牛人与腾讯客服对话 韩国网名大全 godaddy域名证书 炎黄盛世 gspeed 合租空间 韩国名字大全 双十一秒杀 更多