0x05_文件系统

合集下载

文件系统简要

文件系统简要

一.物理磁盘结构:1.磁道:当磁盘的盘面旋转时。

磁头保持在一个位置上。

当盘面旋转一圈时。

划过的一个圆就为磁道。

一条磁道的储存量:一磁道= 63个扇区。

(通常情况)。

2.扇区:磁道上被逻辑划分弧段相等的就为扇区,它的编号从1开始,一扇区大小为512个字节。

3.柱面:由一组重叠的盘面组成,每个盘面上都划分为相等的磁道,并从0 开始编号。

具有相同编号组成的一个圆柱为柱面,柱面数=于一个盘面上的磁道数,对于每个盘面都有自己的磁头所以有CHS :(Clinder(柱面) Head(磁头)Sector(扇区)),这就是一个寻址方式。

物理磁盘结构图以下引用的函数均在WIN32下二.分区表1.主引导扇区(MBR)分区表的基本信息放在主引导扇区,主引导扇区的地址CHS=柱面0 , 磁头0, 扇区1.其大小为一扇区大小512个字节。

这里我把这512个字节总结为下得一个结构体:#pragma pack(1)typedef struct InFoDisk{UCHAR BootID; //80h表示可启动分区,否则为0;对主分区有用;UCHAR SartHead ; //分区的起始磁头号;USHORT SartSectorTrack ;//分区的起始扇区和磁道号UCHAR FileSystemID; //05H或0FH为扩展分区,06H或0EH为FA T16,0BH或0CH为FA T32 ,07为NTFS;UCHAR EndHead; //分区结束磁头号;USHORT EndSectorTrack; // 分区结束扇区和磁道号ULONG HeadSecor; //分区前的扇区;ULONG AllSector; //分区的总扇区;}InFoDisk,*PInFoDisk;/*位于磁盘的0磁头0拄面1扇区;*/#pragma pack(1)typedef struct _System_Boot_Sector{UCHAR BootCode[0x1be]; //引导代码;InFoDisk InFoC; //C分区的基本信息;InFoDisk InFoD; //D分区的基本信息InFoDisk InFoE; //E分区的基本信息一般不用为0;InFoDisk InFoF; //E分区的基本信息一般不用为0;USHORT LoGo; //"AA55";}System_Boot_Sector,*PSystem_Boot_Sector;从结构体可以看出偏移0x1be个字节就得到分区表的基本信息,在WINDOWS编程下这么找到:DWORD cbRead;System_Boot_Sector BootSectorData;HANDLE hFile=CreateFile("\\\\.\\PhysicalDrive0", GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE|1, 0, OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN, 0);ReadFile(hFile, & BootSectorData,0x200 , &cbRead, NULL);//读的主引导扇区的数据。

AIX 0555 fsck error

AIX 0555 fsck error

检查过程中发现一台IBM PSeries无法远程登陆,这是个不妙的信号,必须赶紧解决,要知道下午还有工程师预约实验室做方案测试呢。

我先到机房查看了一下,发现这台机器的显示屏上面无显示,而液晶屏幕显示“E1F1”,不太了解什么意思,于是首先给IBM技术支持咨询代码究竟代表什么信息。

一通电话打到了IBM客户服务部,IBM客服人员却说:我公司当初在购买这批机器的时候,只买了一年的质保服务,所以不能提供服务了。

狂晕,这条路走不下去了,还是自己摸索吧。

找寻原因,文件系统故障首先只能重启这台小型机。

这里要特别提醒大家:如果大家的服务器出现故障,而且还在厂家的服务期之内,最好不要重启机器,这样可能会丢失一些信息,把故障原因隐藏起来。

重启之后,液晶显示屏显示很多数字信息,都是正常启动信息。

最后,机器显示“0555 fsck error”,然后就停在这里不动了。

呵呵,估计文件系统损坏就是这台机器不能正常启动的原因了。

怀疑之前有人非法操作,破坏了文件系统。

一般来说,非法关机或者强行杀掉文件系统进程最容易产生这样的错误。

虽然我不熟悉AIX,但根据我对Solaris和Linux的经验,决定先采用光盘引导。

插入AIX5.2的引导盘,机器还真引导起来了,只是引导起来的机器无法使用。

任何和硬盘打交道的操作都不能使用,比如touch,makdir这些命令全部无效,只能使用ls,date这些与硬件无关的命令,这样可不能算是可用的机器啊。

察看启动日志和系统错误日志也都没有任何特别的提示。

看来日志也不能帮我了。

接着使用系统的自带的fsck修复文件系统,结果却提示我无法找到系统分区表,使用AIX自带的SMIT工具想查找问题原因,结果smit也无法启动,返回的错误代码显示无法在tmp分区下创建文件,看来在系统里面想要恢复是不太容易了。

现在剩下的道路就是重装操作系统,因为文件系统是建立在操作系统之上的,重装操作系统自然会重配文件系统,那么这个问题就迎刃而解了。

内存错误代码大全

内存错误代码大全

系统内存蓝屏的错误代码大全系统内存蓝屏的错误代码大全0 0x00000000 作業完成。

1 0x00000001 不正确的函數。

2 0x00000002 系統找不到指定的檔案。

3 0x00000003 系統找不到指定的路徑。

4 0x00000004 系統無法開啓檔案。

5 0x00000005 拒絕存取。

6 0x00000006 無效的代碼。

7 0x00000007 儲存體控制區塊已毀。

8 0x00000008 儲存體空間不足,無法處理這個指令。

9 0x00000009 儲存體控制區塊地址無效。

10 0x0000000A 環境不正确。

11 0x0000000B 嘗試加載一個格式錯誤的程序。

12 0x0000000C 存取碼錯誤。

13 0x0000000D 資料錯誤。

14 0x0000000E 儲存體空間不夠,無法完成這項作業。

15 0x0000000F 系統找不到指定的磁盤驅動器。

16 0x00000010 無法移除目錄。

16 0x00000010 無法移除目錄。

17 0x00000011 系統無法将檔案移到其它的磁盤驅動器。

18 0x00000012 沒有任何檔案。

19 0x00000013 儲存媒體爲寫保護狀态。

20 0x00000014 系統找不到指定的裝置。

21 0x00000015 裝置尚未就緒。

22 0x00000016 裝置無法識别指令。

23 0x00000017 資料錯誤 (cyclic redundancy check)24 0x00000018 程序發出一個長度錯誤的指令。

25 0x00000019 磁盤驅動器在磁盤找不到持定的扇區或磁道。

26 0x0000001A 指定的磁盤或磁盤無法存取。

27 0x0000001B 磁盤驅動器找不到要求的扇區。

28 0x0000001C 打印機沒有紙。

29 0x0000001D 系統無法将資料寫入指定的磁盤驅動器。

30 0x0000001E 系統無法讀取指定的裝置。

Windows系统常见的错误代码及解决方法

Windows系统常见的错误代码及解决方法

Windows系统常见的错误代码及解决方法无论是在日常使用电脑的过程中,还是在进行软件安装、升级、运行等操作时,我们都可能遭遇到Windows系统的错误代码。

这些错误代码可能会给我们的工作和生活带来一定的困扰,因此了解这些错误代码以及相应的解决方法就显得尤为重要了。

本文将介绍一些常见的Windows系统错误代码,并提供相应的解决方法,以帮助读者更好地应对这些问题。

一、蓝屏错误代码(BSOD)1. 错误代码:0x0000001A错误描述:内存管理错误解决方法:首先,可以尝试重新插拔内存条,确保其接触良好。

其次,可以运行内存诊断工具,检测是否存在内存问题。

最后,如果问题仍然存在,可以更新或更换内存条。

2. 错误代码:0x00000050错误描述:页错误解决方法:一般情况下,这种错误可能是由于硬件或驱动程序问题引起的。

可以尝试更新或卸载最近安装的驱动程序,或者进行硬件故障排查。

二、设备错误代码1. 错误代码:Code 37错误描述:Windows无法找到设备的驱动程序解决方法:可以尝试重新安装或更新设备的驱动程序,并确保相关的设备已正确连接。

2. 错误代码:Code 43错误描述:设备报告了一个问题解决方法:可以尝试重新插拔设备,或者尝试更新设备的驱动程序。

三、应用程序错误代码1. 错误代码:0xC0000005错误描述:访问冲突解决方法:可以尝试使用系统自带的问题报告工具,或者进行磁盘检查和修复。

2. 错误代码:0x80070002错误描述:系统找不到指定的文件解决方法:可以尝试重新安装相关应用程序,或者进行病毒扫描以及系统文件修复。

四、网络连接错误代码1. 错误代码:0x800704cf错误描述:本地设备找不到网络资源解决方法:可以尝试重启路由器、调整网络配置,或者更新网络驱动程序。

2. 错误代码:0x80070035错误描述:网络路径未找到解决方法:可以尝试禁用防火墙、重新启动网络共享服务,或者调整网络协议。

SD卡FAT32文件系统学习手册

SD卡FAT32文件系统学习手册

技术文件技术文件名称:SD卡FAT32文件系统学习手册技术文件编号:1.0版本:1.0拟制何呈审核张勇批准力天电子修改记录文件编号版本号拟制人/修改人拟制/修改日期更改理由主要更改内容(写要点即可)1.0何呈2010-01-16一 一般硬盘数据结构是按下面来建立的。

二首先看看启动区的内容,也就是第一个扇区。

使用软件:WinHex有用的内容用彩色线标志下:(1)灰色线内容:EB 59 90 跳转指令;(2)灰色点线内容:4D 53 44 4F 53 35 2E 30 为厂商标志和os 版本号,这里是MSDOS5.0;(3)红色部分:00 20 (偏移地址0BH,长度2)注意这里数据的布局,高地址放高字节,低地址放低字节(数据为小端格式组织),所以数据应该是0200,就是512,表示的意思是,该磁盘每个扇区有512个字节,有的可能是1024、2048、4096; (4)黄色部分:08 (偏移地址0DH,长度1)表示的意思是每个簇有8个扇区,这个值不能为0,而且必须是2的整数次方,比如1、2、4、8、16、32、64、128,但是这个值不能使每个簇超过32KB字节;(5)蓝色部分:24 00 (偏移地址0EH,长度2),转换一下,就是00 24,意思是保留区域中的保留扇区数为36个,那么就可以知道下面的FAT1区的开始的地址就是:0x24*200(每个扇区的字节数)=0x4800;(6)粉色部分:02 (偏移地址10H,长度1) ,此卷中的FAT结构的份数为2,另外一个是备份的。

(7)黑色部分:C6 03 (偏移地址24H,长度2)转换一下,03C6,每个FAT占用的扇区数。

那么每个扇区占用的字节数就是0x03c6*200=78C00。

根据启动区、FAT1、FAT2、根目录、数据区的次序,可以依次计算出它们的地址了。

启动区:理所当然是0x00;FAT1:0x4800;FAT2:0x4800 + 0x78C00 = 7D400;根目录区:7D400 + 78C00 = F6000;数据区的地址,等等再计算。

系统Code_error对照表

系统Code_error对照表

网上找的,号称全集,但至少是比较多的了。

和大家分享一下,方便大家查找。

(一)0 0x0000 作业完成。

10x0001 不正确的函数。

20x0002 系统找不到指定的档案。

30x0003 系统找不到指定的路径。

40x0004 系统无法开启档案。

50x0005 拒绝存取。

60x0006 无效的代码。

70x0007 储存体控制区块已毁。

80x0008 储存体空间不足,无法处理这个指令。

90x0009 储存体控制区块位址无效。

100x000A 环境不正确。

110x000B 尝试载入一个格式错误的程式。

120x000C 存取码错误。

130x000D 资料错误。

140x000E 储存体空间不够,无法完成这项作业。

150x000F 系统找不到指定的磁碟机。

160x0010 无法移除目录。

170x0011 系统无法将档案移到其他的磁碟机。

180x0012 没有任何档案。

190x0013 储存媒体为防写状态。

200x0014 系统找不到指定的装置。

210x0015 装置尚未就绪。

220x0016 装置无法识别指令。

230x0017 资料错误 (cyclic redundancy check) 24 0x0018 程式发出一个长度错误的指令。

250x0019 磁碟机在磁碟找不到持定的磁区或磁轨。

260x001A 指定的磁碟或磁片无法存取。

270x001B 磁碟机找不到要求的磁区。

280x001C 印表机没有纸。

290x001D 系统无法将资料写入指定的磁碟机。

300x001E 系统无法读取指定的装置。

310x001F 连接到系统的某个装置没有作用。

320x0020 The process cannot access the file because it is being used by another process.330x0021 档案的一部份被锁定,现在无法存取。

