উইন্ডোজ 7 এ হাইবারনেশন ফাইলের অবস্থান কীভাবে পরিবর্তন করবেন?


45

আমি উইন্ডোজ 7 এ হাইবারনেশন সক্ষম করতে পারছি না কারণ হাইবারনেশন ফাইল তৈরি করার জন্য আমার সি: ড্রাইভে পর্যাপ্ত জায়গা নেই। আমি কীভাবে উইন্ডোজকে অন্য কোথাও ফাইলটি রাখতে পারি?



আপনি পারবেন না। তবে আপনি হাইবারনেশন ( powercfg.exe -h off) অক্ষম করতে পারবেন এবং তারপরে ফাইলটি মুছুন।
ইয়ান বয়ড

উত্তর:


42

আপনি পারবেন না, এটি বুট ড্রাইভের মূলের মধ্যে থাকতে হবে (সি: ড্রাইভ আপনার ক্ষেত্রে)।

রেমন্ড চেন এই উইন্ডোজ গোপনীয় নিবন্ধের কারণগুলি ব্যাখ্যা করেছিলেন: ফাইল সিস্টেম প্যারাডক্স

হাইবারনেশন একই ধরণের প্যাটার্ন অনুসরণ করে। অপারেটিং সিস্টেম হাইবারনেট করার অর্থ মেমরির সম্পূর্ণ সামগ্রী হাইবারনেশন ফাইলে ডাম্প করা; হাইবারনেস থেকে পুনরুদ্ধার করা সেই ফাইলটিকে মেমরির মধ্যে ফিরে চুষতে এবং কিছুই ঘটেনি বলে ভান করে। আবার এটি আরেকটি মুরগির ও ডিমের সমস্যা: হাইবারনেশন ফাইলটি লোড করতে আপনার ফাইল সিস্টেম ড্রাইভার দরকার তবে ফাইল সিস্টেম ড্রাইভার হাইবারনেশন ফাইলে রয়েছে in আপনি যদি হাইবারনেশন ফাইলটি বুট ড্রাইভের মূল ডিরেক্টরিতে রাখেন তবে এর পরিবর্তে ক্ষুদ্র ফাইল সিস্টেম ড্রাইভার ব্যবহার করতে পারবেন।


14
খারাপ উইন্ডোগুলির পক্ষে এটি হ্যান্ডেল করতে পারে না, আমার এসএসডি এর জন্য আমার এটি দরকার need আমি আশা করি যে তারা ভবিষ্যতে এটা ঠিক তাই আপনি যেখানে ম্যাক OS X এর মত এটা করা চয়ন করতে পারেন
Hultner

5
হ্যাঁ, আমার মতে এটি ডিজাইনের ত্রুটি কিছুটা। এমনকি যদি সিস্টেমটি মূল ড্রাইভ থেকে বুট করার প্রয়োজন হয় তবে একই গিগাবাইটের সমস্ত তথ্য একই ড্রাইভে সংরক্ষণ করার কোনও কারণ নেই- হাইবারনেশন ফাইলটি বেসিকগুলি (যেমন ড্রাইভ অ্যাক্সেস) লোড করতে পারে এবং তারপরে অতিরিক্ত জন্য অন্য ড্রাইভের দিকে তাকাতে পারে ডেটা। দুর্ভাগ্যক্রমে, তারা কেসটি হ্যান্ডেল করার জন্য এটি ডিজাইন করেনি which যার অর্থ তারা কোনও নতুন ওএস না হওয়া পর্যন্ত ... যদি না হয়।
নাম

1
@ নাম: হাইবারনেশন ফাইলটি যদি বেসিকগুলি লোড করতে পারে তবে এটি প্রথমে সরাসরি বুট লোডারটিতে সরাসরি লেখা যেতে পারে। তারপরে আপনি কৃমিতে একটি সম্পূর্ণ নটর ক্যান খুলুন। অন্যটি নয়, আমি এটিকে কোনও ডিজাইনের ত্রুটি হিসাবে বিবেচনা করব না। এটি উইন্ডোজ এনটি আই অনুমানের দিনগুলিতে ফিরে লেখা হয়েছিল, যেখানে গতি, মেমরির সীমা এবং কম সিপিইউ শক্তি ছোট এসএসডি ড্রাইভ নয়, বড় কারণ ছিল। হেক, এসএসডি প্রথম দিকে এত সাধারণ হওয়ার পূর্বাভাস কে দিয়েছিল ??
surfasb

