亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩在线三级| 91日韩一区二区三区| 欧美一级电影网站| 奇米四色…亚洲| xvideos.蜜桃一区二区| 国产在线麻豆精品观看| 国产亚洲人成网站| 91在线视频免费91| 亚洲尤物在线视频观看| 欧美猛男gaygay网站| 免播放器亚洲一区| 久久人人超碰精品| 91丝袜高跟美女视频| 香蕉成人啪国产精品视频综合网| 在线91免费看| 国产成人久久精品77777最新版本| 中文字幕高清一区| 欧洲精品一区二区| 久久成人免费网| 国产精品高潮呻吟| 欧美日韩一区二区三区在线| 久久国产精品99久久久久久老狼| 中文字幕 久热精品 视频在线| 色婷婷综合五月| 乱中年女人伦av一区二区| 中文字幕国产一区二区| 欧美日韩小视频| 国产二区国产一区在线观看| 一区二区三区在线视频播放| 欧美mv日韩mv亚洲| 色婷婷国产精品| 激情综合色综合久久| 亚洲欧洲三级电影| 91精品国产欧美一区二区成人| 成人av在线观| 五月天一区二区三区| 欧美经典三级视频一区二区三区| 欧美日韩午夜精品| 成人av在线播放网址| 日产国产高清一区二区三区 | 亚洲欧洲日韩av| 欧美精品乱码久久久久久| 国产成a人亚洲| 日韩avvvv在线播放| 亚洲天堂免费在线观看视频| 欧美sm美女调教| 色国产精品一区在线观看| 国产盗摄视频一区二区三区| 日本欧美在线观看| 亚洲精品日日夜夜| 亚洲国产精品成人综合色在线婷婷| 欧美精品在线观看播放| 色综合久久中文综合久久牛| 国内成+人亚洲+欧美+综合在线| 亚洲午夜视频在线观看| 国产精品久久久久久久久动漫| 精品免费一区二区三区| 欧美电影在哪看比较好| 色偷偷久久一区二区三区| 成人av电影免费在线播放| 国内精品伊人久久久久影院对白| 婷婷开心久久网| 亚洲自拍偷拍麻豆| 一区二区三区在线观看动漫| 亚洲成人免费电影| 亚洲女女做受ⅹxx高潮| 欧美国产欧美综合| 国产亚洲精品aa午夜观看| 久久夜色精品国产噜噜av| 欧美一级日韩免费不卡| 欧美高清视频不卡网| 欧美系列在线观看| 欧美日韩在线免费视频| 欧美系列亚洲系列| 欧美在线视频日韩| 精品视频1区2区| 欧美日韩dvd在线观看| 欧美色图第一页| 欧美日韩亚洲另类| 制服丝袜av成人在线看| 欧美一区二区三区小说| 3d动漫精品啪啪| 日韩欧美一区二区免费| 91精品午夜视频| 日韩久久精品一区| 久久久久久一二三区| 久久九九久久九九| 中文字幕一区二区三| 日韩理论片一区二区| 亚洲精品综合在线| 水野朝阳av一区二区三区| 欧美a级理论片| 黑人精品欧美一区二区蜜桃 | 欧美在线视频日韩| 欧美巨大另类极品videosbest| 538在线一区二区精品国产| 日韩一区二区在线观看| 久久久综合视频| 国产精品拍天天在线| 亚洲精品成人在线| 免费在线观看一区| 成人午夜电影小说| 在线亚洲高清视频| 欧美大片在线观看| 国产亚洲综合在线| 一区二区三区在线观看网站| 日韩制服丝袜先锋影音| 国产精品一区三区| 日本道色综合久久| 欧美成人一区二区三区| 国产精品久99| 日本成人在线视频网站| 国产成人福利片| 欧洲国内综合视频| 久久久91精品国产一区二区三区| 亚洲视频电影在线| 极品少妇一区二区| 91传媒视频在线播放| 久久免费美女视频| 亚洲一区二区三区美女| 国产一区二区三区四| 欧美午夜精品一区二区三区| 久久综合九色综合欧美98| 亚洲精品乱码久久久久久久久| 久久精品国产精品青草| 91在线无精精品入口| 欧美sm极限捆绑bd| 亚洲午夜精品在线| 成人免费毛片app| 日韩欧美视频在线| 一区二区三区欧美| 国产91精品露脸国语对白| 717成人午夜免费福利电影| 国产精品免费观看视频| 理论电影国产精品| 欧洲一区在线观看| 国产精品美女久久久久av爽李琼| 蜜臀av性久久久久av蜜臀妖精| 91在线观看视频| 国产午夜精品一区二区三区嫩草| 成人小视频免费观看| 日韩女优毛片在线| 亚洲国产sm捆绑调教视频 | www.久久久久久久久| 51精品久久久久久久蜜臀| 最新国产成人在线观看| 国产一区二区在线免费观看| 欧美精品一二三| 亚洲综合区在线| 99精品视频一区二区| 国产亚洲福利社区一区| 九九视频精品免费| 337p亚洲精品色噜噜狠狠| 夜夜夜精品看看| 日本久久电影网| 一色桃子久久精品亚洲| 成人免费观看视频| 国产欧美一区二区精品久导航 | 日本久久一区二区| 亚洲欧洲成人自拍| 波多野结衣亚洲一区| 国产视频一区不卡| 国产传媒一区在线| 久久久国产午夜精品| 国产精品1区2区| 久久亚洲精品小早川怜子| 久久精品99国产精品| 欧美不卡一二三| 韩国成人福利片在线播放| 亚洲精品老司机| 一本色道久久综合亚洲91| 一区二区三区中文字幕| 91视频国产观看| 亚洲激情六月丁香| 欧洲一区二区三区在线| 亚洲二区在线观看| 91精品国产综合久久精品app| 午夜精品久久久久久久99樱桃 | 成人在线综合网| 中文字幕久久午夜不卡| 99久久伊人精品| 亚洲最大色网站| 欧美精品18+| 精品一区二区三区免费毛片爱| 精品国产精品网麻豆系列| 国产精品一区二区在线观看不卡| 久久久久9999亚洲精品| av综合在线播放| 亚洲大型综合色站| 欧美va天堂va视频va在线| 国产成人午夜99999| 国产精品久久久久久久久果冻传媒 | 欧美一区二区三区思思人| 黄页视频在线91| ●精品国产综合乱码久久久久 | 欧美性色黄大片手机版| 日本亚洲三级在线| 日本一区二区免费在线 | 国产一区二区三区日韩| 一区在线播放视频|