340x0022 磁碟机的磁片不正确。

请将 %2 (Volume Serial Number: %3) 插入磁碟机 %1。

系统错误提示代码解析

系统错误提示代码解析

系统错误提示代码解析:0 0x0000 操作成功完成。

1 0x0001 函数不正确。

2 0x0002 系统找不到指定的文件。

3 0x0003 系统找不到指定的路径。

4 0x0004 系统无法打开文件。

5 0x0005 拒绝访问。

6 0x0006 句柄无效。

7 0x0007 存储控制块被损坏。

8 0x0008 存储空间不足,无法处理此命令。

9 0x0009 存储控制块地址无效。

10 0x000A 环境不正确。

11 0x000B 试图加载格式不正确的程序。

12 0x000C 访问码无效。

13 0x000D 数据无效。

14 0x000E 存储空间不足,无法完成此操作。

15 0x000F 系统找不到指定的驱动器。

16 0x0010 无法删除目录。

17 0x0011 系统无法将文件移到不同的驱动器。

18 0x0012 没有更多文件。

19 0x0013 媒体受写入保护。

20 0x0014 系统找不到指定的设备。

21 0x0015 设备未就绪。

22 0x0016 设备不识别此命令。

23 0x0017 数据错误(循环冗余检查)。

24 0x0018 程序发出命令,但命令长度不正确。

25 0x0019 驱动器找不到磁盘上特定区域或磁道。

26 0x001A 无法访问指定的磁盘或软盘。

27 0x001B 驱动器找不到请求的扇区。

28 0x001C 打印机缺纸。

29 0x001D 系统无法写入指定的设备。

30 0x001E 系统无法从指定的设备上读取。

31 0x001F 连到系统上的设备没有发挥作用。

32 0x0020 另一个程序正在使用此文件,进程无法访问。

33 0x0021 另一个程序已锁定文件的一部分,进程无法访问。

34 0x0022 驱动器中的软盘不对。

将%2 插入(卷序列号: %3)驱动器%1。

36 0x0024 用来共享的打开文件过多。

38 0x0026 已到文件结尾。

39 0x0027 磁盘已满。

50 0x0032 不支持请求。

Windows系统的常见错误代码及解决方法

Windows系统的常见错误代码及解决方法

Windows系统的常见错误代码及解决方法Windows操作系统作为广泛使用的操作系统之一,在日常使用中可能会遇到各种各样的错误代码。

这些错误代码可能会给用户带来一定的困扰,但是通过正确的解决方法,往往可以迅速解决这些问题。

本文将介绍一些常见的Windows系统错误代码以及相应的解决方法。

错误代码1:0x80070002错误描述:一般是由于文件或文件夹丢失、被删除或者损坏引起的。

此错误代码常出现在系统备份、系统还原或者升级过程中。

解决方法:可以尝试以下步骤来解决此问题:1.检查并修复文件系统错误:运行命令提示符并输入"chkdsk /f",然后重启计算机。

2.检查并还原系统文件:运行命令提示符并输入"sfc /scannow",系统会自动扫描并修复文件系统中的错误。

3.重建系统备份:删除现有备份并重新创建新的备份。

错误代码2:0x80070005错误描述:该错误代码通常发生在无法访问文件、文件夹或注册表项时。

一般是由于权限设置不正确导致的。

解决方法:可以尝试以下方法来解决此问题:1.以管理员身份运行相关程序:右键点击程序图标,选择“以管理员身份运行”,然后再次尝试操作。

2.检查权限设置:右键点击文件、文件夹或注册表项,选择“属性”,然后在“安全”标签下检查并修改权限设置。

3.重新安装相关程序:如果问题仍然存在,尝试卸载并重新安装相关程序。

错误代码3:0x80004005错误描述:该错误代码通常与文件或软件的访问问题相关,也可能与硬件设备不兼容有关。

解决方法:可以尝试以下方法来解决此问题:1.检查文件访问权限:确保您有权访问相关文件或文件夹。

右键点击文件或文件夹,选择“属性”,然后在“安全”标签下检查和修改权限设置。

2.更新或重新安装驱动程序:如果出现硬件相关错误,尝试更新或重新安装相关驱动程序。

3.运行系统文件检查:运行命令提示符并输入"sfc /scannow"来扫描和修复系统文件中的错误。

NTFS文件系统常用属性表

NTFS文件系统常用属性表

NTFS元文件
文件记录可能的属性
MFT文件记录头部结构布局
标准属性的属性头结构
标准属性的属性体结构
文件名属性的属性头结构
文件名属性体结构布局
文件名命名空间
数据流属性的属性头结构
未命名常驻属性标准属性头结构
未命名非常驻属性标准属性头结构
命名常驻属性标准属性头结构
命名非常驻属性标准属性头结构
索引根的结构如表4-81所示。

索引根结构
索引头的结构如表4-82所示。

索引头结构
其标志字节的含义如表4-83所示。

索引头标志字节含义
索引项的结构
标准索引头结构
索引项结构。

电脑常见错误代码

电脑常见错误代码
0x05a2 窗口不是子窗口
0x05aa 系统资源不足,无法完成所要求的服务
0x05ab 系统子还不足,无法完成所需要的服务
0x05ac 系统资源不足,无法完成所要求的服务
0x06b9 资源不足,无法完成操作
诺顿2009网络安全特警升级后提示重启,重启后ADSL拨号上网提示720错误
0x0480 指定的程序已经启动,无法再启动一次
0x0481 指定的程序是为旧版的Windows所x0483 没有应用程序与此项*作的指定文件建立关联
0x0484 传送指令到应用程序发生错误
0x04b0 指定的装置名称无效
重新安装XP操作系统并安装最新显示卡驱动后无效。分析是主板BIOS问题。原bios为1.10,升级成1.13版后,故障排除。
关于DELL 360主机无法分区的技术通报
故障现象:客户要求分区,安装XP,无法分区,安装XP后仍然恢复VISTA。
技术分析:DELL商用机现在新的硬盘采用DELL独特的分区方式,DM和PQ均无效,必须采用DELL驱动安装光盘里面DEBUG工具删除分区
故障描述 QQ农场登陆后一直显现登陆超时
技术分析 系统日期和时间错误
解决方案 把系统日期和时间调整到正确的时间段
运行LIVEUPATE更新后提示重启,重启后再拨号提示720错误,升级杀毒软件后TCP/IP协议与诺顿安装服务有冲突。解决方案:进入设备管理器删除网卡驱动并重新启动让其自动安装网卡驱动即可。
关于P43芯片主板搭配9系列显卡开机慢的技术提报
P43芯片主板+9系统显卡,Windows XP SP2或 SP3。进系统滚动条滚动圈数在10圈以上。
电脑常见错误代码 2011-03-10 20:41:09| 分类: 默认分类 | 标签:常见错误 电脑错误代码 代码 |举报 |字号大

读出nand flash中的内核镜像文件

读出nand flash中的内核镜像文件

概述:现在有一个Arm开发板,bootloader、内核、文件系统都在nand flash上,要把这三个部分读出来。

环境:PC上系统为linux系统,任一发行版的OS都可PC上已经安装了arm的交叉编译工具,要用到arm-linux-gccPC与开发板通过串口线、网线连接起来;串口作为开发板的控制台,网线在两者之间传输文件一、文件系统:文件系统的读取方法比较简单。

将板子启动起来,在板子上使用NFS挂载PC上的一个目录。

然后把板子根目录下的所有文件和目录都复制到挂载目录中,即可完成文件系统的读取。

二、内核:内核和bootloader是直接烧写在nand flash上的,他们两个不依赖于文件系统,所以是看不到内核和bootloader这两个文件。

这两个的读取原理一致,所以在此只讲内核(即kernel)的读取方法。

Step 1:启动开发板,观察控制台输出,获取板子在启动过程中的输出信息,主要查看内核对nand flash分区的信息,我信息如下:0x00000000-0x00040000 : "Bootloader"0x00040000-0x00400000 : "Kernel"0x00400000-0x05400000 : "Rootfs"0x05400000-0x10000000 : "File System"从上面信息得知,内核(kernel)在nand flash的第1分区(从0分区开始计)上,且这一分区在nand flash上的地址范围是0x40000 – 0x400000Step 2:启动好后,在控制台上输入ls –l /dev/mt*[root@urbetter /]# ls -l /dev/mt*crw-rw---- 1 root root 90, 0 Mar 13 2000 /dev/mtd0crw-rw---- 1 root root 90, 1 Mar 13 2000 /dev/mtd0rocrw-rw---- 1 root root 90, 2 Mar 13 2000 /dev/mtd1crw-rw---- 1 root root 90, 3 Mar 13 2000 /dev/mtd1rocrw-rw---- 1 root root 90, 4 Mar 13 2000 /dev/mtd2crw-rw---- 1 root root 90, 5 Mar 13 2000 /dev/mtd2rocrw-rw---- 1 root root 90, 6 Mar 13 2000 /dev/mtd3crw-rw---- 1 root root 90, 7 Mar 13 2000 /dev/mtd3robrw-rw---- 1 root root 31, 0 Mar 13 2000 /dev/mtdblock0brw-rw---- 1 root root 31, 1 Mar 13 2000 /dev/mtdblock1brw-rw---- 1 root root 31, 2 Mar 13 2000 /dev/mtdblock2brw-rw---- 1 root root 31, 3 Mar 13 2000 /dev/mtdblock3从上面信息看到kernel所在的磁盘分区在linux系统下对应的设备文件是/dev/mtdblock1Step 3:写一个读取磁盘的程序,将kernel从nand flash的对应分区中读出来,我写的代码如下:文件名read_kernel.c#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <fcntl.h>#define DEV "/dev/mtdblock1"int main(){int fdr = open(DEV, O_RDONL Y);if(fdr == -1){perror("open dev");return -1;}int fdw = open("image", O_WRONL Y | O_CREAT);if(fdw == -1){perror("open file");return -2;}char buf[0x3c0000] = {};int cnt = read(fdr, buf, 0x3c0000);if(cnt < 0){perror("read");return -3;}if(write(fdw, buf, cnt) < 0){perror("write");return -4;}close(fdr);close(fdw);return 0;}Setp 4:编译arm-linux-gcc read_kernel.c –o read_kernelstep 5:将read_kernel复制到开发板上cp read_kernel NFS目录/ 将程序拷到PC上可NFS挂载的目录mount –t nfs –o nolock PCIP:/NFS目录/mnt 将PC上的NFS目录挂载到/mnt目录step 6:在开发板上运行read_kernel,生成imagecd /mnt./read_kernel会在mnt目录下生成image文件,这个文件就是我们要的内核镜像文件Setp 7:测试image是否可用在PC上把image复制到tftp目录下,并把image名字改成正确的名字,比如我的板子的bootloader的bootcmd指定的kernel文件名为uImage启动开发板并进入u-boot,将bootcmd改为用tftp下载内核,系统能正常启动,测试成功。

电脑系统错误代码的含义与解决方法

电脑系统错误代码的含义与解决方法

电脑系统错误代码的含义与解决方法作为一个与时俱进的IT科技作家,我一直致力于分享各种热门科技领域的文章。

今天,我要和大家一起探讨的是电脑系统错误代码的含义与解决方法。

作为使用电脑的人士,我们经常会遇到各种各样的错误代码,但是对于这些代码的含义以及如何解决却很少有人真正了解。

现在,就让我一一为大家揭开迷雾,解锁电脑错误代码的奥秘。

01. 蓝屏错误代码(0x0000000A):这是一种常见的电脑错误代码,通常意味着电脑在运行时发生了内存访问错误。

解决方法包括更新驱动程序、检查硬件问题以及修复系统文件等。

02. 键盘错误代码(301):当你的键盘出现故障时,电脑会显示这个错误代码。

你可以尝试重新插拔键盘连接、更换键盘驱动程序或者购买一个新键盘来解决这个问题。

03. 硬盘错误代码(SMART Status: Fail, Code: 303):这个错误代码表明你的硬盘存在严重故障。

此时,你应该备份重要数据并考虑更换硬盘。

04. 操作系统错误代码(Error 404):这个代码是指在网页浏览过程中,服务器无法找到所请求的网页。

你可以尝试刷新页面、检查网址拼写或者清除浏览器缓存来解决这个问题。

05. 驱动程序错误代码(Code 39):这个错误代码通常意味着计算机无法加载所需的硬件驱动程序。

你可以通过重新安装驱动程序、更新操作系统或者解决其它硬件冲突来解决这个问题。

06. 网络错误代码(Error 0x80070035):这个错误代码表示你的计算机在尝试连接共享文件夹时遇到了问题。

