मैं एक सी # .Net ऐप लिख रहा हूं जो विंडोज़ पर चलाने के लिए है जिसे हटाने योग्य डिस्क की एक छवि लेने और इसे लिनक्स लाइव यूएसबी पर चक करने की आवश्यकता है। लाइव USB लक्ष्य मशीन और जूते में डाला जाता है, शुरू पर यह एक स्क्रिप्ट जो की तरह dd कमांड का उपयोग करता है चलाता है तो एक और ड्राइव पर इसे फ्लैश करने के लिए:विंडोज सी # लिनक्स डीडी कमांड का कार्यान्वयन
dd अगर =/path/to/फ़ाइल/से/csharp/प्रोग्राम =/dev/sdX
मेरी समस्या यह है कि मैं विंडोज़ पक्ष पर छवि बना रहा हूं। मैंने अपने लाइव लिनक्स को डीडी का उपयोग करके लिनक्स सिस्टम पर बनाई गई फ़ाइलों के साथ बाहर करने की कोशिश की है और यह ठीक काम करता है, लेकिन मुझे इन फ़ाइलों को सी # के भीतर से बनाने में सक्षम होना चाहिए। विंडोज़ पर एप्लिकेशन। मुझे सिग्विन या कुछ अन्य निर्भरता पर भरोसा नहीं करना पड़ेगा इसलिए भौतिक डिवाइस को खोलने के लिए Win32 CreateFile फ़ंक्शन का उपयोग करने का प्रयास किया।
CreateFile पहले आर्ग सेट के साथ करने के लिए कहा जाता है "\ \ एफ:।"
SafeFileHandle TheDevice = CreateFile(_DevicePath, (uint)FileAccess.Read, (uint)(FileShare.Write | FileShare.Read | FileShare.Delete), IntPtr.Zero, (uint)FileMode.Open, (uint)FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_SEQUENTIAL_SCAN, IntPtr.Zero);
if (TheDevice.IsInvalid)
{
throw new IOException("Unable to access drive. Win32 Error Code " + Marshal.GetLastWin32Error());
}
FileStream Dest = System.IO.File.Open(_SaveFile, FileMode.Create);
FileStream Src = new FileStream(TheDevice, FileAccess.Read);
Src.CopyTo(Dest);
Dest.Flush();
Src.Close();
Dest.Close();
लेकिन जब आउटपुट फ़ाइल dd है: है, तो तरह (अगर एफ ड्राइव मैं छवि चाहते हैं) लाइव लिनक्स यूएसबी का उपयोग कर डिस्क पर वापस आना परिणाम अपेक्षित नहीं है (डिस्क बूट करने योग्य नहीं है आदि, लेकिन एक हेक्स संपादक में आउटपुट फ़ाइल की जांच करने से, ऐसा लगता है कि शुरुआत में एमबीआर है आदि)।
क्या यह अंतहीनता के साथ एक समस्या है या मुझे फ़ाइल में डेटा की प्रतिलिपि बनाने के लिए फ़ाइलस्ट्रीम के अलावा कुछ और उपयोग करना चाहिए।
वैकल्पिक रूप से विंडोज स्रोत कोड (सी # या सी ++ के लिए डीडी का एक उदाहरण है, मैंने http://www.chrysocome.net/dd के लिए डेल्फी को देखा है और इसे पूरी तरह से समझ नहीं पाया है या कोड को अलग करने के लिए एक सभ्य डेल्फी आईडीई है) तो मैं देख सकते हैं कि यह कैसे काम करता है?
अद्यतन/संपादित करें:
33 C0 FA 8E D8 8E D0 BC 00 7C 89 E6 06 57 8E C0 FB FC BF 00 06 B9 00 01 F3 A5 EA 1F 06
00 00 52 52 B4 41 BB AA 55 31 C9 30 F6 F9 CD 13 72 13 81 FB 55 AA 75 0D D1 E9 73 09 66
C7 06 8D 06 B4 42 EB 15 5A B4 08 CD 13 83 E1 3F 51 0F B6 C6 40 F7 E1 52 50 66 31 C0 66
99 E8 66 00 E8 21 01 4D 69 73 73 69 6E 67 20 6F 70 65 72 61 74 69 6E 67 20 73 79 73 74
65 6D 2E 0D 0A 66 60 66 31 D2 BB 00 7C 66 52 66 50 06 53 6A 01 6A 10 89 E6 66 F7 36 F4
7B C0 E4 06 88 E1 88 C5 92 F6 36 F8 7B 88 C6 08 E1 41 B8 01 02 8A 16 FA 7B CD 13 8D 64
10 66 61 C3 E8 C4 FF BE BE 7D BF BE 07 B9 20 00 F3 A5 C3 66 60 89 E5 BB BE 07 B9 04 00
31 C0 53 51 F6 07 80 74 03 40 89 DE 83 C3 10 E2 F3 48 74 5B 79 39 59 5B 8A 47 04 3C 0F
74 06 24 7F 3C 05 75 22 66 8B 47 08 66 8B 56 14 66 01 D0 66 21 D2 75 03 66 89 C2 E8 AC
FF 72 03 E8 B6 FF 66 8B 46 1C E8 A0 FF 83 C3 10 E2 CC 66 61 C3 E8 62 00 4D 75 6C 74 69
70 6C 65 20 61 63 74 69 76 65 20 70 61 72 74 69 74 69 6F 6E 73 2E 0D 0A 66 8B 44 08 66
03 46 1C 66 89 44 08 E8 30 FF 72 13 81 3E FE 7D 55 AA 0F 85 06 FF BC FA 7B 5A 5F 07 FA
FF E4 E8 1E 00 4F 70 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 20 6C 6F 61 64 20 65 72
72 6F 72 2E 0D 0A 5E AC B4 0E 8A 3E 62 04 B3 07 CD 10 3C 0A 75 F1 CD 18 F4 EB FD 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 19 16 9F 29 00 00 80 01 01 00 06 FE 3F 0E 3F 00 00 00 61 C8 03 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
और यहाँ क्या मेरी कोड का उत्पादन किया जाता है::
यहाँ पहले 512 बाइट्स कि dd उत्पादन होता है की एक हेक्स स्ट्रिंग है
EB 76 90 4D 53 44 4F 53 35 2E 30 00 02 04 04 00 02 00 02 00 00 F8 F2 00 3F 00 FF 00 3F
00 00 00 61 C8 03 00 80 00 29 7A E8 21 04 4E 4F 20 4E 41 4D 45 20 20 20 20 46 41 54 31
36 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 E9 05 01 B4 0E 53 33 DB CD 10 5B C3 8A 07 3C 00 74 06 E8 EE FF 43 EB F4 C3
0D 4E 6F 20 42 50 42 3A 20 43 61 6E 27 74 20 62 6F 6F 74 20 75 73 69 6E 67 20 43 48 53
20 66 75 6E 63 74 69 6F 6E 73 00 50 B0 2E E8 BC FF 58 33 DB 8E 06 E4 01 F6 06 DC 01 02
75 42 F6 06 DC 01 04 75 07 80 3E E8 01 80 72 34 53 53 52 50 06 53 55 6A 10 8B F4 52 50
8A 16 E8 01 B8 00 42 F9 CD 13 8A EC 58 5A 8D 64 10 72 14 80 FD 00 75 0F 03 C5 83 D2 00
C3 BB 91 00 E8 78 FF F4 EB FD 83 3E 18 00 00 74 F0 52 50 8B CD F7 36 18 00 8B F2 03 D1
3B 16 18 00 76 06 8B 0E 18 00 2B CE 33 D2 F7 36 1A 00 88 16 E9 01 8B F8 8B D7 51 8A C1
8D 4C 01 C0 E6 06 0A CE 8A EA 8B 16 E8 01 B4 02 CD 13 59 73 15 80 FC 09 75 0A 49 EB DE
8A C4 04 30 E8 18 FF B4 00 CD 13 EB D1 58 5A 03 C1 83 D2 00 2B E9 74 07 C1 E1 09 03 D9
EB 94 C3 00 00 00 00 FA FC E8 00 00 5E 81 EE 85 01 2E 8B 84 E4 01 8E D8 8E C0 8E D0 2E
C7 84 7C 01 AF 01 2E 89 84 7E 01 B9 00 01 BF 00 00 F3 2E A5 2E FF AC 7C FF BC 00 0A FB
80 3E E8 01 FF 75 04 88 16 E8 01 83 06 E4 01 20 A1 E0 01 8B 16 E2 01 BD 02 00 E8 E9 FE
50 52 EB 74 90 00 00 00 00 00 00 00 00 00 00 00 D3 20 00 00 00 30 80 00 FF 00 68 41 00
40 09 FF 40 5A AC 04 00 00 AC 04 00 00 00 00 12 00 55 AA
यह किसी भी संपादन/लेखन इत्यादि के बिना बिल्कुल उसी सीएफ कार्ड से लिया गया था, इसलिए मैं उलझन में हूं कि वे इतने अलग क्यों हैं, लेकिन दोनों ई सही 55 एए बाइट्स के साथ भी। क्या विंडोज़ एमबीआर के कार्ड पर उलझन में हैं जब उन्हें इस तरह से पहुंचाया जा सकता है या हुड सामान के तहत कुछ अजीब है जो मुझे पता नहीं है?
मुझे लगता है कि आपके सी # कोड से सिग्विन से "डीडी" कॉलिंग का उपयोग कर सवाल है? – Greg
यह एक आखिरी उपाय होगा, मुझे लगता है कि समस्या // ///F: पथ को परिवर्तित कर रही है जो कि सिगविन के तहत डीडी समझती है। तो समस्या (मेरे लिए) तब सी # एप्लिकेशन के भीतर कैसे बनती है, // ///एफ: पथ को/dev/sdX में साइगविन में परिवर्तित करें। –
@ क्रैगेन मुझे लगता है कि यहां क्या हो रहा है यह है कि विंडोज संस्करण वॉल्यूम बूट रिकॉर्ड को मास्टर बूट रिकॉर्ड नहीं मिला है। ऐसा शायद इसलिए है क्योंकि मैं इसे पास कर रहा हूं // ///F: और F: केवल पहला विभाजन है, भौतिक डिस्क नहीं।अच्छा होगा अगर कोई और पुष्टि कर सकता है कि मैं सही हूं या नहीं, इससे पहले कि मैं भौतिक डिस्क (विभाजन/वॉल्यूम के बजाय) तक पहुंचने के बारे में अगले प्रश्न में शामिल हूं। नमूना इनपुट और आउटपुट समेत अच्छी तरह से शोध किए गए, स्पष्ट प्रश्न के लिए –