微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(130)

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}

原文地址:https://www.jb51.cc/react/308394.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