你可以通过检查网络连接、防火墙设置或者重新配置网络驱动程序来解决这个问题。

07. 电源错误代码(Error 0x80004005):这个错误代码表明你的计算机在进行系统更新过程中发生了电源问题。

你可以尝试检查电源连接、更换电源线、更新BIOS或者重新配置电源管理设置来解决这个问题。

总而言之,当你的电脑显示了错误代码时,不要惊慌失措。

SQL由于系统错误 5 (0x00000005)拒绝访问Sum文件夹的解决方法

SQL由于系统错误 5 (0x00000005)拒绝访问Sum文件夹的解决方法

SQL由于系统错误 5 (0x00000005):拒绝访问Sum文件夹的解决方法日志报错:sqlservr (3600,R,98) SoftwareUsageMetrics-Api: 打开日志文件C:\Windows\system32\LogFiles\Sum\Api.log 时出现错误 -1032 (0xfffffbf8)。

sqlservr (3600,R,98) SoftwareUsageMetrics-Api: 由于系统错误 5(0x00000005):“拒绝访问。

”,打开文件“C:\Windows\system32\LogFiles\Sum\Api.chk”进行读/写访问的尝试失败。

打开文件操作将失败,并出现错误 -1032 (0xfffffbf8)。

小金子目录实践回答: C:\Windows\system32\LogFiles\Sum\ 添加“NT SERVICE\MSSQLSERVER”的用户,给与读写权限。

注意是全名称搜索,不然找不到MSSQLSERVER用户。

微软官方的答案:您好,“the fix for me for all these errors that affect"C:\Windows\system32\LogFiles\Sum\" was to give permissions to the following users :NT Service\MSSQLSERVER, NT Service\ReportServer, NTService\MSSQLServerOLAPService\, NT Service\SQLServerAgent.Basically, these are all the default accounts used by SQL and listedunder "login" in the Services utility.(by default, System and Administrators group are the only accounts with permissions in the "Su m" directory.”请检查一下这个 sum 文件夹的权限。

文件系统驱动编程基础篇之七——端口读写

文件系统驱动编程基础篇之七——端口读写

文件系统驱动编程基础篇之七——端口读写一、前略本系列文章为业余编程爱好者而写,仅仅作为初学者的一个借鉴,真正的精华存在于参考资料*中。

知识的积累将经历从薄到厚,再从厚到薄的反复过程,为了打下牢固的基础,请读者务必在阅读本文的基础上花费必要的时间完成参考资料。

笔者的实践环境为:硬件:P35 Motherboard & ICH9 chip,Pentium Dual Cpu E2160 1.8g,DDR2 1g软件:Windows XP2、VS 2005、Visual AssistX、DriverStudio 3.2、MICROSOFT.WINDOWS.SERVER.V2003.IFS.DDK、Windbg 6.8.0004.0,请安装好用于调试的虚拟机并配置好调试环境。

参考资料*:1.《Programming the Microsoft Windows driver model》第一版(当前阶段主要阅读资料,在先前的基础上,本次需要完成前八章)2.《Windows NT File System Internals - A Developers Guide》(资料1理解后可阅读,为后续章节做准备)3.《OSR White Papers》4、《Intel 64 and IA-32 Architectures Software Developer s Manual V olume 3A/B System Programming Guide》5.WinXXX部分源代码…6.《Kernel Debugging with WinDbg》(随WinDbg软件附带的文档)阅读基础:了解计算机结构体系、掌握用户模式下常用API调用、了解常用汇编指令。

请从现在开始的一年时间里阅读50万字以上的驱动编程外文资料,彻底突破外文关。

本章目的:初步掌握硬件驱动编程的基础知识,学习使用Windbg调试。

初次阅读代码量在一万行以上的驱动程序。

Windows XP最常见的错误代码及解释教学文案

Windows XP最常见的错误代码及解释教学文案

W i n d o w s X P最常见的错误代码及解释Windows XP最常见的错误代码及解释1.停止错误编号:0x0000000A说明文字:IRQL-NOT-LESS-OR-EQUAL通常的原因:驱动程序使用了不正确的内存地址.解决方法:如果无法登陆,则重新启动计算机.当出现可用的作系统列表时,按F8键.在Windows高级选项菜单屏幕上,选择"最后一次正确的配置",然后按回车键. 检查是否正确安装了所有的新硬件或软件.如果这是一次全新安装,请与硬件或软件的制造商联系, 获得可能需要的任何Windows更新或驱动程序.运行由计算机制造商提供的所有的系统诊断软件,尤其是内存检查.禁用或卸掉新近安装的硬件(RAM,适配器,硬盘,调制解调器等等),驱动程序或软件. 确保硬件设备驱动程序和系统BIOS都是最新的版本.确保制造商可帮助你是否具有最新版本,也可帮助你获得这些硬件.禁用 BIOS内存选项,例如cache或shadow.2.停止错误编号:0x0000001E说明文字:KMODE-EXPTION-NOT-HANDLED通常的原因:内核模式进程试图执行一个非法或未知的处理器指令.解决方法:确保有足够的空间,尤其是在执行一次新安装的时候如果停止错误消息指出了某个特定的驱动程序,那么禁用他.如果无法启动计算机.应试着用安全模式启动,以便删除或禁用该驱动程序.如果有非 Microsoft支持的视频驱动程序,尽量切换到标准的VGA驱动程序或Windows提供的适当驱动程序.禁用所有新近安装的驱动程序.确保有最新版本的系统BIOS.硬件制造商可帮助确定你是否具有最新版本,也可以帮助你获得他.BIOS内存选项,例如cache,shadow.3.停止错误编号:0x00000023或0x00000024说明文字:FAT-FILE-SYSTEM或MTFS-FILE-SYSTEM通常原因:问题出现在Ntfs.sys(允许系统读写NTFS驱动器的驱动程序文件)内.解决方法:运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件..禁用或卸载所有的反病毒软件,磁盘碎片整理程序或备份程序.通过在命令提示符下运行Chkdsk /f命令检查硬盘驱动器是否损坏,然后重新启动计算机4.停止编号:0x0000002E说明文字:DATA-BUS-ERROR通常的原因:系统内存奇偶校验出错,通常由硬件问题导致.解决方法:卸掉所有新近安装的硬件(RAM.适配器.硬盘.调制解调器等等).运行由计算机制造商提供的系统诊断软件,尤其是硬件诊断软件.确保硬件设备驱动程序和系统BIOS都是最新版本.使用硬件供应商提供的系统诊断,运行内存检查来查找故障或不匹配的内存.禁用BIOS内存选项,例如cache或shadow.在启动后出现可用作系统列表时,按F8.在Windows高级选项菜单屏幕上,选择"启动VGA模式:.然后按回车键.如果这样做还不能解决问题,可能需要更换不同的视频适配器列表,有关支持的视频适配器列表,请参阅硬件兼容性列表.5.停止编号:0x0000003F说明文字:NO-MOR-SYSTEM-PTES通常的原因:每哟正确清理驱动程序.解决方法:禁用或卸载所有的反病毒软件,磁盘碎片处理程序或备份程序.6:停止错误编号:0x00000058说明文字:FTDISK-INTERN-ERROR通常的原因:容错集内的某个主驱动器发生故障.解决方法:使用Windows安装盘启动计算机,从镜象(第2)系统驱动器引导.有关如何编辑Boot.ini 文件以指向镜象系统驱动器的指导,可在MIcrosoft支持服务Web站点搜索"EditARC path".7.停止错误编号:0x0000007B说明文字:INACCESSI-BLE-BOOT-DEVICE通常原因:初始化I/O系统(通常是指引导设备或文件系统)失败.解决方法:引导扇区病毒通常会导致这种停止错误.是用反病毒软件的最新版本,检查计算机上是否有存在病毒.如果找到病毒,则必须执行必要的不找把他从计算机上清除掉,请参阅反病毒软件文档了解如何执行这些步骤.卸下所有新近安装的硬件(RAM,适配器,调制解调器等等).核对MIcrosoft硬件兼容性列表以确保所有的硬件和驱动程序都与Windows兼容.如果使用的适SCSI适配器,可以从硬件供应商除获得最新WINDOWS驱动程序,禁用SCSI设备的同步协商,检查该SCSI链是否终结,并核对这些设备的SCSIID,如果无法确定如何执行能够这些步骤,可参考硬件设备的文档.如果你用的是IDE设备,将板上的IDE端口定义为唯一的主端口.核对IDE设备的主/从/唯一设置.卸掉除硬盘之外的所有IDE设备.如果无法确认如何执行这些不找,可参考硬件文档.如果计算机已使用NTFS文件系统格式化,可重新启动计算机,然后在该系统分区上运行Chkdsk/f/r 命令.如果由于错误而无法启动系统,那么使用命令控制台,并运行Chkdsk /r命令.运行Chkdsk /f命令以确定文件系统是否损坏.如果Windows不能运行Chkdsk命令,将驱动器移动到其他运行Windows的计算机上,然后从这台计算机上对该驱动器运行Chkdsk命令.8.停止错误编号:0x0000007F说明文字:UNEXPECTED-KERNEL-MODE-TRAP通常的原因:通常是由于硬件或软件问题导致,但一般都由硬件故障引起的..解决方法:核对Microsoft硬件兼容性列表以确保所有的硬件和驱动程序都与Windows兼容.如果计算机主板不兼容就会产生这个问题.卸掉所由新近安装的硬件.运行由计算机制造商提供的所有系统诊断软件,尤其是内存检查.禁用BIOS内存选项,例如cache或shadow.9.停止错误编号:0x00000050说明文字:PAGE-FAULT-IN-NONPAGED-AREA通常的原因:内存错误(数据不能使用分页文件交换到磁盘中).解决方法:卸掉所有的新近安装的硬件.运行由计算机制造商提供的所有系统诊断软件.尤其是内存检查.检查是否正确安装了所有新硬件或软件,如果这是一次全新安装,请与硬件或软件制造商联系,获得可能需要的任何Windows更新或驱动程序禁用或卸载所有的反病毒程序.禁用BIOS内存选项,例如cache或shadow.10.停止错误编号:0x0000007说明文字:KERNEL-STEL-STACK-INPAGE-ERROR通常的原因:无法从分页文件将内核数据所需的页面读取到内存中。

JAVA卡文件系统详细设计

JAVA卡文件系统详细设计

