<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EA%B9%80%ED%9D%AC%EC%84%B1%2FMTFREADER</id>
	<title>김희성/MTFREADER - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EA%B9%80%ED%9D%AC%EC%84%B1%2FMTFREADER"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%ED%9D%AC%EC%84%B1/MTFREADER&amp;action=history"/>
	<updated>2026-05-14T19:18:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%ED%9D%AC%EC%84%B1/MTFREADER&amp;diff=85335&amp;oldid=prev</id>
		<title>Maintenance script: Repair batch-0004 pages from live compare</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%ED%9D%AC%EC%84%B1/MTFREADER&amp;diff=85335&amp;oldid=prev"/>
		<updated>2026-03-27T00:37:17Z</updated>

		<summary type="html">&lt;p&gt;Repair batch-0004 pages from live compare&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:37, 27 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l57&quot;&gt;Line 57:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 57:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	PFILE_RECORD_HEADER $MFT;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	PFILE_RECORD_HEADER $MFT;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	BytesPerFileRecord = boot_block.ClustersPerFileRecord &amp;amp;lt; 0x80? boot_block.ClustersPerFileRecord* boot_block.SectorsPerCluster* boot_block.BytesPerSector : 1 &amp;amp;lt;&amp;amp;lt; (0x100 - boot_block.ClustersPerFileRecord);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	BytesPerFileRecord = boot_block.ClustersPerFileRecord &amp;amp;lt; 0x80? boot_block.ClustersPerFileRecord* boot_block.SectorsPerCluster* boot_block.BytesPerSector : 1 &amp;amp;lt;&amp;amp;lt; (0x100 - boot_block.ClustersPerFileRecord);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	$MFT = PFILE_RECORD_HEADER(new U8&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;BytesPerFileRecord&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	$MFT = PFILE_RECORD_HEADER(new U8&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;BytesPerFileRecord&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	if(!$MFT)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	if(!$MFT)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l98&quot;&gt;Line 98:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 98:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		case 0x80://$DATA&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		case 0x80://$DATA&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			MFT=PFILE_RECORD_HEADER(new U8&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;*((unsigned __int64*)((unsigned char*)$MFT+point+40))&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			MFT=PFILE_RECORD_HEADER(new U8&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;*((unsigned __int64*)((unsigned char*)$MFT+point+40))&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			if(!MFT)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			if(!MFT)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l141&quot;&gt;Line 141:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 141:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  				if(*((unsigned __int64*)((unsigned char*)point+40)))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  				if(*((unsigned __int64*)((unsigned char*)point+40)))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  					offset=(new U8&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;*((unsigned __int64*)((unsigned char*)point+40))&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  					offset=(new U8&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;*((unsigned __int64*)((unsigned char*)point+40))&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  				else&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  				else&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  					offset=0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  					offset=0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l310&quot;&gt;Line 310:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 310:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	for(i=0;i&amp;amp;lt;MFTLength*boot_block.BytesPerSector*boot_block.SectorsPerCluster/BytesPerFileRecord;i++)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	for(i=0;i&amp;amp;lt;MFTLength*boot_block.BytesPerSector*boot_block.SectorsPerCluster/BytesPerFileRecord;i++)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		if(	((unsigned char*)MFT+i*BytesPerFileRecord)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;0&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;!=&amp;#039;F&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		if(	((unsigned char*)MFT+i*BytesPerFileRecord)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;0&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;!=&amp;#039;F&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((unsigned char*)MFT+i*BytesPerFileRecord)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;1&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;!=&amp;#039;I&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((unsigned char*)MFT+i*BytesPerFileRecord)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;1&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;!=&amp;#039;I&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((unsigned char*)MFT+i*BytesPerFileRecord)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;2&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;!=&amp;#039;L&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((unsigned char*)MFT+i*BytesPerFileRecord)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;2&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;!=&amp;#039;L&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((unsigned char*)MFT+i*BytesPerFileRecord)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;3&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;!=&amp;#039;E&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((unsigned char*)MFT+i*BytesPerFileRecord)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;3&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;!=&amp;#039;E&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			continue;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			continue;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l391&quot;&gt;Line 391:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 391:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= 최종 수정 날짜 : 5/1 =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= 최종 수정 날짜 : 5/1 =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%ED%9D%AC%EC%84%B1/MTFREADER&amp;diff=45274&amp;oldid=prev</id>
		<title>imported&gt;hsebs at 08:49, 1 May 2012</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EA%B9%80%ED%9D%AC%EC%84%B1/MTFREADER&amp;diff=45274&amp;oldid=prev"/>
		<updated>2012-05-01T08:49:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= _mft_reader.h =&lt;br /&gt;
 #include&amp;quot;ntfs.h&amp;quot;&lt;br /&gt;
 class _MFT_READER&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 #define FILE_LOAD_ERROR 1&lt;br /&gt;
 #define OUT_OF_MEMORY_ERROR 2&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
 	HANDLE hVolume;&lt;br /&gt;
 	BOOT_BLOCK boot_block;&lt;br /&gt;
 	PFILE_RECORD_HEADER MFT;&lt;br /&gt;
 &lt;br /&gt;
 	U32 BytesPerFileRecord;&lt;br /&gt;
 	U32 cnt;&lt;br /&gt;
 	long MFTLength;&lt;br /&gt;
 &lt;br /&gt;
 	int ErrorCode;&lt;br /&gt;
 &lt;br /&gt;
 	void LoadMFT();&lt;br /&gt;
 	long ReadAttribute(FILE* fp, unsigned char* offset, long flag);&lt;br /&gt;
 	void ReadSector(U64 sector, U32 count, void* buffer);&lt;br /&gt;
 	__int64 ReadCluster(unsigned char* point,unsigned char* info);&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 	_MFT_READER&lt;br /&gt;
 		//(WCHAR* drive)&lt;br /&gt;
 		(char* drive)&lt;br /&gt;
 	{&lt;br /&gt;
 		ErrorCode=0;&lt;br /&gt;
 &lt;br /&gt;
 		hVolume = CreateFile(drive, GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE, 0,OPEN_EXISTING, 0, 0);&lt;br /&gt;
 		ReadFile(hVolume, &amp;amp;amp;boot_block, sizeof(boot_block), &amp;amp;amp;cnt, 0);&lt;br /&gt;
 &lt;br /&gt;
 		if(!GetLastError())&lt;br /&gt;
 			LoadMFT();&lt;br /&gt;
 		else&lt;br /&gt;
 			ErrorCode=FILE_LOAD_ERROR;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 //	void ReLoadMFT(char* drive);&lt;br /&gt;
 	int LastErrorCode();							//최근에 일어난 클래스 내부의 에러를 반환한다.&lt;br /&gt;
 	void MakeBinaryFile(char* filename);			//MFT를 Binary 그대로 저장한다.&lt;br /&gt;
 	void MakeTextFile(char* filename, long flag);	//MFT 속성을 text 파일로 저장.&lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
= _mft_reader_private.cpp =&lt;br /&gt;
 #include&amp;quot;_MFT_READER.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 void _MFT_READER::LoadMFT()&lt;br /&gt;
 {&lt;br /&gt;
 	unsigned __int64 point,i,j,k,temp;&lt;br /&gt;
 	unsigned __int64 HeaderSize;&lt;br /&gt;
 	unsigned __int64 offset;&lt;br /&gt;
 &lt;br /&gt;
 	PFILE_RECORD_HEADER $MFT;&lt;br /&gt;
 	BytesPerFileRecord = boot_block.ClustersPerFileRecord &amp;amp;lt; 0x80? boot_block.ClustersPerFileRecord* boot_block.SectorsPerCluster* boot_block.BytesPerSector : 1 &amp;amp;lt;&amp;amp;lt; (0x100 - boot_block.ClustersPerFileRecord);&lt;br /&gt;
 	$MFT = PFILE_RECORD_HEADER(new U8[BytesPerFileRecord]);&lt;br /&gt;
 	if(!$MFT)&lt;br /&gt;
 	{&lt;br /&gt;
 		ErrorCode=OUT_OF_MEMORY_ERROR;&lt;br /&gt;
 		return;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	ReadSector((boot_block.MftStartLcn) * boot_block.SectorsPerCluster,	BytesPerFileRecord / boot_block.BytesPerSector, $MFT);&lt;br /&gt;
 &lt;br /&gt;
 	for(j=1;j&amp;amp;lt;=*((unsigned short*)((unsigned char*)$MFT+6));j++)&lt;br /&gt;
 	{&lt;br /&gt;
 		if(	*((char*)$MFT+j*boot_block.BytesPerSector-2)==&lt;br /&gt;
 			*((char*)$MFT+*((unsigned short*)((unsigned char*)$MFT+4)))&lt;br /&gt;
 			&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
 			*((char*)$MFT+j*boot_block.BytesPerSector-1)==&lt;br /&gt;
 			*((char*)$MFT+*((unsigned short*)((unsigned char*)$MFT+4))+1)&lt;br /&gt;
 			)&lt;br /&gt;
 		{&lt;br /&gt;
 		*((char*)$MFT+j*boot_block.BytesPerSector-2)=&lt;br /&gt;
 			*((char*)$MFT+*((unsigned short*)((unsigned char*)$MFT+4))+2*j);&lt;br /&gt;
 		*((char*)$MFT+j*boot_block.BytesPerSector-1)=&lt;br /&gt;
 			*((char*)$MFT+*((unsigned short*)((unsigned char*)$MFT+4))+2*j+1);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	point=*((unsigned short*)((unsigned char*)$MFT+20));//Offset으로 포인터 이동&lt;br /&gt;
 	while(*((unsigned long*)((unsigned char*)$MFT+point))!=0xFFFFFFFF)&lt;br /&gt;
 	{&lt;br /&gt;
 		/*&lt;br /&gt;
 			*((unsigned char*)MFT+point+9) = Attribute Name Size&lt;br /&gt;
 			Attribute Header size : Resident=24 / Non-resident=64&lt;br /&gt;
 		*/&lt;br /&gt;
 		if(*((unsigned char*)$MFT+point+8))&lt;br /&gt;
 			HeaderSize=64+*((unsigned char*)$MFT+point+9);&lt;br /&gt;
 		else&lt;br /&gt;
 			HeaderSize=24+*((unsigned char*)$MFT+point+9);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		switch(*((unsigned long*)((unsigned char*)$MFT+point)))&lt;br /&gt;
 		{&lt;br /&gt;
 		case 0x80://$DATA&lt;br /&gt;
 			MFT=PFILE_RECORD_HEADER(new U8[*((unsigned __int64*)((unsigned char*)$MFT+point+40))]);&lt;br /&gt;
 			if(!MFT)&lt;br /&gt;
 			{&lt;br /&gt;
 				delete $MFT;&lt;br /&gt;
 				ErrorCode=OUT_OF_MEMORY_ERROR;&lt;br /&gt;
 				return;&lt;br /&gt;
 			}&lt;br /&gt;
 			i=*(short*)((unsigned char*)$MFT+point+32);&lt;br /&gt;
 			MFTLength=ReadCluster((unsigned char*)$MFT+point+i,(unsigned char*)MFT);&lt;br /&gt;
 			break;&lt;br /&gt;
 		}&lt;br /&gt;
 		point+=*((unsigned long*)((unsigned char*)$MFT+point+4));&lt;br /&gt;
 	}&lt;br /&gt;
 	delete $MFT;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void _MFT_READER::ReadSector(U64 sector, U32 count, void* buffer)&lt;br /&gt;
 {&lt;br /&gt;
 	ULARGE_INTEGER offset;&lt;br /&gt;
 	OVERLAPPED overlap = {0};&lt;br /&gt;
 	U32 n;&lt;br /&gt;
 	&lt;br /&gt;
 	offset.QuadPart = sector * boot_block.BytesPerSector;&lt;br /&gt;
 	overlap.Offset = offset.LowPart; &lt;br /&gt;
 	overlap.OffsetHigh = offset.HighPart;&lt;br /&gt;
 	ReadFile(hVolume, buffer, count * boot_block.BytesPerSector, &amp;amp;amp;n, &amp;amp;amp;overlap);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 long _MFT_READER::ReadAttribute(FILE* fp, unsigned char* point, long flag)&lt;br /&gt;
 {&lt;br /&gt;
 	unsigned char* offset=0;&lt;br /&gt;
 	SYSTEMTIME time;&lt;br /&gt;
 	int i,sub_mask;&lt;br /&gt;
 &lt;br /&gt;
 	sub_mask=1;&lt;br /&gt;
 	for(i=1;i&amp;amp;lt;25;i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		if(sub_mask&amp;amp;amp;flag &amp;amp;amp;&amp;amp;amp; *(long*)point==0x10*i)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(*((unsigned char*)point+8))&lt;br /&gt;
 			{&lt;br /&gt;
 				if(*((unsigned __int64*)((unsigned char*)point+40)))&lt;br /&gt;
 					offset=(new U8[*((unsigned __int64*)((unsigned char*)point+40))]);&lt;br /&gt;
 				else&lt;br /&gt;
 					offset=0;&lt;br /&gt;
 				if(offset)&lt;br /&gt;
 					ReadCluster(point+(*(short*)((unsigned char*)point+32)),offset);&lt;br /&gt;
 			}&lt;br /&gt;
 			else&lt;br /&gt;
 			{&lt;br /&gt;
 				offset=point+24+*((unsigned char*)point+9);&lt;br /&gt;
 			}&lt;br /&gt;
 			&lt;br /&gt;
 		}&lt;br /&gt;
 		sub_mask&amp;amp;lt;&amp;amp;lt;=1;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	if(!offset)&lt;br /&gt;
 		return *(long*)((unsigned char*)point+4);&lt;br /&gt;
 &lt;br /&gt;
 	&lt;br /&gt;
 &lt;br /&gt;
 	if(!((*(long*)point)&amp;amp;amp;0xFFFFFF00))&lt;br /&gt;
 	{&lt;br /&gt;
 		switch(*(long*)point)&lt;br /&gt;
 		{&lt;br /&gt;
 			case 0x10://Standard Information&lt;br /&gt;
 				fprintf(fp,&amp;quot;Attribute type : Standard Information\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 				FileTimeToSystemTime((FILETIME*)offset,&amp;amp;amp;time);&lt;br /&gt;
 				fprintf(fp,&amp;quot;File 생성 %d년 %d월 %d일\n&amp;quot;,time.wYear,time.wMonth,time.wDay);&lt;br /&gt;
 &lt;br /&gt;
 				FileTimeToSystemTime((FILETIME*)(offset+8),&amp;amp;amp;time);&lt;br /&gt;
 				fprintf(fp,&amp;quot;File 수정 %d년 %d월 %d일\n&amp;quot;,time.wYear,time.wMonth,time.wDay);&lt;br /&gt;
 &lt;br /&gt;
 				FileTimeToSystemTime((FILETIME*)(offset+24),&amp;amp;amp;time);&lt;br /&gt;
 				fprintf(fp,&amp;quot;File 접근 %d년 %d월 %d일\n&amp;quot;,time.wYear,time.wMonth,time.wDay);&lt;br /&gt;
 &lt;br /&gt;
 				break;&lt;br /&gt;
 &lt;br /&gt;
 			case 0x20://Attribute List&lt;br /&gt;
 				fprintf(fp,&amp;quot;Attribute type : Attribute list\n&amp;quot;);&lt;br /&gt;
 				break;&lt;br /&gt;
 &lt;br /&gt;
 			case 0x30://File Name&lt;br /&gt;
 				fprintf(fp,&amp;quot;Attribute type : File Name\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 				FileTimeToSystemTime((FILETIME*)(offset+8),&amp;amp;amp;time);&lt;br /&gt;
 				fprintf(fp,&amp;quot;File 생성 %d년 %d월 %d일\n&amp;quot;,time.wYear,time.wMonth,time.wDay);&lt;br /&gt;
 &lt;br /&gt;
 				FileTimeToSystemTime((FILETIME*)(offset+16),&amp;amp;amp;time);&lt;br /&gt;
 				fprintf(fp,&amp;quot;File 이름 수정 %d년 %d월 %d일\n&amp;quot;,time.wYear,time.wMonth,time.wDay);&lt;br /&gt;
 &lt;br /&gt;
 				FileTimeToSystemTime((FILETIME*)(offset+32),&amp;amp;amp;time);&lt;br /&gt;
 				fprintf(fp,&amp;quot;File 접근 %d년 %d월 %d일\n&amp;quot;,time.wYear,time.wMonth,time.wDay);&lt;br /&gt;
 &lt;br /&gt;
 				fprintf(fp,&amp;quot;File Name Size : %d\n&amp;quot;,*((unsigned char*)offset+64));	&lt;br /&gt;
 				fprintf(fp,&amp;quot;File NameSpace : &amp;quot;);&lt;br /&gt;
 				switch(*((unsigned char*)offset+65))&lt;br /&gt;
 				{&lt;br /&gt;
 				case 0:&lt;br /&gt;
 					fprintf(fp,&amp;quot;POSIX\n&amp;quot;);&lt;br /&gt;
 					break;&lt;br /&gt;
 				case 1:&lt;br /&gt;
 					fprintf(fp,&amp;quot;Win32\n&amp;quot;);&lt;br /&gt;
 					break;&lt;br /&gt;
 				case 2:&lt;br /&gt;
 					fprintf(fp,&amp;quot;DOS\n&amp;quot;);&lt;br /&gt;
 					break;&lt;br /&gt;
 				case 3:&lt;br /&gt;
 					fprintf(fp,&amp;quot;Win32 &amp;amp;amp; DOS\n&amp;quot;);&lt;br /&gt;
 					break;&lt;br /&gt;
 				default:&lt;br /&gt;
 					fprintf(fp,&amp;quot;Unkown\n&amp;quot;);&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 &lt;br /&gt;
 				fprintf(fp,&amp;quot;File Name : &amp;quot;);&lt;br /&gt;
 				fwprintf(fp,L&amp;quot;%s&amp;quot;,((unsigned char*)offset+66));&lt;br /&gt;
 				fprintf(fp,&amp;quot;\n&amp;quot;);&lt;br /&gt;
 				break;&lt;br /&gt;
 &lt;br /&gt;
 			case 0x40://Volume Version&lt;br /&gt;
 				break;&lt;br /&gt;
 &lt;br /&gt;
 			case 0x50://Object ID&lt;br /&gt;
 				break;&lt;br /&gt;
 &lt;br /&gt;
 			case 0x60://Security&lt;br /&gt;
 				break;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	if(*((unsigned char*)point+8))&lt;br /&gt;
 	{&lt;br /&gt;
 		delete offset;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	if(*(long*)((unsigned char*)point+4))&lt;br /&gt;
 		return *(long*)((unsigned char*)point+4);&lt;br /&gt;
 	else&lt;br /&gt;
 		return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //*&lt;br /&gt;
 __int64 _MFT_READER::ReadCluster(unsigned char* point,unsigned char* info)&lt;br /&gt;
 {&lt;br /&gt;
 		int i=0,j=0,k;&lt;br /&gt;
 		__int64 offset=0,temp;&lt;br /&gt;
 		__int64 length=0;&lt;br /&gt;
 		while(*(point+i))&lt;br /&gt;
 		{&lt;br /&gt;
 			length=0;&lt;br /&gt;
 			for(k=0;k&amp;amp;lt;(*(point+i)&amp;amp;amp;0x0F);k++)&lt;br /&gt;
 			{&lt;br /&gt;
 				length&amp;amp;lt;&amp;amp;lt;=8;&lt;br /&gt;
 				length+=*((point+i)+(*(point+i)&amp;amp;amp;0x0F)-k);&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 			temp=offset;	//*오프셋값은 이전 값들과 합계로 계산됨.&lt;br /&gt;
 			offset=0;&lt;br /&gt;
 			for(;k&amp;amp;lt;(*(point+i)&amp;amp;amp;0x0F)+((*(point+i)&amp;amp;amp;0xF0)&amp;amp;gt;&amp;amp;gt;4);k++)&lt;br /&gt;
 			{&lt;br /&gt;
 				offset&amp;amp;lt;&amp;amp;lt;=8;&lt;br /&gt;
 				offset+=*((point+i)+(*(point+i)&amp;amp;amp;0x0F)+((*(point+i)&amp;amp;amp;0xF0)&amp;amp;gt;&amp;amp;gt;4)-k+(*(point+i)&amp;amp;amp;0x0F));&lt;br /&gt;
 			}&lt;br /&gt;
 //*&lt;br /&gt;
 			if(offset&amp;amp;amp;(0x80&amp;amp;lt;&amp;amp;lt;(8*(((*(point+i)&amp;amp;amp;0xF0)&amp;amp;gt;&amp;amp;gt;4)-1))) &amp;amp;amp;&amp;amp;amp; ((*(point+i)&amp;amp;amp;0xF0)&amp;amp;gt;&amp;amp;gt;4)&amp;amp;lt;8)&lt;br /&gt;
 			{&lt;br /&gt;
 				offset=offset^(0x80&amp;amp;lt;&amp;amp;lt;(8*(((*(point+i)&amp;amp;amp;0xF0)&amp;amp;gt;&amp;amp;gt;4)-1)));&lt;br /&gt;
 				offset=-offset;&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 //*/&lt;br /&gt;
 			offset+=temp;&lt;br /&gt;
 &lt;br /&gt;
 			ReadSector(offset * boot_block.SectorsPerCluster,&lt;br /&gt;
 				length * boot_block.SectorsPerCluster,&lt;br /&gt;
 				info+j*boot_block.BytesPerSector*boot_block.SectorsPerCluster);&lt;br /&gt;
 &lt;br /&gt;
 			i+=(*(point+i)&amp;amp;amp;0x0F)+((*(point+i)&amp;amp;amp;0xF0)&amp;amp;gt;&amp;amp;gt;4)+1;&lt;br /&gt;
 			j+=length;&lt;br /&gt;
 		}&lt;br /&gt;
 		return j;&lt;br /&gt;
 }&lt;br /&gt;
 //*/&lt;br /&gt;
&lt;br /&gt;
= _mft_reader_public.cpp =&lt;br /&gt;
 #include&amp;quot;_MFT_READER.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 void _MFT_READER::MakeBinaryFile(char* filename)&lt;br /&gt;
 {&lt;br /&gt;
 	FILE* fp;&lt;br /&gt;
 	fp=fopen(filename,&amp;quot;w&amp;quot;);&lt;br /&gt;
 	if(!fp)&lt;br /&gt;
 	{&lt;br /&gt;
 		printf(&amp;quot;error&amp;quot;);&lt;br /&gt;
 		return;&lt;br /&gt;
 	}&lt;br /&gt;
 	fwrite((void*)MFT,BytesPerFileRecord,MFTLength,fp);&lt;br /&gt;
 	fclose(fp);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void _MFT_READER::MakeTextFile(char* filename, long flag)&lt;br /&gt;
 {&lt;br /&gt;
 	FILE *fp=fopen(filename,&amp;quot;w&amp;quot;);&lt;br /&gt;
 	long filecounter=0;&lt;br /&gt;
 	long i,j,k;&lt;br /&gt;
 &lt;br /&gt;
 	for(i=0;i&amp;amp;lt;MFTLength*boot_block.BytesPerSector*boot_block.SectorsPerCluster/BytesPerFileRecord;i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		if(	((unsigned char*)MFT+i*BytesPerFileRecord)[0]!=&amp;#039;F&amp;#039;&lt;br /&gt;
 			||&lt;br /&gt;
 			((unsigned char*)MFT+i*BytesPerFileRecord)[1]!=&amp;#039;I&amp;#039;&lt;br /&gt;
 			||&lt;br /&gt;
 			((unsigned char*)MFT+i*BytesPerFileRecord)[2]!=&amp;#039;L&amp;#039;&lt;br /&gt;
 			||&lt;br /&gt;
 			((unsigned char*)MFT+i*BytesPerFileRecord)[3]!=&amp;#039;E&amp;#039;&lt;br /&gt;
 			)&lt;br /&gt;
 			continue;&lt;br /&gt;
 &lt;br /&gt;
 		//하위 엔트리 필터링&lt;br /&gt;
 //		if(*((int*)((unsigned char*)MFT+i*BytesPerFileRecord+32)))&lt;br /&gt;
 //			continue;&lt;br /&gt;
 &lt;br /&gt;
 		filecounter++;&lt;br /&gt;
 &lt;br /&gt;
 		fprintf(fp,&amp;quot;MFT&amp;#039;s Signaturer : %s\n&amp;quot;, ((unsigned char*)MFT+i*BytesPerFileRecord));//+0x27);&lt;br /&gt;
 		fprintf(fp,&amp;quot;Number of this MFT Entry : 0x%02x%02x%02x%02x\n&amp;quot;&lt;br /&gt;
 			, *((unsigned char*)MFT+i*BytesPerFileRecord+47),*((unsigned char*)MFT+i*BytesPerFileRecord+46),&lt;br /&gt;
 			*((unsigned char*)MFT+i*BytesPerFileRecord+45),*((unsigned char*)MFT+i*BytesPerFileRecord+44));&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		//offset_array&lt;br /&gt;
 		for(j=1;j&amp;amp;lt;=*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+6));j++)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(	*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-2)==&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4)))&lt;br /&gt;
 				&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-1)==&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4))+1)&lt;br /&gt;
 				)&lt;br /&gt;
 			{&lt;br /&gt;
 			*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-2)=&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4))+2*j);&lt;br /&gt;
 			*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-1)=&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4))+2*j+1);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		j=*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+20));//Offset to First Attribute Header&lt;br /&gt;
 &lt;br /&gt;
 		while(!(*((unsigned long*)((unsigned char*)MFT+i*BytesPerFileRecord+j))&amp;amp;amp;0xFFFFFF00))&lt;br /&gt;
 		{&lt;br /&gt;
 			j+=ReadAttribute(fp,(unsigned char*)MFT+i*BytesPerFileRecord+j,flag);&lt;br /&gt;
 		}&lt;br /&gt;
 		fprintf(fp,&amp;quot;\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		//offset_array&lt;br /&gt;
 		for(j=1;j&amp;amp;lt;=*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+6));j++)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(	*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-2)==&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4))+2*j)&lt;br /&gt;
 				&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-1)==&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4))+2*j+1)&lt;br /&gt;
 				)&lt;br /&gt;
 			{&lt;br /&gt;
 			*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-2)=&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4)));&lt;br /&gt;
 			*((char*)MFT+i*BytesPerFileRecord+j*boot_block.BytesPerSector-1)=&lt;br /&gt;
 				*((char*)MFT+i*BytesPerFileRecord+*((unsigned short*)((unsigned char*)MFT+i*BytesPerFileRecord+4))+1);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 	fprintf(fp,&amp;quot;Bytes of Files : %d\n&amp;quot;,i*BytesPerFileRecord);&lt;br /&gt;
 	fprintf(fp,&amp;quot;A number of Files : %d\n&amp;quot;,filecounter);&lt;br /&gt;
 	fclose(fp);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int _MFT_READER::LastErrorCode()&lt;br /&gt;
 {&lt;br /&gt;
 	return ErrorCode;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= 최종 수정 날짜 : 5/1 =&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;hsebs</name></author>
	</entry>
</feed>