亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? super.c

?? Win9x下文件系統驅動的例子(EXT2)源代碼。
?? C
字號:
#include "vxd.h"

#include "shared\parttype.h"
#include "shared\vxddebug.h"
#include "super.h"
#include "inode.h"
#include "parttbl.h"


/**********************************
 *
 * STATIC DATA
 *
 **********************************/

static MUTEXHANDLE		sMutex = 0;
static TSuperBlock		sSuperRoot;

/**********************************
 *
 * STATIC HELPERS
 *
 **********************************/

static void SetDeviceName(TSuperBlock *Super)
{
	int	Disk, Partition;

	PartitionGetDevice(Super->Device, &Disk, &Partition);

	sprintf(Super->DeviceName, "/dev/%cd%c%i", 
		Disk < MAX_IDE_DISK ? 'h' : 's',
		Disk < MAX_IDE_DISK ? Disk + 'a' : Disk + 'a' - MAX_IDE_DISK,
		Partition);
}

/*
 * Mounts a device on an inode
 * This resembles the mount command:
 *	mount /dev/hda1 /mnt -t ext2
 * 
 * PRE CONDITIONS:
 * sMutex is entered
 * No fields in the Super needs to be initialised. Device
 * refers to a existing device. InodeMount may either be zero
 * (to denote a mount of the root partition) or a pointer to a
 * inode structure (to denote the mount point).
 *
 * POST CONDITIONS:
 * If the mount succeeded, Super is initialised as described
 * below.
 *
 * IN:
 *	Super		: Pointer to a Super structure. No fields need to
 *					be initialised
 *	Device		: Valid reference to a device
 *	InodeMount	: 0 to denote a mount of the root partition, otherwise
 *					a pointer to the inode of the mount point
 *	
 * 
 * OUT:
 *	Super		: _All_ fields have sensible values.
 *
 * RETURNS:
 *	TRUE on succes, FALSE otherwise
 *
 */
BOOL SuperMount(TSuperBlock *Super, TDevice Device, TInode *InodeMount)
{

	DevGenerateName(Device, Super->DeviceName);

	VxdDebugPrint(D_SUPER, "SuperMount: device=%s, inode=(device=%s, ino=%lu)", 
		(ULONG) Super->DeviceName,
		InodeMount ? InodeMount->Super->DeviceName: "dev/root", 
		InodeMount ? (ULONG) InodeMount->InodeNo: 0ul);

		/*
		 * Make sure we are on a hardisk device. We can tell
		 * by the partition type. It was put there by our VSD
		 */
	if (DevGetPartitionType(Device) != TYPE_LINUX_PARTITION)
	{
		VxdDebugPrint(D_ERROR, "SuperMount: device not a hardisk, device");
		goto mnt_dev_err_1;
	}

		/*
		 * Set these fields now, the Ext2 module depends
		 * on Super->Device and Super->Mutex being initialised
		 */
	Super->Device = Device;
	Super->Mutex = CreateMutex(0, MUTEX_MUST_COMPLETE);
		
		/*
		 * Can we read an ext2 superblock on it?
		 */
	if (!Ext2GetSuperBlock(Super))
	{
		VxdDebugPrint(D_ERROR, "SuperMount: failed to read superblock");
		goto mnt_dev_err_2;
	}

		/*
		 * Get the root inode for this file system
		 */
	if (!(Super->RootInode = InodeGetRootInode(Super)))
	{
		VxdDebugPrint(D_ERROR, "SuperMount: failed to read inode");
		goto mnt_dev_err_3;
	}

	SetDeviceName(Super);

	VxdDebugPrint(D_SUPER, "SuperMount: done");

	
	return TRUE;

mnt_dev_err_3:
	Ext2ReleaseSuperBlock(Super);
mnt_dev_err_2:
	DestroyMutex(Super->Mutex);



mnt_dev_err_1:

		/*
		 * If we fail, reset the Super->Device. It is used
		 * by mount root to detect if the root partition
		 * is already mounted.
		 */
	Super->Device = 0;

	return FALSE;
}



/**********************************
 *
 * INTERFACE ROUTINES
 *
 **********************************/



TSuperBlock* SuperMountRoot(TDevice Device)
{
	TSuperBlock*		Super;


	EnterMutex(sMutex, BLOCK_THREAD_IDLE);

	VxdDebugPrint(D_SUPER, "SuperMountRoot: device=%x", (ULONG) Device);

	Super = 0;

		/*
		 * First, see if a root is already loaded
		 */ 
	if (sSuperRoot.Device)
	{
		VxdDebugPrint(D_ERROR, "SuperMountRoot: root already loaded");
		goto mnt_root_done;
	}

		/*
		 * Mount the volume, mountpoint = 0
		 */
	if (!(SuperMount(&sSuperRoot, Device, 0)))
	{
		VxdDebugPrint(D_ERROR, "SuperMountRoot: could not mount volume");
		goto mnt_root_done;
	}

	VxdDebugPrint(D_SUPER, "SuperMountRoot: done");


	Super = &sSuperRoot;

mnt_root_done:
	LeaveMutex(sMutex);

	VxdDebugPrint(D_SUPER, "SuperMountRoot: done");
	
	return Super;
}