JAVA卡文件系统详细设计JAVA卡文件系统详细设计结构体变量及常量描述结构体DF文件头的基本结构1DF文件头固定部分结构struct DFHEADu16 fid DF IDmemref efhead Handle of the first EF under current DFmemref child_df Handle of the first DF under current DFmemref buddy_df Handle of the next DF which has the same parentmemref parent_df parent DFu8 flag applet dfu8 length 后续可变文件头长度20 bytes参数说明Flag DF标志Bit7-bit1 RUFBit0 0 –公共DF1 –与APPLET链接的DF2DF文件头中可变部分结构存放顺序为u8 aid_lengthu8 aid[aid_length] DF AIDu8 length_of_extensionu8 extension[length_of_extension] DF 属性EF文件头的基本结构1EF文件头固定部分结构struct EFHEADu16 fid EF IDu8 type EF type and sfiu8 stu EFmemref efhead Handle of the next EF under same parent u8 origin EF current record pointeru8 lenlh EF length high byteu8 lenll EF length low byteu8 length_of_ext 后续可变文件头长度11 bytes参数说明type 的编码格式0 file type 2 bit SFI 5 bit file type00二进制文件01变长记录文件10定长记录文件11循环定长记录文件origin如果是循环记录文件则为最近一条记录对应的物理记录号从1开始编号如果为0表示没有记录存在如果是定长和非定长记录文件则为文件当前的记录数lenlh对定长和循环记录文件为记录数lenll对定长和循环记录文件为记录长度2EF文件头中可变部分结构存放顺序为u8 extension[length_of_extension] EF 属性变量定义u8 d_nextlenu8 d_currecno 记录指针u8 d_filehead[SIZE_FILE_HEADER] DFEF 的文件头memref d_dfpointer 当前DF指针memref d_efpointer 当前EF指针memref d_nextaddr常量定义文件头长度define SIZE_FILE_HEADER sizeof u16 4sizeof memref 2sizeof u8 文件信息DF文件头中固定部分结构define DF_DFHAND 0define DF_EFHAND 4define DF_NEXTDF 8define DF_PARENTDF 12define DF_FID 16define DF_FLAG 18define DF_LENGTH 19define DF_AIDLEN SIZE_FILE_HEADERdefine DF_AID SIZE_FILE_HEADER1DF文件头中可变部分结构define DF_EXTLENGTH 9define DF_AC 0define DF_ATR 1define DF_AMD 3define DF_DIR 5define DF_STU 6define DF_BS 7define DF_TYPE 8EF文件头中固定部分结构define EF_FID 0define EF_TYPE 2define EF_STU 3define EF_EFHAND 4define EF_ORIGIN 8define EF_LENLH 9define EF_LENLL 10define EF_EXTLEN 11EF文件头中可变部分define EF_EXTLENGTH 4define EF_SUBTYPE 0define EF_AC1 1define EF_AC2 2define EF_AC3 3EF文件类型文件类型define EFTYPE_BIN 0x00 Binary file define EFTYPE_LINEAR 0x40 Linear fixed define EFTYPE_CHANGE 0x20 Variable file define EFTYPE_CYCLIC 0x60 Cyclic file文件类型define EF_TYPE_BIN 0x00 Binary file define EF_TYPE_LINEAR 0x01 Linear fixed define EF_TYPE_CHANGE 0x02 Variable file define EF_TYPE_CYCLIC 0x03 Cyclic file 文件子类型EF文件子类型define EF_SUB_BASIC 0x00 基本文件define EF_SUB_OBJ 0x01 数据对象文件define EF_SUB_KEY 0x02 密钥文件define EF_SUB_SK 0x03 私钥文件类型define EF_SUB_PK 0x04 公钥文件类型define EF_SUB_CER 0x05 证书文件类型define EF_SUB_PURSE 0x07 银行标准钱包文件define EF_SUB_DEPOSIT 0x08 银行标准存折文件define EF_SUB_ENCRYPT 0x09 加密公钥文件类型define EF_SUB_DECRYPT 0x0A 解密私钥文件类型define EF_SUB_ECCSK 0x0Bdefine EF_SUB_ECCPK 0x0C密钥信息密钥结构define KEY_ID 0 密钥 IDdefine KEY_VERSION 1 密钥版本号define KEY_ALG 2 密钥算法标识define KEY_TYPE 3 密钥类型define KEY_USE_AC 4 密钥使用条件define KEY_TO_AC 5 密钥后续状态define KEY_CHG_AC 6 密钥修改条件define KEY__COUNT 7 最大错误次数define KEY_CUR_COUNT KEY__COUNT 当前错误次数define KEY_VALUE 8 密钥值define KEY_VALUE1 KEY_VALUE 密钥1的值define KEY_VALUE2 16 密钥2的值define KEY_CHK 24 校验和define KEY_LENGTH 25 Key 记录长度密钥类型电子钱包应用define DPK 0x00 消费 Key 类型define DLK 0x01 圈存 Key 类型define DTK 0x02 TAC Keydefine DULK 0x03 圈提 Key 类型define DUK 0x04 修改透支 Key 类型define DAMK 0x05 应用维护 Key 类型define DPUK 0x06 PIN 解锁 Key 类型define DRPK 0x07 PIN 重装 Key 类型define EXTAUTK 0x08 外部认证 Key 类型define INTAUTK 0x09 内部认证 Key 类型define CRYPTK 0x0A 加密 Key 类型define PIN 0x0B PINdefine DUKK 0x0C 联机解扣Key 类define STEMP 0x0D 临时过程Key 类密钥类型借记贷记应用define ACUDK 0x00 应用密文密钥类型define MACUDK 0x01 安全报文认证 MAC 密钥类型define ENCUDK 0x02 安全报文加密密钥类型define PINUDK 0x03 PIN应用类型define DF_PURSE 0x00 PBOC2电子钱包应用define DF_REFUL 0x01 PBOC2电子钱包扩展应用define DF_PBOC2 0x02 PBOC2借记贷记应用define DF_VISA 0x03 VISA借记贷记应用define DF_PKI 0x04 PKI应用文件系统API接口描述文件创建和删除函数fs_CreateDF功能创建DF并链接到文件系统中函数接口定义u16 fs_CreateDF u16 fid u8 flag u8 aid_length u8 aid u8 ext_length u8 ext输入fid DF文件标识flag DF标志0公共DF1与APPLET关联的DFaid_length 文件名长度aid DF文件名bufferext_length 扩展参数长度ext 扩展参数buffer全局变量d_dfpointer输出状态码SW6A80 –未创建MF不允许创建其他DF MF已创建其他DF的fid不能为3f00已存在相同fid或aid的DFSW6A84 –空间不足SW9000 –执行成功全局变量d_dfpointer流程图fs_CreateEF功能创建EF并链接到文件系统中函数接口定义u16 fs_CreateEF u8 ef_header输入ef_header EF文件头信息buffer19字节全局变量d_dfpointer输出状态码SW6A80 –已存在相同fid或sfi的EFSW6A84 –空间不足SW9000 –执行成功全局变量d_efpointer流程图fs_DeleteFile功能在当前应用下按文件标识删除EF或DF函数接口定义u16 fs_DeleteFile u16 fid u8 type 输入fid EFDF文件标识type 文件类型00DF01EF全局变量d_dfpointer输出状态码SW6A82 –未找到相同文件标识的DF或EFSW9000 –执行成功流程图fs_Initialize功能设置当前DF函数接口定义void fs_Initialize memref ee_addree_addr 当前DF地址输出无流程给d_dfpointer赋值fs_IsMFExist功能判断MF是否创建函数接口定义fs_IsMFExist输入无输出0 MF已创建1 MF未创建流程获取文件信息的函数fs_GetDFid功能获取当前DF的文件标识符信息函数接口定义u16 fs_GetDFid输入无输出当前DF的文件标识符信息流程返回d_dfpointer指向的DF的文件标识符fs_GetDFAttrBytes功能按索引号获取当前DF的专有扩展数据信息函数接口定义u8 fs_GetDFAttrBytes u8 indexindex DF的专有扩展数据的索引号从0开始输出当前DF的专有扩展数据信息流程如果index大于专有数据个数返回0计算当前DF的专有扩展数据在文件头中的位置按索引号返回当前DF的专有扩展数据信息fs_GetFileAttrByte功能按索引号获取当前EF的专有扩展数据信息函数接口定义u8 fs_GetFileAttrByte u8 index 输入index EF的专有扩展数据的索引号从0开始输出当前EF的专有扩展数据信息流程如果index大于专有数据个数返回0计算当前EF的专有扩展数据在文件头中的位置按索引号返回当前EF的专有扩展数据信息fs_GetFileType功能获取当前EF的类型信息函数接口定义u8 fs_GetFileType输入无输出当前EF的类型信息00 二进制文件01 定长记录文件02 变长记录文件03 循环定长记录文件流程返回d_efpointer指向的EF的文件类型fs_GetFileSfi功能获取当前EF的短文件标识符信息函数接口定义u8 fs_GetFileSfi输入无输出当前EF的短文件标识符信息取值范围131 流程返回d_efpointer指向的EF的短文件标识符fs_GetFileId功能获取当前EF的文件标识符信息函数接口定义u16 fs_GetFileId输入无输出当前EF的文件标识符信息流程返回d_efpointer指向的EF的文件标识符fs_GetFileSize功能获取当前EF的文件大小信息函数接口定义u16 fs_GetFileSize输入无输出当前EF占用EE空间大小只包括文件体流程根据文件类型计算当前EF占用EE的大小设置文件信息的函数fs_SetDFAttrByte功能按索引号设置当前DF的专有扩展数据函数接口定义void fs_SetDFAttrByte u8 index u8 value 输入index DF的专有扩展数据的索引号从1开始value 专有扩展数据的值输出无流程如果index大于专有数据个数或为0返回0计算当前DF的专有扩展数据在文件头中的位置修改当前DF的专有扩展数据fs_SetFileAttrByte功能按偏移量设置当前EF的专有扩展数据函数接口定义void fs_SetFileAttrByte u8 index u8 value 输入index EF的专有扩展数据的索引号从1开始value 专有扩展数据的值输出无流程如果index大于专有数据个数或为0返回0计算当前EF的专有扩展数据在文件头中的位置修改当前EF的专有扩展数据fs_SetFileHeader功能函数接口定义void fs_SetFileHeader u8 type文件查询函数fs_SelectDFByFID功能在当前应用下根据DF的文件标识查找DF函数接口定义u8 fs_SelectDFByFID u16 fid输入fid DF的文件标识全局变量d_dfpointer输出0 找到与文件标识匹配的DF1 未找到与文件标识匹配的DF全局变量d_dfpointer流程fs_SelectDFByAID功能在当前应用下根据DF的AID查找DF函数接口定义u8 fs_SelectDFByAID u8 aid_length u8 aid 输入aid_length DF的文件名长度aid DF的文件名buffer全局变量d_dfpointer输出0 找到与AID匹配的DF1 未找到与AID匹配的DF全局变量d_dfpointer流程fs_SelectEFByFID功能在当前应用下根据EF的文件标识查找EF 函数接口定义u8 fs_SelectEFByFID u16 fid 输入fid EF的文件标识全局变量d_dfpointer输出0 找到与文件标识匹配的EF1 未找到与文件标识匹配的EF全局变量d_efpointer流程fs_SelectEFBySFI功能在当前应用下根据EF的短文件标识查找EF 函数接口定义u8 fs_SelectEFBySFI u8 sfi 输入sfi EF的短文件标识全局变量d_dfpointer输出0 找到与短文件标识匹配的EF1 未找到与短文件标识匹配的EF全局变量d_efpointer流程fs_SelectEFByAttrByte功能在当前应用下根据EF的某一专有扩展数据查找EF函数接口定义u8 fs_SelectEFByAttrByte u8 index u8 value 输入index EF的专有扩展数据的索引号从1开始value 专有扩展数据的值全局变量d_dfpointer输出0 找到与专有扩展数据匹配的EF1 未找到与专有扩展数据匹配的EF全局变量d_efpointer流程EF文件读写函数fs_GetRemainingLength功能获得当前二进制文件从offset处开始剩余的字节长度函数接口定义u16 fs_GetRemainingLength u16 offset输入offset 偏移量全局变量d_efpointer输出二进制文件从offset处开始剩余的字节长度流程如果当前文件不是二进制文件返回0计算二进制文件从offset处开始剩余的字节长度fs_UpdateData功能从偏移量offset处开始更新二进制文件数据函数接口定义u16 fs_UpdateData u16 offset u8 new_data u8 new_data_length输入offset 更新的偏移量new_data 更新的数据new_data_length 更新数据的长度全局变量d_efpointer输出状态码SW6981 –文件类型不匹配SW6700 –更新长度超过文件大小SW9000 –执行成功流程如果当前文件不是二进制文件返回SW6981判断更新长度是否超过文件大小超过返回SW6700二进制文件从offset处开始更新new_data_length长度的数据返回SW9000 fs_ReadData功能从偏移量offset处开始读取二进制文件数据函数接口定义u16 fs_ReadData u16 offset u8 data_buf u8 data_length 输入offset 更新的偏移量data_buf 读取的数据存储bufferdata_length 读取数据的长度全局变量d_efpointer输出状态码SW6981 –文件类型不匹配SW6700 –读取长度超过文件大小SW9000 –执行成功data_buf 读取的数据存储buffer流程如果当前文件不是二进制文件返回SW6981判断读取长度是否超过文件大小超过返回SW6700二进制文件从offset处开始读取data_length长度的数据到data_buf里返回SW9000fs_GetRecordNumber功能获取当前记录文件的记录数函数接口定义u8 fs_GetRecordNumber输入全局变量d_efpointer输出当前记录文件的记录数流程如果当前文件是二进制文件返回0如果当前文件是定长记录文件返回定长记录文件记录数d_filecomh如果当前文件是变长记录文件返回当前记录数总数d_filecomin如果当前文件是循环定长记录文件如果记录未满则返回当前已添加记录数d_filecomin如果记录已满则返回循环定长记录文件记录数d_filecomh fs_GetRecordLength功能获取当前记录文件的记录长度函数接口定义u8 fs_GetRecordLength输入全局变量d_efpointer输出当前记录文件的记录长度流程如果当前文件是二进制文件或变长记录文件返回0如果当前文件是定长记录文件或循环定长记录文件返回记录长度d_filecomlfs_UpdateRecord功能按模式更新当前记录文件的记录数据函数接口定义u16 fs_UpdateRecord u8 rank u8 mode u8 new_record u8data_length输入rank 记录号或记录标识mode 更新模式mode 0 修改与记录标识匹配的第一个实例mode 1 修改与记录标识匹配的最后一个实例mode 2 修改与记录标识匹配的下一个实例mode 3 修改与记录标识匹配的上一个实例mode 4 修改与记录号匹配的记录new_record 更新的数据bufferdata_length 更新数据的长度全局变量d_efpointer输出状态码SW6981 –文件类型不匹配SW6A83 –未找到匹配的记录SW6700 –更新长度超过记录长度SW9000 –执行成功全局变量 d_currecno流程如果当前文件是二进制文件返回SW6981按模式查找匹配的记录未找到返回SW6A83如果data_length大于记录的长度则返回SW6700更新当前记录的数据更新d_currecno为当前记录号返回SW9000fs_ReadRecord功能按模式读取当前记录文件的记录数据并返回记录长度函数接口定义u16 fs_ReadRecord u8 rank u8 mode u8 data_buf u16 data_length输入rank 记录号或记录标识mode 读取模式mode 0 读与记录标识匹配的第一个实例rank 为记录标识mode 1 读与记录标识匹配的最后一个实例mode 2 读与记录标识匹配的下一个实例mode 3 读与记录标识匹配的上一个实例mode 4 读与记录号匹配的记录mode 5 从指定记录号的记录开始读到最后一个记录mode 6 从最后一个记录开始读到指定记录号的记录全局变量d_efpointer输出状态码SW6981 –文件类型不匹配SW6A83 –未找到匹配的记录SW9000 –执行成功data_buf 读取所有的记录数据bufferdata_length 读取所有的记录长度全局变量 d_currecno流程如果当前文件是二进制文件返回SW6981按模式查找匹配的记录未找到返回SW6A83按模式读取记录数据更新d_currecno为当前记录号返回SW9000fs_AppendRecord功能循环记录文件和变长记录文件的添加记录操作函数接口定义u16 fs_AppendRecord u8 data_length u8 record_data 输入data_length 记录长度record_data 记录数据buffer全局变量d_efpointer输出状态码SW6981 –文件类型不匹配SW6A84 –超过文件大小SW9000 –执行成功全局变量 d_currecno流程如果当前文件是二进制文件或定长记录文件返回SW6981计算添加的记录在文件中的偏移量如果超出文件大小返回SW6A84添加记录更新d_currecno为当前记录号返回SW9000文件系统APDU接口描述主要针对金融卡应用设计的Create File描述用于创建一个EFDF文件定义和设计DF分类根据安全机制不同分为三类1基于状态机的安全机制的DF如电子钱包应用PKI应用2基于安全域和文件控制参数的安全机制的DF如借记贷记应用3无安全机制的公共DF只支持7816-4中定义的基本命令故不同类型的DF其文件信息就有所不同具体com传输密钥8个字节的传输密钥是由工厂在卡片制造时设定的如用户无特殊要求则为FF FF FF FF FF FF FF FFEF文件类型文件类型类型字节文件类型类型字节二进制文件00公钥文件定长记录文件01证书文件28变长记录文件02银行标准钱包文件38循环定长记录文件03银行标准存折文件40TLV文件04加密公钥文件48数据对象文件0A解密私钥文件50密钥文件ECCSK58私钥文件18ECCPK60b8b7 b6 b5 b4 b3 b2 b1意义保留给将来使用x x x x 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 11 0 0 01 0 0 11 0 1 01 0 1 11 1 0 0EF分类- 工作基本文件- 数据对象文件- 密钥文件- 私钥文件- 公钥文件- 证书文件- 签名文件- 银行标准钱包文件- 银行标准存折文件- 加密公钥文件- 解密私钥文件- ECCSK- ECCPKx x x0 0 00 0 10 1 00 1 11 0 0EF结构- 二进制- 定长记录- 变长记录- 循环记录- RUFDF文件头中可变部分结构字节属性信息1MF中建立文件和擦除MF权限2-3ATR 文件标识4-5AMD 文件标识6DIR 短文件标识7DF状态8错误计数器9应用类型DF状态mfstumfstu 的 b7 为1表示 MF 被永久锁定mfstu 的 b6-b5 表示创建状态 create statusmfstu 的 b4 为1表示 MF 被临时锁定mfstu 的 b3-b2 RUFmfstu 的 b1 为1表示是 PSAM 卡为0表示是用户卡mfstu 的 b0 始终为1DDFdfstudfstu 的 b7 为1表示应用被永久锁定dfstu 的 b6-b5 表示创建状态 create statusdfstu 的 b4 为1表示应用被临时锁定dfstu 的 b3-b2 是应用解锁错误次数dfstu 的 b0 为1表示是 DDF为0表示是 ADF错误计数器b7b6 - APPLICATION UNBLOCK应用解锁命令b5b4 - PIN CHANGEUNBLOCK个人密码更改解锁命令b3b2 - SECURE UPDATE BINARY安全写二进制文件命令b1b0 - RELOAD PIN重装个人密码命令支持的应用类型有斜体表示暂不支持应用类型编码应用类型00PBOC电子钱包应用01PBOC电子钱包扩展应用02PBOC借记贷记应用03VISA借记贷记应用04PKI应用F0公用DFEF文件头中可变部分字节属性信息1文件子类型2权限13权限24权限3文件子类型文件子类型编码存储方式对应文件类型编码基本文件00数据对象文件01变长记录02密钥文件02定长记录0103二进制00公钥文件04二进制00证书文件05二进制00银行标准钱包文件07二进制00银行标准存折文件08二进制00加密公钥文件0900解密私钥文件0A二进制00ECCSK文件0B二进制00ECCPK文件0C二进制00APDU命令格式描述代码值CLA80INSE0P100 建立MF 01 建立ADF02 建立EF 03建立DDFP2P1 0103时P2 0001否则P2 00Lc文件信息长度DATA文件信息Le不存在公共DF建立MFMF文件名由用户自定义Lc的值介于0x18至0x23范围之间字节文件信息1-6FFFF FFFF FFFF系统保留7-8ATR文件FID9FF10DIR文件短文件标识0表示没有DIR文件11FF系统保留12-19传输密钥20-35MF文件名5至16字节短文件标识符指明MF下的应用列表DIR文件该文件是一个变长的记录文件有效表示为该字节的高三位为000低5位为短文件的标识符建立DFP2 00时表示ADF或DDF为公共DF文件名由用户自定义Lc的值介于0x12至0x1D范围之间字节文件信息1-6FFFF FFFF FFFF系统保留7-8文件标识符9FF10DIR文件短文件标识0表示没有DIR文件11-13FFFFFF系统保留14-29DF文件名5至16字节基于状态机的安全机制DF的文件信息格式P2 01时表示与APPLET关联的ADF或DDF文件名与APPLET AID相同Lc的值为0x0D字节文件信息1FF系统保留2DF中建立文件权限3-6FFFF FFFF系统保留7-8文件标识符9应用类型10DIR文件短文件标识0表示没有DIR文件11-13FFFFFF系统保留短文件标识符指明DDF下的应用列表文件该文件是一个变长的记录文件有效表示为该字节的高三位为000低5位为短文件的标识符注意对ADF而言00表示此ADF为金融应用08表示此ADF为石化应用基于安全域和文件控制参数的安全机制DF的文件信息格式建立DFP2 01时表示与APPLET关联的ADF或DDF文件名与APPLET AID相同Lc的值为0x0D字节文件信息1-2访问条件00003-4FFFF 系统保留5-6AMD文件FID7-8DF 文件标识9应用类型10-13FFFFFFFF系统保留访问条件现阶段系统保留AMD文件的FID为FFFF时表示不创建AMD文件 EF的文件信息格式建立EFLc的值为0x09或0x0a字节文件信息1短文件标识符2-3文件标识符4文件属性5文件类型6权限1读权限7权限2写权限8长度19长度110权限3使用权限基于状态机的安全机制文件属性字节只对文件子类型为00的文件有效B2-B0位与文件类型低三位保持一致如果文件是变长记录文件文件属性字节低三位为010B6-B3位为二进制文件和记录文件的读写保护标志位B6表示有读线路保护B5表示有读线路加密保护B4表示有写线路保护B3表示有写线路加密保护各项可自由组合例如二进制文件基本类型为00 读写方式均为明文它表示为B7B6B5B4B3B2B1B0如果要求此二进制文件的读与写操作均需要进行线路保护读写为明文MAC 则文件类型变为50B7B6B5B4B3B2B1B011如果要求此二进制文件的读与写操作均需要进行线路加密保护读写为密文MAC则文件类型变为28B7B6B5B4B3B2B1B011基于安全域和文件控制参数的安全机制文件属性字只对文件子类型为00的文件有效b8b7b6b5b4b3b2b1意义x数据加密时是否允许更新x校验通过后是否允许更新X安全通信时是否允许更新x是否允许更新x校验通过后是否允许读取x安全通信时是否允许读取x是否允许读取说明只对使用READUPDATA RECORD GETPUT DATA命令读写的文件有效对基本工作文件权限1指明读权限权限2指明更新权限当建立二进制文件变长记录文件时长度1和长度2两字表示文件长度建立定长记录文件循环定长记录文件时长度1表记录数长度2表记录长度对于密钥文件权限1指明增加新密钥的权限权限2系统保留长度1表密钥个数长度2系统保留对于钱包文件存折文件的权限12和长度1长度2系统保留对于数据对象文件公钥和私钥文件长度1长度2系统保留Create End描述Create End命令用于标志DF预个人化结束且安全机制开始起作用APDU命令格式描述代码值CLA80INSEAP100P2002Data文件标识Le无流程Delete File描述Delete file命令用于删除当前DF下的一个EFDF APDU命令格式描述代码值CLA80INSE4P100 –DF01 –EFP2002Data文件标识Le无流程Format描述Format命令释放全部应用文件所占据的EEPROM APDU命令格式描述代码值CLA80INS0eP100P20002DATA3f 00Le不存在流程Read Binary按应用类型实现功能Read Record按应用类型实现功能Update Binary按应用类型实现功能Update Record按应用类型实现功能Append Record按应用类型实现功能Select按应用类型实现功能INSTALL安装参数域说明基于状态机的安全机制的DF安装参数域格式值长度含义需要C91M01or1A1长度M00or80100 严格遵守金融规范80 扩展金融应用MFIRSTKEY25主控密钥O主控密钥参数不存在时应用使用缺省主控密钥FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF其他DF安装参数域格式值长度含义需要1TAGM001长度M文件系统JAVA API接口package tianyuimport javacomeablepublic interface FileService extends Shareablevoid createEF byte[] buffershort buf_offsetvoid createDF short fid byte flag byte aidlen byte[] aid short aid_offset byte extlen byte[] ext short ext_offsetvoid deleteFile short fid byte typevoid initialize int dfhandshort getDFIDbyte getDFAttrByte byte indexvoid setDFAttrByte byte indexbyte valuebyte getFileAttrByte byte indexvoid setFileAttrByte byte indexbyte valeuvoid setFileHeader byte typebyte getFileTypebyte getFileSFIshort getFileFIDshort getFileSizevoid selectFileByFID short fidvoid selectDFByAID byte aid_lengthbyte[] aid_buffershort offset void selectFileBySFI byte sfivoid selectEFByAttrByte byte index byte valueshort getRemainingLength short offsetshort updateData short file_offsetbyte[] buffershort buf_offsetshort lengthshort readData short file_offsetbyte[] buffershort offsetshort lengthbyte getRecordNumberbyte getRecordLengthshort updateRecord byte rankbyte mode byte[] buffershort offsetshort lengthshort readRecord byte rankbyte modebyte[] buffershort buffer_offset short[] length short length _offsetshort appendRecord short length byte[] buffershort offset文件系统JAVA APDU接口package tianyuimport javacompublic interface FileApduServiceAPDU级接口void format APDU apdubyte secure_statevoid createFile APDU apdubyte secure_statevoid deleteFile APDU apdubyte secure_statevoid readBinary APDU apdubyte secure_statevoid updateBinary APDU apdubyte secure_statevoid appendRecord APDU apdubyte secure_statevoid readRecord APDU apdubyte secure_statevoid updateRecord APDU apdubyte secure_state源码文件文件系统的实现由下面4个文件组成文件内包含的内容如下描述FILEAPI文件包含文件系统API接口函数的源码FILEAPDU文件包含文件系统APDU接口函数的源码FILEFUNC文件包含实现接口函数的子函数的源码FILEDATA文件包含文件系统需要的结构体变量和常量的定义。

