加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(130)

发布时间:2020-12-15 04:59:41 所属栏目:百科 来源:网络整理
导读:vfatMakeRootFCB 函数是用来创建 FAT 文件系统的根目录,实现代码如下: #001 PVFATFCB #002 vfatMakeRootFCB(PDEVICE_EXTENSION pVCB) #003 { #004 PVFATFCB FCB; #005 ULONG FirstCluster,CurrentCluster,Size = 0; #006 NTSTATUS Status = STATUS_SUCCESS

vfatMakeRootFCB函数是用来创建FAT文件系统的根目录,实现代码如下:

#001 PVFATFCB

#002 vfatMakeRootFCB(PDEVICE_EXTENSION pVCB)

#003 {

#004 PVFATFCB FCB;

#005 ULONG FirstCluster,CurrentCluster,Size = 0;

#006 NTSTATUS Status = STATUS_SUCCESS;

设置根目录名称。

#007 UNICODE_STRING NameU = RTL_CONSTANT_STRING(L"//");

#008

根据文件名称创建一块文件控制块。

#009 FCB = vfatNewFCB(pVCB,&NameU);

#010 if (FCB->Flags & FCB_IS_FATX_ENTRY)

#011 {

如果扩展的FAT入口,就进行相应的扩展的FAT属性设置。

#012 memset(FCB->entry.FatX.Filename,' ',42);

设置FAT最大的文件大小。

#013 FCB->entry.FatX.FileSize = pVCB->FatInfo.rootDirectorySectors * pVCB->FatInfo.BytesPerSector;

设置当前控制块为目录属性。

#014 FCB->entry.FatX.Attrib = FILE_ATTRIBUTE_DIRECTORY;

设置为第一簇。

#015 FCB->entry.FatX.FirstCluster = 1;

#016 Size = pVCB->FatInfo.rootDirectorySectors * pVCB->FatInfo.BytesPerSector;

#017 }

#018 else

#019 {

设置FAT的属性。

#020 memset(FCB->entry.Fat.ShortName,11);

#021 FCB->entry.Fat.FileSize = pVCB->FatInfo.rootDirectorySectors * pVCB->FatInfo.BytesPerSector;

#022 FCB->entry.Fat.Attrib = FILE_ATTRIBUTE_DIRECTORY;

设置FAT32支持的目录属性。

#023 if (pVCB->FatInfo.FatType == FAT32)

#024 {

#025 CurrentCluster = FirstCluster = pVCB->FatInfo.RootCluster;

#026 FCB->entry.Fat.FirstCluster = (unsigned short)(FirstCluster & 0xffff);

#027 FCB->entry.Fat.FirstClusterHigh = (unsigned short)(FirstCluster >> 16);

#028

#029 while (CurrentCluster != 0xffffffff && NT_SUCCESS(Status))

#030 {

#031 Size += pVCB->FatInfo.BytesPerCluster;

#032 Status = NextCluster (pVCB,FirstCluster,&CurrentCluster,FALSE);

#033 }

#034 }

#035 else

#036 {

设置FAT16FAT12的属性。

#037 FCB->entry.Fat.FirstCluster = 1;

#038 Size = pVCB->FatInfo.rootDirectorySectors * pVCB->FatInfo.BytesPerSector;

#039 }

#040 }

#041 FCB->ShortHash.Hash = FCB->Hash.Hash;

#042 FCB->RefCount = 2;

#043 FCB->dirIndex = 0;

#044 FCB->RFCB.FileSize.QuadPart = Size;

#045 FCB->RFCB.ValidDataLength.QuadPart = Size;

#046 FCB->RFCB.AllocationSize.QuadPart = Size;

#047 FCB->RFCB.IsFastIoPossible = FastIoIsNotPossible;

#048

为文件控制块创建缓存。

#049 vfatFCBInitializeCacheFromVolume(pVCB,FCB);

把文件控制块添加HASH表里,以便加速访问。

#050 vfatAddFCBToTable(pVCB,FCB);

#051

#052 return(FCB);

#053}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读