1
এটি "মুরগির এবং ডিম" সম্পর্কে খুব সুন্দর শব্দ যা কোনও ব্যাপার নয়: বুট লোডার যদি হাইবারনেট ফাইলটি ডিস্ক থেকে মেমরিতে লোড করতে জানে তবে বুট লোডারের মধ্যে ফাইল সিস্টেম ড্রাইভার না থাকার কোনও কারণ নেই।
ডেনিস বারমেনকভ

3
এটি মাইক্রোসফ্টের একটি নির্বোধ অজুহাত। যদি উভয় ডিস্ক একই নিয়ামক - একই ড্রাইভার ব্যবহৃত হয়? যদি একটি ডিস্ক এসএসডি হয় এবং আপনি এটিকে দ্রুত পরাতে না চান?
নিকসফট

6

ঠিক আছে হাইবারফিল.সিসগুলিতে সরানোর জন্য 2 টি জিনিস সমাধান করতে হবে

  1. 'Ntoskrnl.exe' বলুন যা ডি 'তে হাইবারনেশন ডেটা খুলতে / সংরক্ষণ করতে প্রক্রিয়া' সিস্টেম 'হিসাবে চালিত হয়: C: of -> এখনও অমীমাংসিতের পরিবর্তে হাইবারফিল.সিস!

  2. এই সুযোগটি বুট কনফিগারেশনের ডেটা ফাইলটিতেও প্রয়োগ করতে (সি: \ বুট \ বিসিডি) -> ভিজ্যুয়ালবিসিডি https://www.boyans.net/DownloadVisualBCD.html -> এমনকি কেবল রিজেডিট ব্যবহার করে এটি অপেক্ষাকৃত সহজ HKLM \ BCD0000000000 editing অবজেক্টস সম্পাদনা করুন 75 71575733-c376-11e4-80ea-806e6f6e6963 \ উপাদানসমূহ \ 21000001 যা রেজিউমলডার বা 00 22000002 হাইবারফাইপথের হাইবারফ্লাইড্রাইভ। । \ বিওওটি \ ছাত্রদলের 'BCD00000000' শাখা মাউন্ট (কার্সার HKLM চালু করা প্রয়োজন, অন্য মেনু আইটেমটি ধূসর অবস্থায়): হতে পারে আপনি '/ ফাইল লোড মধুচক্র' ব্যবহার করতে গ প্রয়োজন -> এটা ইতিমধ্যে সম্পন্ন করা হয় বলে মনে হচ্ছে যেমন ntosknl.exe দ্বারা তাই এটিকে পরিবর্তন করার কোনও প্রয়োজন নেই কারণ ইয়া পরিবর্তনগুলি ওভাররাইট করা হবে ten

তবে সংখ্যা ১. জিনিসটি পরিবর্তন করা সবচেয়ে খারাপ এবং আরও কঠিন। হুম আইডিএতে ntoskrnl.exe লোড করা যাক এবং /hiberfil.sys এর সাথে সম্পর্কিত এমন ফাংশনটি সন্ধান করুন এবং সেখানে ঠিক কী চলছে তা দেখার জন্য এটি নিষ্পত্তি করুন ...