Windows系统常见错误代码,例如c0000005

Windows系统常见错误代码,例如c0000005

Windows系统常见错误代码,例如c0000005 0000 操作已成功完成。

0001 错误的函数。

0002 系统找不到指定的⽂件。

0003 系统找不到指定的路径。

0004 系统⽆法打开⽂件。

0005 拒绝访问。

0006 句柄⽆效。

0007 存储区控制块已损坏。

0008 可⽤的存储区不⾜,⽆法执⾏该命令。

0009 存储区控制块地址⽆效。

0010 环境错误。

0011 试图使⽤不正确的格式加载程序。

0012 访问代码⽆效。

0013 数据⽆效。

0014 可⽤的存储区不⾜,⽆法完成该操作。

0015 系统找不到指定的驱动器。

0016 ⽆法删除该⽬录。

0017 系统⽆法将⽂件移到其他磁盘驱动器上。

0018 没有其他⽂件。

0019 媒体写保护。

0020 系统找不到指定的设备。

0021 设备尚未准备好。

0022 设备⽆法识别该命令。

0023 数据错误(循环冗余检查)。

0024 程序发出命令,但是该命令的长度错误。

0025 驱动器在磁盘上⽆法定位指定的区域或磁道。

0026 ⽆法访问指定的磁盘或软盘。

