reactos操作系统实现(139)
来源:互联网 发布:淘宝中老年高腰女裤" 编辑:程序博客网 时间:2024/04/27 15:12
当用户删除文件时,就会通过ReactOS的API调用IO管理器函数,然后创建IRP包发送到文件系统驱动程序来,然后就调用下面函数来把文件分配的簇从FAT分配表时删除。具体实现的代码如下:
#001 static NTSTATUS
#002 FATDelEntry(
#003 IN PDEVICE_EXTENSIONDeviceExt,
#004 IN PVFATFCB pFcb)
#005 {
#006 ULONG CurrentCluster =0, NextCluster, i;
#007 PVOID Context = NULL;
#008 LARGE_INTEGER Offset;
#009 PFAT_DIR_ENTRYpDirEntry;
#010
#011 ASSERT(pFcb);
#012 ASSERT(pFcb->parentFcb);
#013
#014 DPRINT("delEntryPathName /'%wZ/'/n", &pFcb->PathNameU);
#015 DPRINT("deleteentry: %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: checkstatus */
#048 WriteCluster(DeviceExt, CurrentCluster, 0);
#049 CurrentCluster =NextCluster;
#050 }
#051 return STATUS_SUCCESS;
#052 }
- reactos操作系统实现(139)
- reactos操作系统实现(1)
- reactos操作系统实现(2)
- reactos操作系统实现(3)
- reactos操作系统实现(4)
- reactos操作系统实现(5)
- reactos操作系统实现(6)
- reactos操作系统实现(7)
- reactos操作系统实现(8)
- reactos操作系统实现(9)
- reactos操作系统实现(10)
- reactos操作系统实现(11)
- reactos操作系统实现(12)
- reactos操作系统实现(13)
- reactos操作系统实现(14)
- reactos操作系统实现(15)
- reactos操作系统实现(16)
- reactos操作系统实现(17)
- 必须掌握的八个DOS命令
- 取Google地址本(gdata api)
- 【转】Linux系统中的Shell脚本调试技术
- 键盘上每个键作用!!! (史上最全的)
- 我为什么选择iBATIS而不是Hibernate
- reactos操作系统实现(139)
- IT工程师必看的十条建议
- Hibernate配置详解
- Java 文件路径问题
- Rational Rose 2003 下载及破解方法
- rcp 视图布局
- rcp 视图中的菜单
- Real Player 12.0.0.343 SP 1.0.5 R51CND Windows XP/7最新简体中文正式增强完整版官方下载地址
- JSP运行在tomcat下时,页面java代码的变量命名的一个注意事项