/*
 * Mounts a device on a directory
 * This resembles the mount command:
 *	mount /dev/hda1 /mnt -t ext2
 * 
 * PRE CONDITIONS:
 * No fields in the Super needs to be initialised. Device
 * refers to a existing device. InodeMount may either be zero
 * (to denote a mount of the root partition) or a pointer to a
 * inode structure (to denote the mount point).
 *
 * POST CONDITIONS:
 * If the mount succeeded, Super is initialised as described
 * below.
 *
 * IN:
 *	Super	: Pointer to a SuperBlock structure. No fields need to
 *					be initialised
 *	Device		: Valid reference to a device
 *	InodeMount	: 0 to denote a mount of the root partition, otherwise
 *					a pointer to the inode of the mount point
 *	
 * 
 * OUT:
 *	Super	: _All_ fields have sensible values.
 *
 * RETURNS:
 *	TRUE on succes, FALSE otherwise
 *
 */

TSuperBlock* SuperMountDevice(TDevice Device, TInode *InodeRoot)
{
	return FALSE;
}



BOOL SuperUmount(TDevice Device)
{
	return TRUE;
}



BOOL SuperInitialise()
{

	VxdDebugPrint(D_SYSTEM, "SuperInitialise");

		/*
		 * clean our global
		 */
	memset(&sSuperRoot, 0, sizeof(TSuperBlock));
	
	sMutex = CreateMutex(0, MUTEX_MUST_COMPLETE);

	VxdDebugPrint(D_SYSTEM, "SuperInitialise: done");

	return TRUE;
}



void SuperCleanup()
{

	VxdDebugPrint(D_SYSTEM, "SuperCleanup");

	DestroyMutex(sMutex);

	VxdDebugPrint(D_SYSTEM, "SuperCleanup: done");
}


ext2_super_block* SuperLock(TSuperBlock *Super)
{
	return BlockLock(Super->SuperBlock);
}


void SuperUnlock(TSuperBlock *Super)
{
	BlockUnlock(Super->SuperBlock);
}


/*
 * This is for the future
 */
//TSuperBlock* SuperGetSuperRoot()
//{
//	return &sSuperRoot;
//}


TSuperBlock* SuperMountDeviceStandAlone(TDevice Device)
{
	TSuperBlock*		Super;

	VxdDebugPrint(D_SUPER, "SuperMountDeviceStandAlone: device=%x", (ULONG) Device);

	if (!(Super = (TSuperBlock *) calloc(1, sizeof(TSuperBlock))))
	{
		VxdDebugPrint(D_ERROR, "SuperMountDeviceStandAlone: could not malloc super");
		return 0;
	}

		/*
		 * Mount the volume, mountpoint = 0
		 */
	if (!(SuperMount(Super, Device, 0)))
	{
		VxdDebugPrint(D_ERROR, "SuperMountDeviceStandAlone: could not mount volume");
		return 0;
	}

	VxdDebugPrint(D_SUPER, "SuperMountDeviceStandAlone: done");

	return Super;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区美女| 国产高清视频一区| 国产成人av电影在线观看| av亚洲产国偷v产偷v自拍| 欧美肥妇free| 亚洲日本丝袜连裤袜办公室| 免费人成精品欧美精品 | 久久久青草青青国产亚洲免观| 中文字幕一区三区| 国产乱一区二区| 欧美人动与zoxxxx乱| 国产精品理伦片| 韩日欧美一区二区三区| 欧美三级电影精品| 一区二区在线观看视频| 国产sm精品调教视频网站| 日韩一区二区麻豆国产| 亚洲电影一级黄| 在线一区二区三区四区五区| 亚洲国产精品传媒在线观看| 久久成人综合网| 日韩一区二区三区高清免费看看| 亚洲精品视频免费观看| 9i看片成人免费高清| 日本一区二区三区免费乱视频| 国内成+人亚洲+欧美+综合在线| 欧美日韩电影在线播放| 日韩电影在线一区| 欧美激情一区二区三区全黄| 欧美高清在线一区| 色88888久久久久久影院野外| 久久 天天综合| 亚洲国产日韩精品| 国产精品伦理一区二区| 精品奇米国产一区二区三区| 91免费观看在线| 成人激情av网| 欧美美女一区二区| 欧美激情一区二区三区全黄| 国产一区 二区 三区一级| 欧美成人三级在线| 久久99最新地址| www国产成人| 国产成人午夜视频| 亚洲国产精品精华液ab| 99精品在线观看视频| 国产网红主播福利一区二区| 丁香一区二区三区| 一区二区三区免费网站| 欧美色图在线观看| 美脚の诱脚舐め脚责91| 精品sm在线观看| 99热99精品| 三级一区在线视频先锋| 2021中文字幕一区亚洲| 成人午夜又粗又硬又大| 一区二区三区四区在线播放 | 亚洲一二三区在线观看| 欧美性色aⅴ视频一区日韩精品| 亚洲成人免费观看| 欧美电视剧在线看免费| 成人av免费在线| 亚洲福利视频一区| 国产喂奶挤奶一区二区三区| 色视频成人在线观看免| 美女一区二区三区在线观看| 中文字幕成人在线观看| 欧美日韩不卡视频| 国产成人自拍在线| 首页国产丝袜综合| 中文字幕 久热精品 视频在线| 在线欧美日韩国产| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲免费三区一区二区| 欧美精品日韩综合在线| 国产mv日韩mv欧美| 日韩精品每日更新| 中文字幕av一区二区三区高| 在线视频欧美精品| 国产精品一区二区在线观看网站| 一区二区三区欧美激情| 国产亚洲短视频| 欧美日本一道本| 91伊人久久大香线蕉| 久久国产精品免费| 亚洲国产va精品久久久不卡综合| 国产无一区二区| 欧美成人a在线| 欧美这里有精品| 丁香婷婷综合激情五月色| 视频一区中文字幕| 一区二区三区蜜桃网| 中文字幕一区二区三区在线播放 | 欧美二区三区的天堂| 99国产精品国产精品毛片| 久久福利视频一区二区| 亚洲一区欧美一区| 亚洲欧美二区三区| 国产精品久久久久国产精品日日| 91精品国产色综合久久不卡电影| 99re热这里只有精品视频| 国产成人精品亚洲日本在线桃色| 日韩av在线免费观看不卡| 一区二区三区在线免费播放| 中文字幕一区二区三区在线播放| 国产日韩欧美制服另类| 26uuu国产日韩综合| 26uuu精品一区二区在线观看| 91精品国产色综合久久不卡蜜臀 | 国产亚洲欧洲997久久综合| 91精品欧美综合在线观看最新| 色欧美乱欧美15图片| av在线综合网| 色综合久久久久综合体 | 国产精品一区二区你懂的| 免费成人在线观看视频| 免费在线观看精品| 久久99久久精品| 国产精品一区二区三区四区| 国产精品亚洲成人| 成人免费毛片片v| www.欧美色图| 一本大道久久a久久综合婷婷| 91激情在线视频| 制服丝袜日韩国产| 精品久久久久久无| 国产欧美1区2区3区| 国产欧美日产一区| 亚洲丝袜精品丝袜在线| 一区二区在线观看av| 亚洲电影一级黄| 精品一区二区三区av| 国产乱码精品一品二品| 91在线你懂得| 欧美伦理电影网| 欧美大胆一级视频| 中文字幕欧美国产| 亚洲一区二区视频在线观看| 水蜜桃久久夜色精品一区的特点| 免费成人在线观看视频| 国产白丝精品91爽爽久久| 99久久99久久久精品齐齐| 在线观看亚洲精品视频| 欧美日本一道本在线视频| 亚洲精品在线观| 亚洲精品免费一二三区| 免费人成在线不卡| a4yy欧美一区二区三区| 欧美丰满一区二区免费视频| 久久久综合精品| 亚洲最大色网站| 韩国精品主播一区二区在线观看 | 亚洲尤物视频在线| 另类综合日韩欧美亚洲| 不卡电影免费在线播放一区| 欧美日韩在线观看一区二区| 精品国精品国产| 一区二区三区毛片| 国产精品99久久久久久宅男| 欧美伊人久久大香线蕉综合69| 日韩免费性生活视频播放| 亚洲日本护士毛茸茸| 蜜桃av一区二区在线观看| 一本一道久久a久久精品| 精品国产麻豆免费人成网站| 亚洲欧美另类综合偷拍| 国产剧情av麻豆香蕉精品| 欧美日韩精品免费观看视频 | 91免费在线看| 久久九九99视频| 天天综合日日夜夜精品| 成人高清视频在线| 亚洲精品一区二区三区精华液| 亚洲大片在线观看| 99久久综合色| 国产日韩欧美高清| 老司机一区二区| 91麻豆精品国产91久久久使用方法 | 欧美激情综合五月色丁香小说| 亚洲成人免费视| 在线观看一区二区精品视频| 国产精品久久久一本精品| 国内不卡的二区三区中文字幕| 6080亚洲精品一区二区| 亚洲小说欧美激情另类| av激情成人网| 亚洲欧美怡红院| www.亚洲在线| 欧美国产激情二区三区| 国产精品一区二区黑丝| 日韩精品在线一区二区| 日韩精品免费视频人成| 欧美精品在线观看播放| 亚洲国产wwwccc36天堂| 欧美私模裸体表演在线观看| 亚洲狼人国产精品| 99国产精品久久久久| 亚洲欧美日韩国产手机在线| 9色porny自拍视频一区二区| 国产精品白丝在线|