0027 驱动器找不到所请求的扇区。

0028 打印机缺纸。

0029 系统⽆法写⼊指定的设备。

0030 系统⽆法读取指定的设备。

0031 与系统连接的设备不能正常运转。

0032 其他进程正使⽤该⽂件,因此现在⽆法访问。

0033 另⼀进程已锁定该⽂件的某⼀部分,因此现在⽆法访问。

0034 驱动器中的软盘不正确。

请将 %2 (卷标序列号: %3)插⼊驱动器 %1。

0036 打开共享的⽂件太多。

0038 已到达⽂件结尾。

0039 磁盘已满。

0050 不⽀持此⽹络请求。

0051 远程计算机⽆法使⽤。

0052 ⽹络中存在重名。

0053 找不到⽹络路径。

0054 ⽹络正忙。

0055 指定的⽹络资源或设备已不可⽤。

0056 已经达到⽹络命令的极限。

0057 ⽹络适配器出现错误。

0058 指定的服务器⽆法执⾏所请求的操作。

0059 ⽹络出现意外错误。

FAT32文件系统 C语言源代码

FAT32文件系统 C语言源代码

//这是FAT32文件系统源代码#ifndef __FAT_H__#define __FAT_H__#define CHAR char#define BYTE unsigned char#define WORD unsigned int#define DWORD unsigned long#define FIX_DIRECTORY 0 /* 1 means use fix directory, 0 for any directory */#if FIX_DIRECTORY==0#define RECORD_ADDR_START 0 /* eeprom start address */#define RECORD_ADDR_END 512 /* eeprom end address *///#include<avr/eeprom.h>//#include<avr/pgmspace.h>//#include<stdio.h>#endif//#include "UART.H"#include <stdlib.h>//#include "gui.h"//声明外部器件读写函数//external hardware operating functionextern unsigned char MMC_SD_ReadSingleBlock(unsigned long sector, unsigned char* buffer); extern unsigned char MMC_SD_WriteSingleBlock(unsigned long sector, unsigned char* buffer); extern unsigned long MMC_SD_ReadCapacity(void);#define MSDOSFSROOT 0 // cluster 0 means the root dir#define CLUST_FREE 0 // cluster 0 also means a free cluster#define MSDOSFSFREE CLUST_FREE#define CLUST_FIRST 2 // first legal cluster number#define CLUST_RSRVD 0xfff6 // reserved cluster range#define CLUST_BAD 0xfff7 // a cluster with a defect#define CLUST_EOFS 0xfff8 // start of eof cluster range#define CLUST_EOFE 0xffff // end of eof cluster range#if 0struct partsector{/*char*/unsigned char psPartCode[/*512-64-2*/446]; // pad so struct is 512bunsigned char psPart[64]; // four partition records (64 bytes)unsigned char psBootSectSig0; // two signature bytes (2 bytes)unsigned char psBootSectSig1;#define BOOTSIG0 0x55#define BOOTSIG1 0xaa};struct extboot {CHAR exDriveNumber; // drive number (0x80)//0x00 for floopy disk 0x80 for hard diskCHAR exReserved1; // reserved should always set 0CHAR exBootSignature; // ext. boot signature (0x29)#define EXBOOTSIG 0x29CHAR exV olumeID[4]; // volume ID numberCHAR exV olumeLabel[11]; // volume label "NO NAME"CHAR exFileSysType[8]; // fs type (FAT12 or FAT)};struct bootsector50 {BYTE bsJump[3]; // jump inst E9xxxx or EBxx90CHAR bsOemName[8]; // OEM name and versionCHAR bsBPB[25]; // BIOS parameter blockCHAR bsExt[26]; // Bootsector ExtensionCHAR bsBootCode[448]; // pad so structure is 512bBYTE bsBootSectSig0; // boot sector signature byte 0x55BYTE bsBootSectSig1; // boot sector signature byte 0xAA#define BOOTSIG0 0x55#define BOOTSIG1 0xaa};struct bpb50 {WORD bpbBytesPerSec; // bytes per sector //512 1024 2048 or 4096BYTE bpbSecPerClust; // sectors per cluster // power of 2WORD bpbResSectors; // number of reserved sectors //1 is recommendBYTE bpbFATs; // number of FATs // 2 is recommendWORD bpbRootDirEnts; // number of root directory entriesWORD bpbSectors; // total number of sectorsBYTE bpbMedia; // media descriptor //0xf8 match the fat[0]WORD bpbFATsecs; // number of sectors per FATWORD bpbSecPerTrack; // sectors per trackWORD bpbHeads; // number of headsDWORD bpbHiddenSecs; // # of hidden sectorsDWORD bpbHugeSectors; // # of sectors if bpbSectors == 0};//MDR-DPT(Disk Partition Table)// length 16 bytes//struct partrecord{struct _DPT{bool bActive_Partition; /*=1:激活*/unsigned char cStart_Head; // starting head for partitionunsigned char cStart_Sector; // starting cylinder and sectorunsigned int iStart_Cylinder; //unsigned char ; // partition type (see above)unsigned char cFat_Index; // ending head for this partitionunsigned int iEnd_Sector; // ending cylinder and sectorunsigned long iEnd_Cylinder; // first LBA sector for this partition unsigned long lSector_Len; // size of this partition (bytes or sectors ?) };#endif//#define BOOTSIG0 0x55//#define BOOTSIG1 0xaa//#define BOOTSIG2 0x00//#define BOOTSIG3 0x00//512 bytes for DBR infostruct DBR{unsigned char cJump[3]; // jump inst E9xxxx or EBxx90unsigned char cOem_Name[8]; // OEM name and versionunsigned char cBpb[53]; // BIOS parameter blockunsigned char cExt_Bpb[26]; // Bootsector Extensionunsigned char cBoot_Code[420]; // pad so structure is 512bunsigned char cEnd_Flag[2]; // boot sector signature byte 0x00};#define FATNUM 0xf // mask for numbering active FAT#define FATMIRROR 0x80 // FAT is mirrored (like it always was)#define FSVERS 0 // currently only 0 is understood//BPB(BIOS Parameter Block)//53bytesstruct BPB {//bpb infounsigned int iBytes_Per_Sector; // bytes per sectorunsigned char cSectors_Per_Clust; // sectors per clusterunsigned int iRsv_Sectors; // number of reserved sectorsunsigned char cFats; // number of FATsunsigned int iRoot_Dir_Entries; // number of root directory entries(fat12/16 only;fat32=0)unsigned int iSmall_Sectors; // total number of sectorsunsigned char cMedia; // media descriptorunsigned int iSectors_Per_Fat16; // number of sectors per FATunsigned int iSectors_Per_Track; // sectors per trackunsigned int iHeads; // number of headsunsigned long lHidden_Sectors; // # of hidden sectorsunsigned long lBig_Sectors; // like bpbFATsecs for FAT32//FAT32特有(地址采用插入方式,FAT16后面的信息往后排)unsigned long lSectors_Per_Fat32;unsigned int iExt_Flag;unsigned int iFile_System_Ver; // filesystem versionunsigned long lRoot_Clust; // start cluster for root directoryunsigned int iFile_System_Info; // filesystem info structure sectorunsigned int iBackup_Boot_Sector; // backup boot sector// unsigned char cRsv_Fat32[12]; // There is a 12 byte filler here, but we ignore it//boot sector infounsigned char cDrv_Num; //(0=软;0x80=硬)// unsigned char cRsv_Fat16; //reservedunsigned char cBoot_Sig; //ext boot sig(0x29)unsigned long lVol_Id; //vol idunsigned char cV ol_Lab[11]; //vol labunsigned char cFile_System_Type[8]; //char for file system};#define SLOT_EMPTY 0x00 // slot has never been used#define SLOT_E5 0x05 // the real value is 0xE5#define SLOT_DELETED 0xE5 // file in this slot deleted#define SLOT_DIR 0x2E // a directorymmm#define ATTR_NORMAL 0x00 // normal file#define ATTR_READONL Y 0x01 // file is readonly#define ATTR_HIDDEN 0x02 // file is hidden#define ATTR_SYSTEM 0x04 // file is a system file#define ATTR_VOLUME 0x08 // entry is a volume label#define ATTR_LONG_FILENAME 0x0F // this is a long filename entry#define ATTR_DIRECTORY 0x10 // entry is a directory name#define ATTR_ARCHIVE 0x20 // file is new or modified#define LCASE_BASE 0x08 // filename base in lower case#define LCASE_EXT 0x10 // filename extension in lower case// Structure of a dos directory entry.//FDTstruct direntry{BYTE deName[8]; // filename, blank filledBYTE deExtension[3]; // extension, blank filledBYTE deAttributes; // file attributesBYTE deLowerCase; // NT VFAT lower case flags (set to zero) BYTE deCHundredth; // hundredth of seconds in CTimeBYTE deCTime[2]; // create timeBYTE deCDate[2]; // create dateBYTE deADate[2]; // access dateunsigned int deHighClust; // high bytes of cluster numberBYTE deMTime[2]; // last update timeBYTE deMDate[2]; // last update dateunsigned int deStartCluster; // starting cluster of fileunsigned long deFileSize; // size of file in bytes};// number of directory entries in one sector#define DIRENTRIES_PER_SECTOR 0x10 //when the bpbBytesPerSec=512// Structure of a Win95 long name directory entrystruct winentry {BYTE weCnt; //#define WIN_LAST 0x40#define WIN_CNT 0x3fBYTE wePart1[10];BYTE weAttributes;#define ATTR_WIN95 0x0fBYTE weReserved1;BYTE weChksum;BYTE wePart2[12];WORD weReserved2;BYTE wePart3[4];};#define WIN_ENTRY_CHARS 13 // Number of chars per winentry// Maximum filename length in Win95// Note: Must be < sizeof(dirent.d_name)#define WIN_MAXLEN 255// This is the format of the contents of the deTime field in the direntry// structure.// We don't use bitfields because we don't know how compilers for// arbitrary machines will lay them out.#define DT_2SECONDS_MASK 0x1F // seconds divided by 2#define DT_2SECONDS_SHIFT 0#define DT_MINUTES_MASK 0x7E0 // minutes#define DT_MINUTES_SHIFT 5#define DT_HOURS_MASK 0xF800 // hours#define DT_HOURS_SHIFT 11// This is the format of the contents of the deDate field in the direntry// structure.#define DD_DAY_MASK 0x1F // day of month#define DD_DAY_SHIFT 0#define DD_MONTH_MASK 0x1E0 // month#define DD_MONTH_SHIFT 5#define DD_YEAR_MASK 0xFE00 // year - 1980#define DD_YEAR_SHIFT 9// Stucturesstruct FileInfoStruct{unsigned long StartCluster; //< file starting cluster for last file accessed unsigned long Size; //< file size for last file accessedunsigned char Attr; //< file attr for last file accessed//unsigned short CreateTime; //< file creation time for last file accessed //unsigned short CreateDate; //< file creation date for last file accessed unsigned long Sector; //<file record placeunsigned int Offset; //<file record offset};extern unsigned char Disp_Bmp(void);extern unsigned char Disp_file_name(void);extern unsigned char FAT_Init();//初始化#if 0extern unsigned long FAT_NextCluster(unsigned long cluster);//查找下一簇号extern unsigned int FAT_FindItem(unsigned long cluster, BYTE *name, struct FileInfoStruct *FileInfo);//查找文件extern unsigned long FAT_OpenDir(BYTE * dir);//打开目录#if FIX_DIRECTORYextern unsigned char Search(BYTE *dir,struct direntry *MusicInfo,WORD *Count,BYTE *type);//查找音乐文件#elseextern BYTE SearchInit(void);extern unsigned char Search(struct direntry *MusicInfo,WORD *Count,BYTE *type);//查找音乐文件#endifextern unsigned char FAT_LoadPartCluster(unsigned long cluster,unsigned part,BYTE * buffer);//加载文件#endif#endif以下是FAT.C源代码/*Fat.c*//*磁盘结构:name size(sector) noteMBR/DPT sector 1 (jmp to DBR by DTP)xxx xDBR sector(BPB) 1 逻辑0扇区//FAT开始rsv sector x (get size by PBP)FAT1 x (get size by PBP)FATX... x (get FATS by PBP)DIR(FDT) 32 file root dir(FAT12/16 only)data all*//*init fat file system1:get MBR or DPT & jmp to DBR by DPTMBR:master boot record(主引导记录)+DPT:Disk Partition Table(磁盘分区表;和MBR同一扇区,跟在它后面)+0x55 0xaa......2.get BPB in DBR(DOS BOOT RECORD):逻辑0扇区,可以由DPT得到物理位置.3.get rsv sectors by BPB4.get fats by BPB5.get fat sectors by BPB6.get root dir sector by BPB(fat12/16 only)*//*每族字节数<=32k*//*根目录:1.根FDT中每32字节一个目录项,可以是文件和目录.2.固定占用32扇区;子目录:1.最前面为父/子目录项("."和"..");2.之后为子目录和文件,32字节1单位;*/#include "FAT.h"#include "tft.h"#include "MMC_SD.h"#include "char.h"unsigned long lFirst_Fat_Sector; // The first FAT sectorunsigned long lFat_Sectors; // The amount sector a FAT occupiedunsigned long lFirst_Dir_Sector; // The first Dir sectorunsigned long lFirst_Dir_Clust; //first directory clusterunsigned long lRoot_Dir_Sectors; // The sector number a Root dir occupiedunsigned long lFirst_Data_Sector; // The first sector number of dataunsigned char cSectors_Per_Clust;BYTE FAT32_Enable;BYTE (* FAT_ReadSector)(DWORD,BYTE *);BYTE (* FAT_WriteSector)(DWORD,BYTE *);//函数指针指向sd卡的读写函数//function pointer to the sd card read & write single block//wirte sector are not use in this playerunsigned char (* FAT_ReadSector)(unsigned long sector, unsigned char * buffer)=MMC_SD_ReadSingleBlock;//device readunsigned char (* FAT_WriteSector)(unsigned long sector, unsigned char * buffer)=MMC_SD_WriteSingleBlock;//device writestruct FileInfoStruct FileInfo;//temporarily buffer for file informationunsigned long lDbr_Sector = 0; /*DBR所在扇取*/unsigned long Capacity;struct BPB bpb;//get DBR(BPB)infovoid Get_Dbr_Info(unsigned char *p){unsigned char i,j;bpb.iBytes_Per_Sector = p[1]<<8 | p[0];bpb.cSectors_Per_Clust = p[2];bpb.iRsv_Sectors = p[4]<<8 | p[3];bpb.cFats = p[5];bpb.iRoot_Dir_Entries = p[7]<<8 | p[6];bpb.iSmall_Sectors = p[9]<<8 | p[8];bpb.cMedia = p[10];bpb.iSectors_Per_Fat16 = p[12]<<8 | p[11];bpb.iSectors_Per_Track = p[14]<<8 | p[13];bpb.iHeads = p[16]<<8 | p[15];bpb.lHidden_Sectors = p[20]<<24 | p[19]<<16 | p[18]<<8 | p[17];bpb.lBig_Sectors = p[24]<<24 | p[23]<<16 | p[22]<<8 | p[21];i = 25;//FAT32时插如信息,FAT16直接运行后面程序if(bpb.iSectors_Per_Fat16 == 0){bpb.lSectors_Per_Fat32 = p[28]<<24 | p[27]<<16 | p[26]<<8 | p[25];bpb.iExt_Flag = p[30]<<8 | p[29];bpb.iFile_System_Ver = p[32]<<8 | p[31];bpb.lRoot_Clust = p[36]<<24 | p[35]<<16 | p[34]<<8 | p[33];bpb.iFile_System_Info = p[38]<<8 | p[37];bpb.iBackup_Boot_Sector = p[40]<<8 | p[39];//12bytsi=53;}//boot sector(FAT16 & FAT32)bpb.cDrv_Num = p[i++];i++; //rsvbpb.cBoot_Sig = p[i++];bpb.lVol_Id = p[i+3]<<24 | p[i+2]<<16 | p[i+1]<<8 | p[i];i += 4;for(j=0; j<11; j++)bpb.cVol_Lab[j] = p[i++];for(j=0; j<8; j++)bpb.cFile_System_Type[j] = p[i++];}//Initialize of FAT need initialize SD firstunsigned char FAT_Init(){struct DBR * bs;unsigned char buffer[512];//1.memory sizeCapacity = MMC_SD_ReadCapacity();if(Capacity < 0xff)return 1;//2.read MBR or DBRif(FAT_ReadSector(0, buffer)) /*read MBR(有可能直接为DBR)*/ return 1;if((buffer[510] != 0x55) || (buffer[511] != 0xaa))return 1;//首扇区=DBR?if((buffer[0]!=0xE9) && (buffer[0]!=0xEB) ){//2.1读取MBR中的DPT(分区表)信息,用于跳到DBRlDbr_Sector = buffer[457]<<24 | buffer[456]<<16 | buffer[455]<<8 | buffer[454];if(lDbr_Sector >= Capacity/512){ /*>所有扇区?*/lDbr_Sector = 0;return 1;}else{//2.2read DBRif(FAT_ReadSector(lDbr_Sector, buffer)) //read DBRreturn 1;//read the bpb sectorif((buffer[510] != 0x55) || (buffer[511] != 0xaa))return 1;if((buffer[0]!=0xE9) && (buffer[0]!=0xEB))return 1;}}//DBR infobs = (struct DBR *)buffer;//3.get bpb infoGet_Dbr_Info(&(bs->cBpb[0])); /*读取DBR(BPB)信息*///4.if(bpb.iSectors_Per_Fat16){ //do not support FAT12FAT32_Enable = 0; //FAT16lFat_Sectors = bpb.iSectors_Per_Fat16; /*FAT占用的扇区数//the sectors number occupied by one fat talbe*/lFirst_Dir_Clust = 2;}else{FAT32_Enable = 1; //FAT32lFat_Sectors = bpb.lSectors_Per_Fat32; /*FAT占用的扇区数//the sectors number occupied by one fat talbe*/lFirst_Dir_Clust = bpb.lRoot_Clust;}//5.lFirst_Fat_Sector = lDbr_Sector + bpb.iRsv_Sectors; /*第一个FAT表扇区= DBR + 保留*///文件分配表≡DBR +保留扇区数lFirst_Dir_Sector = lFirst_Fat_Sector + (bpb.cFats * lFat_Sectors); /*第一个目录扇区= FAT + FAT_SIZE*///根目录≡保留扇区数+FAT的个数×每个FAT的扇区数lRoot_Dir_Sectors = (bpb.iRoot_Dir_Entries * 32) >> 9; /*根目录占用的扇区数= DIR_CNT * 32 / 512;FAT32此项=0*/lFirst_Data_Sector = lFirst_Dir_Sector + lRoot_Dir_Sectors; /*第一个数据扇区= DIR + DIR_SIZE*///数据区≡根目录逻辑扇区号+(32×根目录中目录项数)/ 每扇区字节数return 0;}//读一个簇中的一个扇区//read one sector of one cluster, parameter part indicate which sectorunsigned char FAT_LoadPartCluster(unsigned long cluster,unsigned part,BYTE * buffer){ DWORD sector;sector = lFirst_Data_Sector + (DWORD)(cluster - 2) * (DWORD)bpb.cSectors_Per_Clust;//calculate the actual sector number//逻辑扇区号=数据区起始逻辑扇区号+(簇号-2)×每簇扇区数if(FAT_ReadSector(sector+part, buffer))return 1;elsereturn 0;}//读下一簇簇号//Return the cluster number of next cluster of file//Suitable for system which has limited RAMunsigned long FAT_NextCluster(unsigned long cluster){BYTE buffer[512];DWORD sector;DWORD offset;if(cluster<2)return 0x0ffffff8;//FAT_PTR_SIZE = 2(FAT16); 4(FAT32)//setor offset = (N * FAT_PA T_SIZE) /512if(FAT32_Enable)offset = cluster/128;elseoffset = cluster/ 256;sector = lFirst_Fat_Sector + offset;//calculate the actual sectorif(FAT_ReadSector(sector, buffer))return 0x0ffffff8;//read fat table / return 0xfff8 when error occured//bytes offset = (N * FAT_PTR_SIZE) % 512if(FAT32_Enable){offset=cluster%128; //find the positionsector = ((unsigned long *)buffer)[offset+3]<<24;sector |= ((unsigned long *)buffer)[offset+2]<<16;sector |= ((unsigned long *)buffer)[offset+1]<<8;sector |= ((unsigned long *)buffer)[offset];}else{offset = cluster % 256;//find the positionsector =(buffer)[offset*2+1]<<8;sector |=(buffer)[offset*2];}return (unsigned long)sector; //return the cluste number}#if FIX_DIRECTORY#if 0//在给定目录下查找文件//Find a item in the directory which specify by the parameter "cluster"//Return the start cluster numberunsigned int FAT_FindItem(unsigned long cluster, BYTE *name, struct FileInfoStruct *FileInfo){ BYTE *buffer;DWORD tempclust;DWORD sector;unsigned char cnt;unsigned int offset;unsigned char i;struct direntry *item = 0;if((cluster==0) && (FAT32_Enable == 0)){// root directorybuffer=malloc(512);//apply memoryif(buffer==0)return 1;//if failedfor(cnt=0;cnt<lRoot_Dir_Sectors;cnt++){if(FAT_ReadSector(lFirst_Dir_Sector+cnt,buffer)){free(buffer);return 1;}for(offset=0;offset<512;offset+=32){item=(struct direntry *)(&buffer[offset]);if((item->deName[0] != 0x00) && (item->deName[0] != 0xe5) && (item->deAttributes != 0x0f)){for(i=0;i<11;i++){if(buffer[offset+i]!=name[i])break;}if(i==11){//return the parameter of the itemFileInfo->StartCluster = item->deStartCluster + (((unsigned long)item->deHighClust)<<16);//don't careFileInfo->Size = item->deFileSize;FileInfo->Attr = item->deAttributes;FileInfo->Sector = lFirst_Dir_Sector+cnt;FileInfo->Offset = offset;free(buffer);return 0;}}}}free(buffer);//release}else//other folders{tempclust=cluster;while(1){sector=lFirst_Data_Sector+(DWORD)(tempclust-2)*(DWORD)bpb.cSectors_Per_Clust;//cal culate the actual sector numberbuffer=malloc(512);//apply memoryif(buffer==0)return 1;//if failedfor(cnt=0; cnt<bpb.cSectors_Per_Clust; cnt++){if(FAT_ReadSector(sector+cnt,buffer)){free(buffer);return 1;}for(offset=0;offset<512;offset+=32){item=(struct direntry *)(&buffer[offset]);if((item->deName[0] != 0x00) && (item->deName[0] != 0xe5) && (item->deAttributes != 0x0f)){for(i=0;i<11;i++){if(buffer[offset+i]!=name[i])break;}if(i==11){FileInfo->StartCluster = item->deStartCluster + (((unsigned long)item->deHighClust)<<16);//don't careFileInfo->Size = item->deFileSize;FileInfo->Attr = item->deAttributes;FileInfo->Sector = sector+cnt;FileInfo->Offset = offset;free(buffer);return 0;}}}}free(buffer);//releasetempclust=FAT_NextCluster(tempclust);//next clusterif(tempclust == 0x0fffffff || tempclust == 0x0ffffff8 || (FAT32_Enable == 0 && tempclust == 0xffff))break;}}return 1;}#endif#if 0// find a directory with the given pathunsigned long FAT_OpenDir(BYTE * dir){BYTE name[11];BYTE *p=dir;BYTE deep=0;BYTE i,j;DWORD cluster=0;if(FAT32_Enable)cluster = lFirst_Dir_Clust;if(*p != '\\')return 1;//invalid pathwhile(*p){if(*p == '\\'){deep++;}p++;}p=dir;for(i=0;i<deep-1;i++){p++;for(j=0;j<11;j++)name[j]=0x20;j=0;while(*p != '\\'){if((*p) >= 'a' && (*p) <= 'z')name[j] = (*p++)-0x20;else name[j] = *p++;j++;}if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the directorycluster = FileInfo.StartCluster;}p++;for(j=0;j<11;j++)name[j]=0x20;j=0;while(*p){if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;else name[j]=*p++;j++;}if(j == 0)return cluster;if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the final directory cluster = FileInfo.StartCluster;return cluster;}#endif#endif#if 0//复制记录项信息//copy itemvoid CopyDirentruyItem(struct direntry *Desti,struct direntry *Source){BYTE i;for(i=0;i<8;i++)Desti->deName[i] = Source->deName[i];for(i=0;i<3;i++)Desti->deExtension[i] = Source->deExtension[i];Desti->deAttributes = Source->deAttributes;Desti->deLowerCase = Source->deLowerCase;Desti->deCHundredth = Source->deCHundredth;for(i=0;i<2;i++)Desti->deCTime[i] = Source->deCTime[i];for(i=0;i<2;i++)Desti->deCDate[i] = Source->deCDate[i];for(i=0;i<2;i++)Desti->deADate[i] = Source->deADate[i];Desti->deHighClust = Source->deHighClust;for(i=0;i<2;i++)Desti->deMTime[i] = Source->deMTime[i];for(i=0;i<2;i++)Desti->deMDate[i] = Source->deMDate[i];Desti->deStartCluster = Source->deStartCluster;Desti->deFileSize = Source->deFileSize;}#endif#if FIX_DIRECTORY#if 0//search the file , when *count = 0 it will bring the number whole songs, when *cout != 0 the *MusicInfo will bring the infomation of the fileBYTE Search(BYTE *dir,struct direntry *MusicInfo,WORD *Count,BYTE *type)//当COUNT 为零时,有它带回这个目录下总共有多少首音乐{ //不为零时有MusicInfo带回第Count首歌的详细文件信息BYTE *buffer;//BYTE buff[3];DWORD sector;DWORD cluster;DWORD tempclust;unsigned char cnt;unsigned int offset;unsigned int i=0;struct direntry *item = 0;cluster = FAT_OpenDir(dir);if(cluster == 1)return 1;if(cluster==0 && FAT32_Enable==0)// root directory{buffer=malloc(512);//apply memoryif(buffer==0)return 1;//if failedfor(cnt=0;cnt<lRoot_Dir_Sectors;cnt++){if(FAT_ReadSector(lFirst_Dir_Sector+cnt,buffer)){free(buffer);return 1;}for(offset=0;offset<512;offset+=32){item=(struct direntry *)(&buffer[offset]);//pointer convert//find a valid item and display itif((item->deName[0] != '.') && (item->deName[0] != 0x00) &&(item->deName[0] != 0xe5) && (item->deAttributes != 0x0f)){if((item->deExtension[0] == 'b')&&(item->deExtension[1] == 'm')&&(item->deExtension[2] == 'p')){CopyDirentruyItem(MusicInfo,item);*type=1;i++;if(i==*Count){free(buffer);return 0;}}}}}free(buffer);//release}else//other folders{tempclust=cluster;while(1){sector=lFirst_Data_Sector+(DWORD)(tempclust-2)*(DWORD)bpb.cSectors_Per_Clust;//cal culate the actual sector numberbuffer=malloc(512);//apply memoryif(buffer==0)return 1;//if failedfor(cnt=0;cnt<bpb.cSectors_Per_Clust;cnt++){if(FAT_ReadSector(sector+cnt,buffer)){free(buffer);return 1;}for(offset=0;offset<512;offset+=32){item=(struct direntry *)(&buffer[offset]);if((item->deName[0] != '.') && (item->deName[0] != 0x00) && (item->deName[0] != 0xe5) && (item->deAttributes != 0x0f)){if((item->deExtension[0] == 'b')&&(item->deExtension[1] == 'm')&&(item->deExtension[2] == 'p')){CopyDirentruyItem(MusicInfo,item);*type=1;i++;if(i==*Count){free(buffer);return 0;}}}}}free(buffer);//releasetempclust=FAT_NextCluster(tempclust);//next clusterif(tempclust == 0x0fffffff || tempclust == 0x0ffffff8 || (FAT32_Enable == 0 && tempclust == 0xffff))break;}}if(*Count==0)*Count=i;return 0;}#endif#else#if 0void WriteFolderCluster(WORD addr,DWORD cluster){/*#if FAT_DEBUGprintf_P(PSTR("\r\nWrite EEPROM address:%d with value:%ld"),addr,cluster);#endifeeprom_write_byte(addr,cluster>>24);eeprom_write_byte(addr+1,cluster>>16);eeprom_write_byte(addr+2,cluster>>8);eeprom_write_byte(addr+3,cluster>>0);*/}DWORD GetFolderCluster(WORD addr){/* DWORD temp;temp = eeprom_read_byte(addr);temp <<= 8;temp += eeprom_read_byte(addr+1);temp <<= 8;temp += eeprom_read_byte(addr+2);temp <<= 8;temp += eeprom_read_byte(addr+3);#if FAT_DEBUGprintf_P(PSTR("\r\nRead EEPROM address: %d value is: %ld"),addr,temp);#endifreturn temp;*/}#endifstruct direntry fdt;void Get_Fdt_Info(unsigned char *p){unsigned char i;for(i=0; i<8; i++) fdt.deName[i] = p[i];for(i=0; i<3; i++) fdt.deExtension[i] = p[i+8];fdt.deAttributes = p[11];//2byts check :12, 13for(i=0; i<2; i++) fdt.deCTime[i] = p[i+14];for(i=0; i<2; i++) fdt.deCDate[i] = p[i+16];for(i=0; i<2; i++) fdt.deADate[i] = p[i+18];fdt.deHighClust = p[21]<<8;fdt.deHighClust |= p[20];for(i=0; i<2; i++) fdt.deMTime[i] = p[i+22];for(i=0; i<2; i++) fdt.deMDate[i] = p[i+24];fdt.deStartCluster = p[27]<<8;fdt.deStartCluster |= p[26];fdt.deFileSize = p[31]<<24;fdt.deFileSize |= p[30]<<16;fdt.deFileSize |= p[29]<<8;fdt.deFileSize |= p[28];}void delay(unsigned long p){unsigned long i,j,k=0;for(i=0; i<p; i++){for(j=0; j<100000; j++)k++;}}struct BMP_HEADER{unsigned int iFile_Type; // 0unsigned long lFile_Size; // 2//rsv 2bytes // 6//rsv 2bytes // 8unsigned long lBmp_Data_Offset; //offset=10};struct BMP_INFO{unsigned long lInfo_Size; // 14unsigned long lBmp_Width; // 18unsigned long lBmp_Height; // 22//2bytes //26unsigned int iBit_Count; // 28//2bytes // 30unsigned long lImage_Size; // 32unsigned long lXPels_Per_Meter; // 36unsigned long lYPels_Per_Meter; // 40//4bytes};struct BMP_HEADER bmp_header;struct BMP_INFO bmp_info;void Get_Bmp_Info(unsigned char *p){bmp_header.lBmp_Data_Offset = p[13]<<24;bmp_header.lBmp_Data_Offset |= p[12]<<16;bmp_header.lBmp_Data_Offset |= p[11]<<8;bmp_header.lBmp_Data_Offset |= p[10];bmp_info.lBmp_Width = p[21]<<24;bmp_info.lBmp_Width |= p[20]<<16;bmp_info.lBmp_Width |= p[19]<<8;bmp_info.lBmp_Width |= p[18];bmp_info.lBmp_Height = p[25]<<24;bmp_info.lBmp_Height |= p[24]<<16;bmp_info.lBmp_Height |= p[23]<<8;bmp_info.lBmp_Height |= p[22];bmp_info.iBit_Count = p[28];}//注:// 1.目前只做了24位BMP测试,其他没做.// 2.没做4字节对齐处理unsigned char Disp_Bmp(void){unsigned char i, k;unsigned int j;unsigned char cbuf[512];unsigned char cbmp[512];WORD count= 1;unsigned char type , rgb,first ,color_byte,byte1,byte2,byte3 ;unsigned int y,x;unsigned long p,color,tmp_color; //簇指示值//cluster//uint16 color_16bit = 0; //列地址自动加1时使用for(i=0; i<32; i++){ //32扇区根目录if(FAT_ReadSector(lFirst_Dir_Sector+i, cbuf))return 1;for(j=0; j<512; j+=32){Get_Fdt_Info(&(cbuf[j]));//.bpmif((fdt.deName[0] != '.') && (fdt.deName[0] != 0x00) && (fdt.deName[0] != 0xe5)){//if(fdt.deAttributes )if(((fdt.deExtension[0] == 'B') && (fdt.deExtension[1] == 'M') && (fdt.deExtension[2] == 'P'))\|((fdt.deExtension[0] == 'b') && (fdt.deExtension[1] == 'm') && (fdt.deExtension[2] == 'p'))){//Lcd_Fill(0,0,480,272,0);p = fdt.deStartCluster;x = 0 ;y = 0 ;rgb = 0 ;count = 0 ;first = 0 ;smallen_puts(0,0,fdt.deName);CLR_CS_CPLD();FAT_LoadPartCluster(p, k, cbmp);Get_Bmp_Info(cbmp);//read 1 bmp file//未做4bytes对齐转换,图象宽度须为4的倍数while(1){for(k=0; k<bpb.cSectors_Per_Clust; k++){。

