मेरे पास कुछ कोड है जो NTFS डिस्क पर $MFT को पार्स कर रहा है।

सभी पूरी तरह से काम करते हैं, सिवाय इसके कि मुट्ठी भर रिकॉर्ड (लगभग ६०००० में से १०) फ़ाइल नाम में गलत वर्ण लौटाते हैं। नीचे स्क्रीनशॉट देखें:

enter image description here

बाइट '0E' द्वारा परिभाषित यूनिकोड वर्ण पर ध्यान दें। अन्य सभी अनुप्रयोगों में, यह एक अंडरस्कोर वर्ण है। नीचे देखें:

enter image description here

यहां तक ​​​​कि युक्त निर्देशिका की $INDEX_ROOT विशेषता में, इसका सही नाम है:

enter image description here

क्या मैं $FILE_NAME विशेषता को गलत पढ़ रहा हूं? या क्या मुझे इसकी उपेक्षा करनी चाहिए और हमेशा नाम का उपयोग निर्देशिका के $INDEX_ROOT विशेषता से करें? यह थोड़ा पीछे की ओर लगता है?

नोट: यह हमेशा '0E' नहीं होता है, और हमेशा यह फ़ाइल नाम नहीं होता है, लेकिन ऐसा लगता है कि हमेशा केवल एक ही वर्ण होता है जो प्रत्येक 'खराब' रिकॉर्ड में गलत होता है।

0
GoldieLocks 22 फरवरी 2019, 16:56

1 उत्तर

सबसे बढ़िया उत्तर

भविष्य में किसी के लिए भी, मैं इस लिंक को पढ़ते हुए उत्तर में ठोकर खाई :

फ़िक्सअप सरणी ऑफ़सेट 0x30 से शुरू होती है। पहले दो बाइट्स (0x 8c 06) रिकॉर्ड के प्रत्येक सेक्टर में अंतिम दो बाइट्स हैं। सभी क्षेत्रों में बाइट्स के वास्तविक अंतिम जोड़े को फिक्सअप सरणी में संग्रहीत किया जाता है, अर्थात् सभी शून्य।

यह देखते हुए कि आपके मान भिन्न होंगे, लेकिन आप देखेंगे कि आपके 'खराब' फ़ाइल नाम मौजूद हैं जब भी फ़ाइल नाम विशेषता एक सेक्टर सीमा में फैली हुई है (जैसा कि WinHex से उपरोक्त स्क्रीनशॉट में है)। एक बार सेक्टर बाइट्स के अंत को संबंधित फ़िक्सअप बाइट्स से बदल दिया जाता है, तो फ़ाइल नाम सही होते हैं।

0
GoldieLocks 22 फरवरी 2019, 15:53