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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mkntfs.c

?? NTFS(NT文件系統(tǒng)) for Linux的一個實現(xiàn)源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  mkntfs - create NTFS format filesystems on block devices    Copyright 1999 by Steve Dodd <dirk@loth.demon.co.uk>    This program is free software; you can redistribute it and/or modify    it under the terms of version 2 of the GNU General Public License as    published by the Free Software Foundation.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See version 2    of the GNU General Public License for more details.    You should have received a copy of version 2 of the GNU General    Public License along with this program; if not, write to the    Free Software Foundation, Inc., 675 Mass Ave, Cambridge,    MA 02139, USA.    Version: $Id: mkntfs.c,v 1.1 1999/04/11 18:32:49 martin Exp $*/#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <stdio.h>#include <ctype.h>#ifdef HAVE_GETOPT_H#include <getopt.h>#else#define getopt_long(a,v,o,ol,x)        getopt(a,v,o)#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include <stdlib.h>#include <string.h>#include <stdarg.h>#include <fcntl.h>#include <errno.h>#include "ntfstypes.h"#include "struct.h"#include "macros.h"#include "support.h"#include "util.h"#include "attr.h"#include "inode.h"#include "super.h"#include "dir.h"#include "attrtypes.h"#include <sys/ioctl.h>#include <linux/hdreg.h>#include <linux/fs.h>int verbose_flag = 0;	/* verbose mode defaults to off */int fd;			/* file descriptor of block device */int cluster_size = 0;	/* cluster size in bytes */int sector_size = 512;	/* sector size in bytes */long sect_per_trk = 0;	/* sectors per track */int heads = 0;		/* heads */long dev_size;		/* size of device in 512 byte blocks */long max_lcn;		/* largest LCN */long mft_lcn = 1;	/* LCN of MFT */long mftmirr_lcn;	/* LCN of MFT mirror */int file_rec_size;	/* FILE record size in clusters */int indx_buf_size;	/* index buffer size in clusters */char *vol_label="";	/* volume label */ntfs_volume *vol;	/* structure representing volume */ntfs_inode *mft_ino;	/* inode struct for $MFT */ntfs_inode *root_ino;	/* inode struct for root */ntfs_inode *boot_ino;	/* inode struct for $Boot */void verbose( const char *fmt, ... ){	va_list args;	if( verbose_flag ) {		va_start( args, fmt );		vprintf( fmt, args );		fflush( stdout );		va_end( args );	}}void iso8859_2_uni( char *dest, const char *src ){	int i, len;	len = strlen( src );	for( i = 0; i < len; i++ ) {		*dest++ = *src++;		*dest++ = '\0';	}}void get_blkdev_info( void ){	if( ioctl( fd, BLKGETSIZE, &dev_size ) ) {		fprintf( stderr, "Couldn't get device size: %s\n",			strerror( errno ) );	}		if( !cluster_size ) {		if( dev_size ) {			if( dev_size < 512 * 1024 * 2 )				cluster_size = sector_size;			else if( dev_size < 1024 * 1024 * 2 )				cluster_size = 1024;			else if( dev_size < 2048 * 1024 * 2 )				cluster_size = 2048;			else				cluster_size = 4096;		} else			cluster_size = 1024;	}	if( cluster_size < sector_size )		cluster_size = sector_size;	printf( "Sector size:\t\t\t%d\n", sector_size );	printf( "Cluster size:\t\t\t%d\n", cluster_size );	if( cluster_size > 4096 )		printf( "Warning: large cluster sizes may cause problems with			compression.\n" );	printf( "Device size:\t\t\t%ld sectors (%ld clusters)\n", dev_size			* ( sector_size / 512 ), dev_size *			( cluster_size / 512 ) );	file_rec_size = max( 1024 / cluster_size, 1 );	printf( "FILE record size:\t\t%d clusters (%ld bytes)\n", file_rec_size,		(long)file_rec_size * (long)cluster_size );	indx_buf_size = max( 2048 / cluster_size, 1 );	verbose( "INDX buffer size:\t\t%d clusters (%ld bytes)\n", indx_buf_size,		(long)indx_buf_size * (long)cluster_size );	max_lcn = ( dev_size / ( cluster_size / 512 ) ) - 1;	verbose( "Maximum cluster number:\t\t%ld\n", max_lcn );	printf( "MFT starts at cluster:\t\t%ld\n", mft_lcn );	mftmirr_lcn = max_lcn - ( file_rec_size * 4 ) + 1;		printf( "Mirror of MFT at cluster:\t%ld\n", mftmirr_lcn );	printf( "\n" );}ntfs_inode *add_mft_entry( int ino ){	char *mftent;	ntfs_inode *new_ino;	/* allocate mem for MFT entry */	mftent = calloc( file_rec_size, cluster_size );	ntfs_fill_mft_header( (ntfs_u8 *)mftent, file_rec_size * cluster_size,		cluster_size, 0 );	/* insert fix ups */	ntfs_insert_fixups( (unsigned char *)mftent, sector_size );	/* move to correct position in MFT */	lseek( fd, ( mft_lcn * cluster_size ) + ( ino * file_rec_size *		cluster_size ), SEEK_SET );	/* write it */	write( fd, mftent, file_rec_size * cluster_size );	free( mftent );	/* read it back */	new_ino = (ntfs_inode *)ntfs_malloc( sizeof( ntfs_inode ) );	ntfs_init_inode( new_ino, vol, ino );	return new_ino;}void add_boot_file( void ){	ntfs_attribute *attr;	ntfs_runlist *rl;	boot_ino = add_mft_entry( FILE_BOOT );	ntfs_create_attr( boot_ino, ATTR_DATA, NULL, NULL, 0, &attr );	rl = ntfs_malloc( sizeof( ntfs_runlist ) );	attr->resident = 0;	attr->allocated = attr->initialized = attr->size = 1 * cluster_size;	rl->len = 1;	rl->cluster = 0;			/* boot cluster at LCN 0 */	attr->d.r.runlist = rl; attr->d.r.len = 1;	/* flush to disk */	verbose( "Writing MFT entry for $Boot (%d)...", FILE_BOOT );	ntfs_update_inode( boot_ino );	verbose( "done.\n" );}ntfs_attribute *create_name_attr( char *name, int hidden ){	ntfs_attribute *attr;	char *data;	attr = calloc( sizeof( ntfs_attribute ), 1 );	data = calloc( 0x42 + strlen( name ) * 2, 1 );	attr->d.data = data; attr->size = 0x42 + strlen( name ) * 2;	iso8859_2_uni( data+0x42, name );	NTFS_PUTU8( data + 0x40, strlen( name ) );	/* file name len */		NTFS_PUTU8( data + 0x41, 0 );			/* POSIX name space */	NTFS_PUTU64( data + 0x38, 0x20 |		( hidden ? 0x02 : 0 ) );		/* Arch + maybe hidden */	/* times */	NTFS_PUTU64( data + 0x8, ntfs_unixutc2ntutc( time( NULL ) ) );	NTFS_PUTU64( data + 0x10, ntfs_unixutc2ntutc( time( NULL ) ) );	NTFS_PUTU64( data + 0x18, ntfs_unixutc2ntutc( time( NULL ) ) );	NTFS_PUTU64( data + 0x20, ntfs_unixutc2ntutc( time( NULL ) ) );	return attr;}	void dispose_temp_name( ntfs_attribute *attr ){	free( attr->d.data );	free( attr );}	void add_root_ent( char *name, ntfs_inode *ino ){	ntfs_attribute *attr = create_name_attr( name, 1 );	verbose( "Adding root entry `%s' for inode %d...", name, ino->i_number );		ntfs_dir_add( root_ino, ino, attr );	ntfs_update_inode( root_ino );	dispose_temp_name( attr );	verbose( "done.\n" );}void init_volume( void ){	ntfs_attribute *attr;	ntfs_inode *vol_ino;	char *vol_label_uni;	char vol_info[0xb];	vol_ino = add_mft_entry( FILE_VOLUME );	/* add volume label */	vol_label_uni = malloc( strlen( vol_label ) * 2 );	iso8859_2_uni( vol_label_uni, vol_label );	ntfs_create_attr( vol_ino, ATTR_VOLUME_NAME, NULL, vol_label_uni,		strlen( vol_label ) * 2, &attr );	/* add volume information */	ntfs_create_attr( vol_ino, ATTR_VOLUME_INFORMATION, NULL, vol_info,		0xb, &attr );		ntfs_update_inode( vol_ino );	add_root_ent( "$Volume", vol_ino );	free( vol_label_uni );	free( vol_ino );}struct attrdef {	const char *label;	ntfs_u64 type, flags;	ntfs_u64 min_size, max_size;};struct attrdef attrdefs[] = {	{ "$STANDARD_INFORMATION", ATTR_STANDARD_INFORMATION, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$ATTRIBUTE_LIST", ATTR_ATTRIBUTE_LIST, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$FILE_NAME", ATTR_FILE_NAME, AFLAG_INDEXABLE | AFLAG_NONRESIDENT,		ASIZE_MIN, ASIZE_MAX }, 	{ "$VOLUME_VERSION", ATTR_VOLUME_VERSION, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$SECURITY_DESCRIPTOR", ATTR_SECURITY_DESCRIPTOR, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$VOLUME_NAME", ATTR_VOLUME_NAME, AFLAG_INDEXABLE | AFLAG_NONRESIDENT,		ASIZE_MIN, ASIZE_MAX }, 	{ "$VOLUME_INFORMATION", ATTR_VOLUME_INFORMATION, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$DATA", ATTR_DATA, AFLAG_INDEXABLE | AFLAG_NONRESIDENT, ASIZE_MIN,		ASIZE_MAX} , 	{ "$INDEX_ROOT", ATTR_INDEX_ROOT, AFLAG_INDEXABLE | AFLAG_NONRESIDENT,		ASIZE_MIN, ASIZE_MAX }, 	{ "$INDEX_ALLOCATION", ATTR_INDEX_ALLOCATION, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$BITMAP", ATTR_BITMAP, AFLAG_INDEXABLE | AFLAG_NONRESIDENT, ASIZE_MIN,		 ASIZE_MAX }, 	{ "$SYMBOLIC_LINK", ATTR_SYMBOLIC_LINK, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$EA_INFORMATION", ATTR_EA_INFORMATION, AFLAG_INDEXABLE |		AFLAG_NONRESIDENT, ASIZE_MIN, ASIZE_MAX }, 	{ "$EA", ATTR_EA, AFLAG_INDEXABLE | AFLAG_NONRESIDENT, ASIZE_MIN,		ASIZE_MAX }};int num_attrdefs = sizeof( attrdefs ) / sizeof( struct attrdef );void init_attrdef( void ){	ntfs_attribute *attr;	ntfs_inode *attr_ino;	char *attr_rec;	int i;	ntfs_io io;	attr_ino = add_mft_entry( FILE_ATTRDEF );	ntfs_create_attr( attr_ino, ATTR_DATA, NULL, NULL, 0, &attr );	/* we seem to need to do this before adding data to the inode?	   do we still need to do it after we finish writing the data? */	ntfs_update_inode( attr_ino );	attr_rec = malloc( 0xa0 );	io.fn_get = ntfs_get; io.fn_put = ntfs_put;	for( i = 0; i < num_attrdefs; i++ ) {		/* probably not needed, but filesystem dumps are easier to			read if unused space isn't full of crap */		memset( attr_rec, 0, 0xa0 );		iso8859_2_uni( attr_rec, attrdefs[i].label );		NTFS_PUTU16( attr_rec + strlen( attrdefs[i].label )			* 2, 0x0000 ); /* null-terminate */		NTFS_PUTU64( attr_rec + 0x80, attrdefs[i].type );		NTFS_PUTU64( attr_rec + 0x88, attrdefs[i].flags );		NTFS_PUTU64( attr_rec + 0x90, attrdefs[i].min_size );		NTFS_PUTU64( attr_rec + 0x98, attrdefs[i].max_size );					io.size = 0xa0; io.param = attr_rec;		verbose( "Adding attribute `%s', type 0x%Lx, flags 0x%Lx...",			attrdefs[i].label, attrdefs[i].type, attrdefs[i].flags );		ntfs_write_attr( attr_ino, ATTR_DATA, NULL, i * 0xa0, &io );		verbose( "done.\n" );	}	ntfs_update_inode( attr_ino );	add_root_ent( "$AttrDef", attr_ino );	free( attr_rec );	free( attr_ino );}void init_mftmirr( void ){	ntfs_attribute *attr;	ntfs_inode *mirr_ino;	char *mirror_data;	ntfs_io io;	ntfs_runlist rl;	mirr_ino = add_mft_entry( FILE_MFTMIRR );	ntfs_create_attr( mirr_ino, ATTR_DATA, NULL, NULL, 0, &attr );	/* force attribute to allocated area */	attr->resident = 0; attr->allocated = cluster_size * file_rec_size * 4;	attr->size = attr->initialized = 0; attr->d.r.runlist = &rl;	attr->d.r.len = 1;	rl.cluster = mftmirr_lcn; rl.len = attr->allocated / cluster_size;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区毛片| 制服丝袜日韩国产| 欧美精品v国产精品v日韩精品| 日韩无一区二区| ...xxx性欧美| 国产剧情一区二区| 日韩一区二区视频在线观看| 综合电影一区二区三区 | 玉米视频成人免费看| 久久精品国产精品亚洲精品| 91久久精品日日躁夜夜躁欧美| 精品人伦一区二区色婷婷| 亚洲国产精品自拍| 波多野结衣在线一区| 精品国产一二三区| 日韩精品国产欧美| 欧美天堂亚洲电影院在线播放| 国产日韩精品一区| 国产中文字幕一区| 日韩免费福利电影在线观看| 亚洲一区二区中文在线| av在线播放不卡| 中文文精品字幕一区二区| 久久国产精品色| 日韩视频在线一区二区| 亚洲第一主播视频| 日韩一区二区三区在线| 尤物av一区二区| 成人app在线| 国产女人18毛片水真多成人如厕| 免费人成网站在线观看欧美高清| 欧美日韩免费一区二区三区视频| 亚洲欧美日韩精品久久久久| av在线一区二区三区| 欧美极品aⅴ影院| 国产成人欧美日韩在线电影| 久久久99久久精品欧美| 久久99精品国产.久久久久| 日韩丝袜情趣美女图片| 精品在线播放午夜| 精品不卡在线视频| 国产精品99久久久久久似苏梦涵| 久久久亚洲午夜电影| 韩国成人精品a∨在线观看| 精品国产乱码久久久久久免费| 麻豆精品国产91久久久久久| 欧美成人女星排名| 国产麻豆成人传媒免费观看| 国产丝袜欧美中文另类| 床上的激情91.| 中文字幕一区二区三区四区不卡| 色综合久久久网| 亚洲高清免费视频| 777亚洲妇女| 国产一区二区三区四区五区入口 | 国产91丝袜在线观看| 中文字幕欧美国产| 欧美在线观看视频在线| 亚洲成年人网站在线观看| 欧美成人国产一区二区| 成人三级在线视频| 亚洲大片在线观看| 久久网站热最新地址| 成人av资源在线观看| 亚洲成a人片在线不卡一二三区| 91精品国产一区二区人妖| 国产风韵犹存在线视精品| 亚洲欧美在线另类| 91精品国产综合久久精品| 国产精品伊人色| 一区二区免费看| 精品久久人人做人人爰| 91丝袜美腿高跟国产极品老师 | 国产福利不卡视频| 综合色中文字幕| 日韩精品一区二区三区中文不卡| eeuss鲁一区二区三区| 天堂成人国产精品一区| 国产精品天干天干在线综合| 欧美日韩中文精品| 成人激情校园春色| 蜜臂av日日欢夜夜爽一区| 国产精品夫妻自拍| 欧美变态凌虐bdsm| 欧美在线你懂得| 大尺度一区二区| 免费欧美高清视频| 亚洲国产精品嫩草影院| 国产精品视频线看| 精品久久久久久综合日本欧美 | 99久久久精品免费观看国产蜜| 亚洲福利视频一区| 国产欧美日韩综合| 欧美一区二区三区四区五区 | 亚洲一区二区不卡免费| 国产亚洲欧洲一区高清在线观看| 色噜噜狠狠一区二区三区果冻| 久草热8精品视频在线观看| 亚洲午夜精品在线| 亚洲天堂网中文字| 日本一区二区电影| 久久夜色精品国产噜噜av| 欧美日韩久久久| 日本乱人伦一区| 国产精品99久久久久久宅男| 久久er精品视频| 青青青爽久久午夜综合久久午夜| 亚洲免费观看高清完整| 国产精品久久久久久久久久久免费看 | 韩国女主播一区| 日本美女一区二区三区视频| 亚洲午夜一二三区视频| 亚洲精品中文在线| 亚洲天堂福利av| 国产精品成人免费 | 欧美一区二区三区白人| 欧美性色黄大片手机版| 欧美亚洲综合在线| 欧美日韩在线一区二区| 欧美在线一区二区| 欧美三级蜜桃2在线观看| 欧美色成人综合| 欧美精品色综合| 91精品福利在线一区二区三区| 欧美日韩国产区一| 欧美精品日韩一区| 日韩一区二区视频| 精品国产成人在线影院 | 欧美性三三影院| 在线不卡免费欧美| 日韩欧美亚洲一区二区| 精品国产乱子伦一区| 久久精品亚洲精品国产欧美| 久久精品一区四区| 中文字幕一区二区日韩精品绯色| 中文字幕一区二区三区不卡| 亚洲蜜臀av乱码久久精品| 亚洲地区一二三色| 久久超碰97中文字幕| 成人爱爱电影网址| 欧美三级乱人伦电影| 欧美tk—视频vk| 国产精品日产欧美久久久久| 亚洲色图欧美激情| 日韩制服丝袜av| 国产激情一区二区三区四区 | 亚洲一区二区视频| 日韩不卡手机在线v区| 国产一区二区在线视频| 91麻豆.com| 日韩欧美你懂的| 国产精品国产自产拍高清av王其| 亚洲国产成人av网| 韩国中文字幕2020精品| 色婷婷精品大在线视频| 欧美一级欧美三级在线观看| 日本一区二区高清| 视频在线观看一区| www.66久久| 日韩视频一区二区三区在线播放| 国产精品欧美精品| 免费在线看成人av| 91美女片黄在线观看| 日韩一区二区免费视频| 国产精品久久久久久久岛一牛影视| 婷婷开心激情综合| 成人免费毛片a| 日韩一区二区视频在线观看| 日韩伦理av电影| 国产麻豆视频一区二区| 欧美人xxxx| 中文字幕一区二区三区av| 久久69国产一区二区蜜臀| 91久久线看在观草草青青| 久久精品亚洲乱码伦伦中文| 三级欧美在线一区| 日本精品裸体写真集在线观看 | 国模娜娜一区二区三区| 欧美性大战xxxxx久久久| 国产精品久99| 国产成人免费xxxxxxxx| 欧美精品tushy高清| 一区二区三区在线观看国产| 大尺度一区二区| 久久噜噜亚洲综合| 免费看日韩精品| 欧美另类久久久品| 一级精品视频在线观看宜春院 | 国产亚洲一区二区三区四区| 丝袜亚洲另类欧美| 欧洲人成人精品| 亚洲欧美在线视频观看| 成人黄色软件下载| 久久久99久久精品欧美| 国产在线看一区| 精品理论电影在线观看| 精品一区二区在线看| 欧美一区二区三区在线观看 | 欧美一级xxx| 亚洲一区二区三区四区在线免费观看|