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

reactos操作系统实现(139)

发布时间:2020-12-15 04:59:30 所属栏目:百科 来源:网络整理
导读:当用户删除文件时,就会通过 ReactOS 的 API 调用 IO 管理器函数,然后创建 IRP 包发送到文件系统驱动程序来,然后就调用下面函数来把文件分配的簇从 FAT 分配表时删除。具体实现的代码如下: #001 static NTSTATUS #002 FATDelEntry( #003 IN PDEVICE_EXTEN

当用户删除文件时,就会通过ReactOSAPI调用IO管理器函数,然后创建IRP包发送到文件系统驱动程序来,然后就调用下面函数来把文件分配的簇从FAT分配表时删除。具体实现的代码如下:

#001 static NTSTATUS

#002 FATDelEntry(

#003 IN PDEVICE_EXTENSION DeviceExt,

#004 IN PVFATFCB pFcb)

#005 {

#006 ULONG CurrentCluster = 0,NextCluster,i;

#007 PVOID Context = NULL;

#008 LARGE_INTEGER Offset;

#009 PFAT_DIR_ENTRY pDirEntry;

#010

#011 ASSERT(pFcb);

#012 ASSERT(pFcb->parentFcb);

#013

#014 DPRINT("delEntry PathName /'%wZ/'/n",&pFcb->PathNameU);

#015 DPRINT("delete entry: %d to %d/n",pFcb->startIndex,pFcb->dirIndex);

下面开始从目录项里找到首簇开始位置。

#016 Offset.u.HighPart = 0;

#017 for (i = pFcb->startIndex; i <= pFcb->dirIndex; i++)

#018 {

#019 if (Context == NULL || ((i * sizeof(FAT_DIR_ENTRY)) % PAGE_SIZE) == 0)

#020 {

#021 if (Context)

#022 {

#023 CcSetDirtyPinnedData(Context,NULL);

#024 CcUnpinData(Context);

#025 }

#026 Offset.u.LowPart = (i * sizeof(FAT_DIR_ENTRY) / PAGE_SIZE) * PAGE_SIZE;

#027 CcPinRead(pFcb->parentFcb->FileObject,&Offset,PAGE_SIZE,TRUE,

#028 &Context,(PVOID*)&pDirEntry);

#029 }

把目录清除。

#030 pDirEntry[i % (PAGE_SIZE / sizeof(FAT_DIR_ENTRY))].Filename[0] = 0xe5;

获取需要删除的目录项。

#031 if (i == pFcb->dirIndex)

#032 {

#033 CurrentCluster =

#034 vfatDirEntryGetFirstCluster(DeviceExt,

#035 (PDIR_ENTRY)&pDirEntry[i % (PAGE_SIZE / sizeof(FAT_DIR_ENTRY))]);

#036 }

#037 }

#038 if (Context)

#039 {

#040 CcSetDirtyPinnedData(Context,NULL);

#041 CcUnpinData(Context);

#042 }

#043

下面开始删除所有使用的簇,也就是把FAT表上标记为0.

#044 while (CurrentCluster && CurrentCluster != 0xffffffff)

#045 {

#046 GetNextCluster(DeviceExt,CurrentCluster,&NextCluster);

#047 /* FIXME: check status */

#048 WriteCluster(DeviceExt,0);

#049 CurrentCluster = NextCluster;

#050 }

#051 return STATUS_SUCCESS;

#052}

(编辑:李大同)

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

    推荐文章
      热点阅读