⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
字号:
/*
 * COPYRIGHT:        See COPYING in the top level directory
 * PROJECT:          ReactOS kernel
 * FILE:             services/fs/ext2/super.c
 * PURPOSE:          ext2 filesystem
 * PROGRAMMER:       David Welch (welch@mcmail.com)
 * UPDATE HISTORY:
 */

/* INCLUDES *****************************************************************/

#include <ntddk.h>

#define NDEBUG
#include <debug.h>

#include "ext2fs.h"

/* FUNCTIONS ****************************************************************/

#define addr_per_block (BLOCKSIZE / sizeof(ULONG))

ULONG Ext2BlockMap(PDEVICE_EXTENSION DeviceExt,
		  struct ext2_inode* inode,
		  ULONG offset)
{
   ULONG block;
   PULONG TempBuffer;
   BOOL b;

   DPRINT("Ext2BlockMap(DeviceExt %x, inode %x, offset %d)\n",
	   DeviceExt,inode,offset);
   if (offset < EXT2_NDIR_BLOCKS)
     {
	block = inode->i_block[offset];
	DPRINT("block %d\n",block);
	return(block);
     }
   offset = offset - EXT2_NDIR_BLOCKS;
   if (offset < addr_per_block)
     {
	block = inode->i_block[EXT2_IND_BLOCK];
	TempBuffer = ExAllocatePool(NonPagedPool, BLOCKSIZE);
	b = Ext2ReadSectors(DeviceExt->StorageDevice,
			    block,
			    1,
			    TempBuffer);
	if (!b)
	  {
	     DbgPrint("ext2fs:%s:%d: Disk io failed\n", __FILE__, __LINE__);
	     return(0);
	  }
	block = TempBuffer[offset];
	ExFreePool(TempBuffer);
	return(block);
     }
   offset = offset - addr_per_block;
   DbgPrint("Failed at %s:%d\n",__FILE__,__LINE__);
   for(;;);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -