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

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

?? swapfs.c

?? title=Windows NT/2000/XP 一個RAM-DISK文件系統驅動 memo=SwapFs is a driver for Windows NT/2000/XP that let yo
?? C
?? 第 1 頁 / 共 2 頁
字號:
	USHORT						sector_size;
	PUCHAR						buffer;
	struct msdos_boot_sector*	boot_sector;
	ULONG						nsector;
	ULONG						ncluster;
	ULONG						fat_type;
	ULONG						fat_length;
	LARGE_INTEGER				offset;
	ULONG 						n;
	struct msdos_dir_entry*		root_dir;

	ASSERT(DeviceObject != NULL);

	size = sizeof(disk_geometry);

	status = DeviceIoControl(
		DeviceObject,
		IOCTL_DISK_GET_DRIVE_GEOMETRY,
		NULL,
		0,
		&disk_geometry,
		&size
		);

	if (!NT_SUCCESS(status))
	{
		return status;
	}

	size = sizeof(partition_information);

	status = DeviceIoControl(
		DeviceObject,
		IOCTL_DISK_GET_PARTITION_INFO,
		NULL,
		0,
		&partition_information,
		&size
		);

	if (!NT_SUCCESS(status))
	{
		return status;
	}

	sector_size = (USHORT) disk_geometry.BytesPerSector;

	if (!sector_size)
	{
		return STATUS_DEVICE_CONFIGURATION_ERROR;
	}

	buffer = (PUCHAR) ExAllocatePool(NonPagedPoolCacheAligned, sector_size);

	if (!buffer)
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	RtlZeroMemory(buffer, sector_size);

	boot_sector = (struct msdos_boot_sector*) buffer;

	boot_sector->boot_jump[0] = 0xeb;
	boot_sector->boot_jump[1] = 0x3c;
	boot_sector->boot_jump[2] = 0x90;

	RtlCopyMemory(boot_sector->system_id, "SwapFs  ", 8);

	*(PUSHORT)boot_sector->sector_size = sector_size;

	boot_sector->reserved = 1;

	boot_sector->fats = 1;

	*(PUSHORT)boot_sector->dir_entries = ROOT_DIR_ENTRYS;

	nsector = (ULONG) ((partition_information.PartitionLength.QuadPart -
		sizeof(union swap_header)) / sector_size);

	if (nsector <= 0xffff)
	{
		*(PUSHORT)boot_sector->sectors = (USHORT) nsector;
	}
	else
	{
		boot_sector->total_sect = nsector;
	}

	boot_sector->cluster_size = 1;
	ncluster = nsector;

	while (ncluster > 0xffff && boot_sector->cluster_size <= 128)
	{
		boot_sector->cluster_size <<= 1;
		ncluster = nsector / boot_sector->cluster_size;
	}

	boot_sector->media = 0xf8;

	if (ncluster > 4087)
	{
		fat_type = 16;

		fat_length = (ncluster * 2 + sector_size - 1) / sector_size;

		RtlCopyMemory(boot_sector->fs_type, MSDOS_FAT16_SIGN, 8);
	}
	else
	{
		fat_type = 12;

		fat_length = (((ncluster * 3 + 1) / 2) + sector_size - 1) / sector_size;

		RtlCopyMemory(boot_sector->fs_type, MSDOS_FAT12_SIGN, 8);
	}

	boot_sector->fat_length = (USHORT) fat_length;

	boot_sector->secs_track = (USHORT) disk_geometry.SectorsPerTrack;

	boot_sector->heads = (USHORT) disk_geometry.TracksPerCylinder;

	boot_sector->ext_boot_sign = MSDOS_EXT_SIGN;

	*(PULONG)boot_sector->volume_id = 0x12345678;

	RtlCopyMemory(boot_sector->volume_label, "SwapFs     ", 11);

	boot_sector->boot_sign = BOOT_SIGN;

	offset.QuadPart = sizeof(union swap_header);

	status = WriteBlockDevice(
		DeviceObject,
		&offset,
		sector_size,
		buffer
		);

	if (!NT_SUCCESS(status))
	{
		ExFreePool(buffer);
		return status;
	}

	RtlZeroMemory(buffer, sector_size);

	buffer[0] = 0xf8;
	buffer[1] = 0xff;
	buffer[2] = 0xff;

	if (fat_type == 16)
	{
		buffer[3] = 0xff;
	}

	offset.QuadPart += sector_size;

	status = WriteBlockDevice(
		DeviceObject,
		&offset,
		sector_size,
		buffer
		);

	if (!NT_SUCCESS(status))
	{
		ExFreePool(buffer);
		return status;
	}

	RtlZeroMemory(buffer, sector_size);

	offset.QuadPart += sector_size;

	for (n = 0;
		 n < fat_length - 1;
		 n++, offset.QuadPart += sector_size
		)
	{
		status = WriteBlockDevice(
			DeviceObject,
			&offset,
			sector_size,
			buffer
			);

		if (!NT_SUCCESS(status))
		{
			ExFreePool(buffer);
			return status;
		}
	}

	root_dir = (struct msdos_dir_entry*) buffer;

	RtlCopyMemory(root_dir->name, "SwapFs  ", 8);
	RtlCopyMemory(root_dir->ext, "   ", 3);
	root_dir->attr = ATTR_VOLUME;

	status = WriteBlockDevice(
		DeviceObject,
		&offset,
		sector_size,
		buffer
		);

	if (!NT_SUCCESS(status))
	{
		ExFreePool(buffer);
		return status;
	}

	RtlZeroMemory(buffer, sector_size);

	offset.QuadPart += sector_size;

	for (n = 0;
		 n < (sizeof(struct msdos_dir_entry) * ROOT_DIR_ENTRYS / sector_size);
		 n++, offset.QuadPart += sector_size
		)
	{
		status = WriteBlockDevice(
			DeviceObject,
			&offset,
			sector_size,
			buffer
			);

		if (!NT_SUCCESS(status))
		{
			ExFreePool(buffer);
			return status;
		}
	}

	ExFreePool(buffer);

	KdPrint(("SwapFs: FormatDeviceToFat: Device is %uMB\n",
		(ULONG) ((partition_information.PartitionLength.QuadPart -
		sizeof(union swap_header)) / 0x100000)));

	return STATUS_SUCCESS;
}

NTSTATUS 
DeviceIoControl (
	IN PDEVICE_OBJECT	DeviceObject,
	IN ULONG			IoctlCode,
	IN PVOID			InputBuffer,
	IN ULONG			InputBufferSize,
	OUT PVOID			OutputBuffer,
	OUT PULONG			OutputBufferSize
	)
{
	ULONG			output_buffer_size;
	KEVENT			event;
	PIRP			irp;
	IO_STATUS_BLOCK io_status;
	NTSTATUS		status;

	ASSERT(DeviceObject != NULL);

	if (OutputBuffer)
	{
		ASSERT(OutputBufferSize != NULL);
		output_buffer_size = *OutputBufferSize;
	}

	KeInitializeEvent(&event, NotificationEvent, FALSE);

	irp = IoBuildDeviceIoControlRequest(
		IoctlCode,
		DeviceObject,
		InputBuffer,
		InputBufferSize,
		OutputBuffer,
		output_buffer_size,
		FALSE,
		&event,
		&io_status
		);

	if (!irp)
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	status = IoCallDriver(DeviceObject, irp);

	if (status == STATUS_PENDING)
	{
		KeWaitForSingleObject(
			&event,
			Suspended,
			KernelMode,
			FALSE,
			NULL
			);
		status = io_status.Status;
	}

	if (OutputBuffer)
	{
		*OutputBufferSize = io_status.Information;
	}

	return status;
}

NTSTATUS
ReadBlockDevice (
	IN PDEVICE_OBJECT	DeviceObject,
	IN PLARGE_INTEGER	Offset,
	IN ULONG			Length,
	OUT PVOID			Buffer
	)
{
	KEVENT			event;
	PIRP			irp;
	IO_STATUS_BLOCK io_status;
	NTSTATUS		status;

	ASSERT(DeviceObject != NULL);
	ASSERT(Offset != NULL);
	ASSERT(Buffer != NULL);

	KeInitializeEvent(&event, NotificationEvent, FALSE);

	irp = IoBuildSynchronousFsdRequest(
		IRP_MJ_READ,
		DeviceObject,
		Buffer,
		Length,
		Offset,
		&event,
		&io_status
		);

	if (!irp)
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	status = IoCallDriver(DeviceObject, irp);

	if (status == STATUS_PENDING)
	{
		KeWaitForSingleObject(
			&event,
			Suspended,
			KernelMode,
			FALSE,
			NULL
			);
		status = io_status.Status;
	}

	return status;
}

NTSTATUS
WriteBlockDevice (
	IN PDEVICE_OBJECT	DeviceObject,
	IN PLARGE_INTEGER	Offset,
	IN ULONG			Length,
	IN PVOID			Buffer
	)
{
	KEVENT			event;
	PIRP			irp;
	IO_STATUS_BLOCK io_status;
	NTSTATUS		status;

	ASSERT(DeviceObject != NULL);
	ASSERT(Offset != NULL);
	ASSERT(Buffer != NULL);

	KeInitializeEvent(&event, NotificationEvent, FALSE);

	irp = IoBuildSynchronousFsdRequest(
		IRP_MJ_WRITE,
		DeviceObject,
		Buffer,
		Length,
		Offset,
		&event,
		&io_status
		);

	if (!irp)
	{
		return STATUS_INSUFFICIENT_RESOURCES;
	}

	status = IoCallDriver(DeviceObject, irp);

	if (status == STATUS_PENDING)
	{
		KeWaitForSingleObject(
			&event,
			Suspended,
			KernelMode,
			FALSE,
			NULL
			);
		status = io_status.Status;
	}

	return status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米影视一区二区三区| 亚洲国产成人精品视频| 精品国一区二区三区| 欧美人妇做爰xxxⅹ性高电影 | 欧美日韩一本到| 日本大香伊一区二区三区| 成人黄色小视频在线观看| 福利一区二区在线| 成人综合在线观看| 97久久人人超碰| 色噜噜狠狠成人中文综合 | 亚洲欧洲日本在线| 欧美国产一区视频在线观看| 国产精品蜜臀av| 中文字幕视频一区| 一区二区三区丝袜| 亚洲成人av一区二区| 青青草精品视频| 麻豆精品蜜桃视频网站| 国产最新精品免费| 99精品国产99久久久久久白柏| 91色视频在线| 在线综合亚洲欧美在线视频| 欧美tk丨vk视频| 欧美国产日韩a欧美在线观看| 国产精品久久久久久久久晋中| 亚洲欧洲色图综合| 亚洲高清三级视频| 六月丁香综合在线视频| 国产成人8x视频一区二区| av影院午夜一区| 欧美午夜影院一区| 日韩亚洲欧美综合| 国产精品免费av| 亚洲v日本v欧美v久久精品| 久久电影网站中文字幕| 成人精品免费网站| 欧美日韩国产综合一区二区三区| 欧美第一区第二区| 国产精品久久久久aaaa樱花| 亚洲午夜三级在线| 国产精品综合二区| 色视频欧美一区二区三区| 欧美精品久久久久久久多人混战 | 精品一区二区三区免费毛片爱| 国产精品资源在线看| 日本高清不卡在线观看| 日韩免费视频一区| 亚洲日本成人在线观看| 美女视频黄免费的久久| av亚洲精华国产精华| 日韩欧美激情一区| 亚洲欧洲成人自拍| 精品影视av免费| 欧美最猛性xxxxx直播| 亚洲精品在线电影| 亚洲国产日日夜夜| 国产成人av自拍| 91精品国产综合久久香蕉的特点| 国产精品视频一区二区三区不卡| 丝袜亚洲另类欧美综合| 99精品国产99久久久久久白柏| 欧美草草影院在线视频| 亚洲国产精品嫩草影院| 成人综合在线观看| 久久综合色综合88| 日一区二区三区| 91色porny在线视频| 久久精品欧美一区二区三区不卡| 午夜在线成人av| 色就色 综合激情| 欧美国产丝袜视频| 激情综合网av| 91精品国产全国免费观看| 亚洲欧美日韩久久精品| 国产成人av一区二区| 日韩一卡二卡三卡国产欧美| 一区二区三区在线观看国产| a美女胸又www黄视频久久| 国产亚洲一区二区三区在线观看 | 亚欧色一区w666天堂| www.综合网.com| 国产亚洲欧美在线| 久久国产麻豆精品| 91精品国产综合久久久久久漫画| 亚洲国产三级在线| 欧洲精品一区二区三区在线观看| 自拍偷拍欧美激情| av在线不卡免费看| 综合久久综合久久| 成人app软件下载大全免费| 国产亚洲午夜高清国产拍精品| 极品少妇xxxx精品少妇偷拍| 欧美成人精品二区三区99精品| 天天色天天爱天天射综合| 欧美视频完全免费看| 亚洲风情在线资源站| 欧美亚洲国产一区在线观看网站 | 粉嫩蜜臀av国产精品网站| 国产亚洲综合av| 国产99一区视频免费| 国产女人aaa级久久久级| 国产成人午夜视频| 日本一区二区三区免费乱视频| 国产成人免费视频| 国产精品天天摸av网| caoporn国产一区二区| 亚洲人成精品久久久久久| 91视频.com| 亚洲国产精品久久久男人的天堂| 欧美色综合天天久久综合精品| 亚洲一二三区在线观看| 欧美另类变人与禽xxxxx| 日韩**一区毛片| 精品人伦一区二区色婷婷| 国产一区二区三区精品欧美日韩一区二区三区| 欧美电视剧在线看免费| 国产a视频精品免费观看| 国产精品高清亚洲| 色久综合一二码| 丝袜美腿亚洲一区二区图片| 日韩一级完整毛片| 国产不卡免费视频| 欧美二区在线观看| 欧美性xxxxx极品少妇| 中文字幕一区二区三区av| 国产精品一二三在| 国产精品久久久久久久久免费丝袜 | 欧美韩日一区二区三区| 99vv1com这只有精品| 视频一区欧美精品| 中文字幕亚洲综合久久菠萝蜜| 欧美高清dvd| 91在线视频免费观看| 美女视频网站久久| 亚洲线精品一区二区三区| 精品国产区一区| 欧美体内she精高潮| 国产999精品久久久久久绿帽| 亚洲成人手机在线| 中文字幕亚洲一区二区av在线| 日韩欧美国产综合一区 | 久久久www成人免费无遮挡大片| 欧美亚洲国产怡红院影院| 粉嫩蜜臀av国产精品网站| 久久激五月天综合精品| 一区二区三区在线影院| 国产视频一区二区三区在线观看| 欧美在线视频全部完| 国产91富婆露脸刺激对白| 另类小说欧美激情| 婷婷国产在线综合| 中文字幕日韩精品一区| 精品免费日韩av| 欧美三级视频在线观看| 99久久久久久| 成人一级视频在线观看| 久久精品国产999大香线蕉| 午夜精品久久久久久久久| 亚洲日本护士毛茸茸| 国产精品久久久久久妇女6080 | 国产成人精品在线看| 韩日av一区二区| 青青草97国产精品免费观看 | 欧美一区午夜视频在线观看| 欧美亚洲高清一区二区三区不卡| 成人一区二区三区视频在线观看| 国产精品资源在线观看| 国产精品伊人色| 国产麻豆视频精品| 国产一区二区三区av电影| 日韩avvvv在线播放| 日韩国产一区二| 亚洲一区二区四区蜜桃| 亚洲精品国产精华液| 亚洲免费伊人电影| 亚洲精品高清在线| 亚洲人一二三区| 亚洲精品欧美二区三区中文字幕| 亚洲人成人一区二区在线观看| 国产精品乱码人人做人人爱| 国产精品色噜噜| 国产精品国产三级国产普通话99| 日本一区二区三区免费乱视频| 欧美国产激情一区二区三区蜜月| 久久精品一区二区三区不卡牛牛 | 国产成人免费视| 成人晚上爱看视频| 91日韩精品一区| 91丨porny丨蝌蚪视频| 懂色av中文字幕一区二区三区| 精品国产3级a| 精品国产91洋老外米糕| 久久一留热品黄| 中文字幕国产一区| 亚洲欧美另类小说| 亚洲综合激情小说| 日韩高清不卡一区二区三区| 蜜桃在线一区二区三区| 国产一区二区伦理片|