__int64 __fastcall PopCreateHiberFile(LARGE_INTEGER *a1)
{
...
 RtlInitUnicodeString(&Source, L"\\hiberfil.sys");
...
  RtlAppendUnicodeStringToString(&Destination, &IoArcBootDeviceName);
  RtlAppendUnicodeStringToString(&Destination, &Source);
...
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.Attributes = 576;
  ObjectAttributes.ObjectName = &Destination;
  ObjectAttributes.SecurityDescriptor = v5;
  ObjectAttributes.SecurityQualityOfService = 0i64;
  ret_2 = IoCreateFile(
            &FileHandle,
            0x100003u,
            &ObjectAttributes,
...

ঠিক আছে, সংক্ষেপে পথটি এইভাবে হার্ডকোড করা হয়েছে: IoArcBootDeviceName + "\ হাইবারফিল.সিস" কিছু দুষ্টু বাইনারি প্যাচিং ছাড়া এটি পরিবর্তন করার কোনও উপায় নেই। পবিত্র উইন্ডোজ গ্রিলটি স্পর্শ করার পাশাপাশি "এনটিস্কারেল" প্যাচিংয়ের ফলে আপডেটগুলি প্যাচটি পূর্বাবস্থায় ফেলার মতো সমস্যা হতে পারে বা অ্যান্টিভাইরাস প্রোগ্রামগুলি উন্মাদ হয়ে উঠতে পারে ... তবে আইওআরাকবুটডেভাইসনামের উল্লেখগুলি কী তা দেখা যাক:

আইপলয়েডক্র্যাশডাম্পড্রাইভার পপডিলিটহাইবারফিল পপক্রিয়াটহাইবারফাই পপব্যাকসিডিসেটআপরিজিউমঅবজেক্ট পপবিসিডিসেটডাফল্টসেসিউজবিলিটিপস পপবিসিডিসেটপেন্ডিংপিসিউমপপসিডিডিজারেটরেসেসপোজেক্টসক্রিটক্ল্যাসপ্রেসিটেকশন

বাহ যে পরিবর্তিত হচ্ছে তা ঠিক আছে বলে মনে হচ্ছে (কেবলমাত্র যা কিছুটা চলে যায় তা হ'ল IopLoadCrashdumpDriver System32 \ ড্রাইভারস \ ক্র্যাশডম্প ys সিসি তবে যাদের ক্র্যাশডাম্প দরকার - আমাদের সেখানে কিছু ভেঙে গেলে কিছু যায় আসে না)

প্যাচিং তাই IopCreateArcNames যে সৃষ্টি ArcBootDeviceName ঠিক থাকবে:

NTSTATUS INIT_FUNCTION NTAPI IopCreateArcNames  (   IN PLOADER_PARAMETER_BLOCK  LoaderBlock )   
...
   /* Create the global system partition name */
   63     sprintf(Buffer, "\\ArcName\\%s", LoaderBlock->ArcBootDeviceName);
   64     RtlInitAnsiString(&ArcString, Buffer);
   65     RtlAnsiStringToUnicodeString(&IoArcBootDeviceName, &ArcString, TRUE);
   66 
   67     /* Allocate memory for the string */
   68     Length = strlen(LoaderBlock->ArcBootDeviceName) + sizeof(ANSI_NULL);
   69     IoLoaderArcBootDeviceName = ExAllocatePoolWithTag(PagedPool,
   70                                                       Length,
   71                                                       TAG_IO);
   72     if (IoLoaderArcBootDeviceName)
   73     {
   74         /* Copy the name */
   75         RtlCopyMemory(IoLoaderArcBootDeviceName,
   76                       LoaderBlock->ArcBootDeviceName,
   77                       Length);
   78     }

...

https: //doক্স.reactos.org/d3/d82/ntoskrnl_2io_2iomgr_2arcname_8c.html বিটিডব্লু আমি Win7 64 বিট থেকে ntkrnlmp.exe 6.1.7601.19045 ব্যবহার করছি এবং এই কোডটি রিঅ্যাক্টসের বিরুদ্ধে চেক করেছি। (তবে হাইবারনেটিং অংশটি এখনও রিঅ্যাক্টোস উত্সগুলিতে প্রয়োগ করা হয়নি) নোট করুন যে আরকবুটডেভাইসনেম এমন কিছু হবে: \ ডিভাইস \ হার্ডডিস্ক 1 \ পার্টিশন0

হুম আসুন আর্কবুটডেভাইসনেম (লোডারব্লক + 0x78) আর্কহালডিভাইসনেমে (লোডারব্লক + 0x80) প্যাচ করি

সুতরাং যদি বুটমগ্রার লোডারটি উইন্ডোগুলির চেয়ে আলাদা পার্টিশনে থাকে তবে আশা করা যায় যে হাইবারনেট ys

1405A9C15 4C 8B 4B 78                    mov     r9, [rbx+78h]
Patch #1           80

1405A9C19 4C 8D 05 30 06+                lea     r8, aArcnameS   ; "\\ArcName\\%s"
1405A9C20 48 8D 4C 24 40                 lea     rcx, [rsp+0D8h+pszDest] ; pszDest
1405A9C25 48 8B D7                       mov     rdx, rdi        ; cchDest
1405A9C28 E8 E3 AE B6 FF                 call    RtlStringCchPrintfA

...
1405A9C41 48 8D 0D C0 E7+                lea     rcx, IoArcBootDeviceName ; DestinationString
1405A9C48 41 B0 01                       mov     r8b, 1          ; AllocateDestinationString
1405A9C4B E8 60 13 DB FF                 call    RtlAnsiStringToUnicodeString
1405A9C50 48 8B 7B 78                    mov     rdi, [rbx+78h]
Patch #2           80

সুতরাং ntoskrnl.exe 4C8B4B78 2C8B4B80 এর সাথে দুটি স্থানে প্রতিস্থাপন করুন। পরে পিই-চেকসাম ঠিক করতে ভুলবেন না।


একটি ক্রিপ্টিক উত্তর সম্পর্কে কথা না অনেকেই বুঝতে পারবেন না!
মূর্তিমান নিরানন্দ

কেউ কি এভাবে ntoskrnl.exe প্যাচ করার চেষ্টা করেছেন? এটি পরে কাজ করে?
পিএফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.