83表示标准分区

83表示标准分区

83表示标准分区的相关标准和规范1. 引言83表示标准分区是一种用于计算机硬盘的分区方式,它采用了一套特定的标准和规范来管理磁盘空间。

本文将详细描述83表示标准分区的相关标准和规范,包括标准的制定、执行和效果等。

2. 标准制定83表示标准分区最早由IBM公司在1983年提出,并被纳入到MS-DOS操作系统中。

后来,其他操作系统如Windows、Linux等也采纳了这一标准。

主要参与制定该标准的组织有IBM、微软以及其他硬件和软件厂商。

制定83表示标准分区的目的是为了统一计算机硬盘分区的格式,使得不同操作系统之间可以互相识别和访问硬盘上的数据。

该标准定义了磁盘空间如何被划分为多个逻辑单元,并规定了每个逻辑单元所占用的扇区数目、起始位置等信息。

3. 标准内容3.1 分区表结构83表示标准分区使用MBR(Master Boot Record)作为存储分区信息的数据结构。

MBR位于硬盘的第一个扇区,占据446字节,其中包括引导代码和分区表。

分区表被划分为四个条目,每个条目占据16字节,用于描述一个逻辑分区的信息。

每个条目包括以下字段: - 活动标志位:指示该分区是否为活动分区,只能有一个活动分区。

- 起始磁头、扇区和柱面号:确定分区在磁盘上的起始位置。

- 分区类型:用于标识该分区使用的文件系统类型。

3.2 分区类型83表示标准分区中定义了一些常见的文件系统类型,用于标识不同类型的逻辑分区。

例如: - 0x00:空分区 - 0x01:FAT12文件系统 - 0x02:XENIX根文件系统- 0x05:扩展分区 - 0x06:FAT16文件系统 - 0x07:NTFS文件系统3.3 扇区大小和容量限制83表示标准分区规定了每个逻辑扇区的大小为512字节。

根据这一规定,整个硬盘的最大容量限制为2TB(2^32个扇区 * 每个扇区512字节)。

4. 标准执行操作系统在对硬盘进行格式化或创建分区时,会按照83表示标准分区的规范来执行。

Win8.1系统出现蓝屏错误0x00000005怎么解决?

Win8.1系统出现蓝屏错误0x00000005怎么解决?

Win8.1系统出现蓝屏错误0x00000005怎么解决?
最近有win8.1系统的用户碰到了这样的情况,在使用电脑的过程,电脑出现了蓝屏的情况,并且提示蓝屏
代码错误0x00000005。

Win8.1系统出现蓝屏错误0x00000005要怎么解决呢?下面我们就来看一下Win8.1系
统出现蓝屏错误0x00000005的具体解决方法。

win8.1出现蓝屏错误0x00000005怎么办,蓝屏代码0x00000005
具体步骤如下:
1、这个问题您可以进入安全模式查看蓝屏问题是否还会出现,同时建议检查磁盘和内存,尤其内存。

2、磁盘问题可以尝试用WINDOWS自带的磁盘扫描工具进行修复。

3、在开始菜单栏中点击“运行”,输入“cmd”,出现DOS状态对话框。

在光标处输入有损坏文件的磁盘盘
符后回车,再输入“CHKDSK”,回车即可看到相关检测信息。

4、如果发现错误,根据其中提示,在光标后键入“CHKDSK /F”命令后回车开始修复。

其中参数“/F”即f ix
修复命令。

此时提示无法锁定的信息。

输入“Y”即选择同意“强制卸下该卷”后回车。

磁盘即继续扫描并进行修
复。

几分钟后(时间长短会因磁盘分区大小和错误文件多少而有差异),出现 “Windows已更正文件系统”的修
复完成信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档