วิธีการใช้คุณลักษณะพิเศษของกลุ่มเพื่อแยกความเสียหายของพูล

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 188831 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

ความเสียหายของพูลโปรแกรมอาจทำให้มากสุด เกิดความเสียหายของ Windows NT พู evasive ปัญหาเมื่อโหมดเคอร์เนล คอมโพเนนต์เขียนไปยังหน่วยความจำภายนอกพื้นที่เก็บพักที่จัดสรรไว้ โดยการเขียน หน่วยความจำเกินกว่าขอบเขตของพื้นที่จัดสรรไว้ เป็นไปได้ที่อื่น พื้นที่หน่วยความจำที่ปันส่วน อาจเป็นเจ้าของคอมโพเนนต์อื่น จะถูกแทนที่ ความเสียหายนี้อาจทำให้เกิดปัญหาเช่นหน้าจอสีน้ำเงินในทั้งหมดซึ่งไม่เกี่ยวข้อง พื้นที่ของรหัส คอมโพเนนต์โหมดเคอร์เนลที่อ่านนอกเหนือจากพื้นที่ที่มีการปันส่วนสามารถ นอกจากนี้ยัง ทำให้เกิดปัญหา

ว่าจะเกิดจากอุปกรณ์เดิม โปรแกรมควบคุมของบริษัทผู้ผลิต (OEM) หรือปัญหาใน Windows มีปัญหาความเสียหายของพูล บางสุดยากที่จะระบุ โดยทั่วไป ทั้งหมดที่จะสามารถเห็นได้ในตัว การวิเคราะห์การถ่ายโอนข้อมูลความล้มเหลวเป็นอาการของปัญหาเกิดขึ้นจริง เช่นในพื้นที่ข้อมูล กลายเป็นปัญหาเสียหาย และ causing ในบล็อกไม่เกี่ยวข้องทั้งหมดของรหัส จนถึงขณะนี้ มันเกือบจะทำการค้นหาเซ็กเมนต์ของรหัส ที่เสียหน่วยความจำ

สามารถเดี๋ยวนี้ระบุแหล่งมาของความเสียหายของพูล ในคำสั่งการทำให้เกิดความเสียหายของพูล โปรแกรมอรรถประโยชน์การจัดการหน่วยความจำใหม่ นั่นคือกลุ่มพิเศษที่มีชื่อที่มีอยู่ใน Windows NT 4.0 Service Pack 4 (SP4), Windows 2000 Windows XP, Windows Server 2003, Windows Vista และ Windows Server 2008 โปรแกรมอรรถประโยชน์การเก็บพักพิเศษ ระบุคอมโพเนนต์โหมดเคอร์เนลที่ทำลายข้อมูลที่เก็บพัก โดยการเขียน หน่วยความจำภายนอกของพื้นที่ที่จัดสรรไว้

หมายเหตุ การปรับแต่งหน่วยความจำใช้ได้กับ Windows Vista และ Windows Server 2008 นั้น อย่างไรก็ตาม ใช้ลักษณะการทำงานการเก็บพักพิเศษสำหรับผลิตภัณฑ์เหล่านี้

ข้อมูลเพิ่มเติม

สิ่งสำคัญ ส่วน วิธีการ หรืองานนี้ประกอบด้วยขั้นตอนที่บอกให้คุณทราบวิธีการปรับเปลี่ยนรีจิสทรี อย่างไรก็ตาม ปัญหาร้ายแรงอาจเกิดขึ้นหากคุณปรับเปลี่ยนรีจิสทรีอย่างไม่ถูกต้อง ดังนั้น ตรวจสอบให้แน่ใจว่า คุณทำตามขั้นตอนเหล่านี้อย่างระมัดระวัง สำหรับการป้องกันเพิ่มเติม ให้สำรองข้อมูลรีจิสทรีก่อนที่คุณจะปรับเปลี่ยน จากนั้นคุณจะสามารถคืนค่ารีจิสทรีได้หากเกิดปัญหา สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสำรอง และคืนค่ารีจิสทรี คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
322756 วิธีการสำรอง และคืนค่ารีจิสทรีใน Windows


โปรแกรมอรรถประโยชน์การเก็บพักพิเศษ การจัดสรรหน่วยความจำเสมือนสองหน้าสำหรับทุกการปันส่วนกลุ่มที่มีการร้องขอ ผ่านทาง ExAllocatePoolWithTag ซึ่งตรงกับเงื่อนไขต่อไปนี้:
  • ต้องการร้องขอการปันส่วนสำหรับขนาดเล็กลงกว่านี้ ปันส่วนสูงสุดที่จะพอดีกับหน้าพู
  • การร้องขอต้องตรงกับข้อมูลจำเพาะ PoolTag ในการ รีจิสทรี
สำหรับการตรวจหาพู overrun หน้าแรกถูกใช้เพื่อจัดเก็บ การปันส่วนท้ายของหน้า สองหน้าคือ หน้า guard สำหรับ การตรวจสอบพู underrun หน้าแรกคือ หน้า guard ตามด้วยการ เพจที่ประกอบด้วยการปันส่วนเมื่อเริ่มต้นของหน้า

ตรวจหามากเกินไปอาจจะที่ส่วนใหญ่ใช้อยู่ สำหรับการตรวจหามากเกินไป การ ร้องขอการปันส่วนอยู่ในตำแหน่งที่ส่วนท้ายของหน้าแรก โดยการทำสำรอง ขนาดของการร้องขอจากส่วนท้ายของหน้า ขนาดการปันส่วนจะปัดเศษขึ้นเป็นตัว ขอบเขตของ 8 ไบต์ รหัสรูปแบบ ขนาด และข้อมูลแท็กของพูมี เขียนไปยังหัวข้อที่ 8 ไบต์แรกหน้าแรกเท่านั้น รูปแบบการ เผยจะยังแพร่ทั่วทั้งหน้า เนื่องจากการปันส่วนที่อยู่ในตำแหน่งในการ ใกล้ที่สุดของขอบเขตของ 8 ไบต์ อาจมีไบต์ slop เจ็ดมากต่อการ การปันส่วน นอกจากนี้ยังมีเขียนลวดลายไบต์ slop ต่อไปนี้ การปันส่วน

สองหน้าคือ หน้า guard เพ guard ประกอบด้วยรายการตารางเพ (PTE) ที่ถูกทำเครื่องหมาย โดยไม่มีการเข้าถึง การป้องกัน โดยทำเครื่องหมายเพจนี้สองการป้องกันการเข้าถึงไม่มี รหัสใด ๆ พยายามอ่าน หรือเขียนนอกเขตที่จุดสิ้นสุดของรอบหน้าทันทีทำให้ ละเมิดการเข้าถึงที่เป็นผลลัพธ์ใน Stop 0x0000000A หรือข้อผิดพลาด Stop 0x0000001E ซึ่งช่วยให้ผู้ตรวจแก้จุดบกพร่องระบบเพื่อค้นหาคำสั่งที่แน่นอน ที่ทำให้เกิดความเสียหายของพูล

เป็นการตรวจสอบการสำรองข้อมูลเพื่อตรวจจับ violators ที่เขียน นอกเหนือจากจุดสิ้นสุด ของการปันส่วน แต่ไม่เกิน กว่าจุดสิ้นสุดของหน้ากระดาษ การ slop ไบต์ที่ส่วนท้ายของการปันส่วนจะถูกตรวจสอบในระหว่างการร้องขอการเก็บพักฟรี (ExFreePoolWithTag) ไบต์ slop จะเปรียบเทียบกับรูปแบบในการ หัวข้อการปันส่วนเพื่อตรวจสอบว่ากล่องผลลัพธ์ควรเป็นจะถูกเขียนทับในพื้นที่ไบต์ slop ถ้าการตรวจสอบการตรวจสอบไม่ทำงาน มีข้อผิดพลาด Stop 0x00000001A เกิดขึ้น

กาเครื่องหมายนี้ไม่จำเป็นต้องหาช่วงที่แน่นอนของ รหัสที่ทำให้เกิดความเสียหายของพูล อย่างไรก็ตาม อาจช่วยระบุคอมโพเนนต์ ที่ทำให้เกิดความเสียหาย

เมื่อต้องการเปิดใช้งานโปรแกรมอรรถประโยชน์การเก็บพักพิเศษ เพิ่มการ ต่อไปนี้คีย์และค่ารีจิสทรี:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


ชื่อของค่า: PoolTag
ชนิดข้อมูล: REG_DWORD
ข้อมูล: รูปแบบของแท็กพู | รูปแบบขนาดของการปันส่วน | 0
รูปแบบแท็กพูคือ พูแท็ก ID ที่ประกอบด้วย masking อักขระของประเภทการผลิตที่คุณต้องการใส่ในที่เก็บพักพิเศษ ตัวพรางนี้ ต้องระบุในเลขฐานสิบหกในลำดับย้อนกลับ อาจประกอบด้วยรูปแบบนี้ "? " เพื่อมาสก์อักขระเดี่ยว หรือ " * " กับรูปแบบจากที่นี่ไปจุดสิ้นสุดของป้าย ตัวอย่างเช่น การตรวจสอบประเภทการผลิตทั้งหมด ด้วยแท็กประเภทที่ขึ้นต้น ด้วย "Nt" ระบุ "2A744E" (ไม่ มีเครื่องหมายอัญประกาศ), ซึ่งแสดงถึง " * tN "

ที่ ตารางต่อไปนี้แสดงรายการตัวอย่างเพิ่มเติม
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
การปันส่วนกลุ่มสินทรัพย์ทั้งหมดของข้อมูลจำเพาะรูปแบบขนาดของการปันส่วนวาง ขนาดที่ระบุไว้ในเก็บพักพิเศษ ซึ่งจะระบุอยู่ในเลขฐานสิบหก ตัวอย่างเช่น ถ้ามีการปันส่วนทั้งหมด 32 ไบต์ที่ถูกวางตำแหน่งในการเก็บพักพิเศษ ระบุ 0x20

เมื่อมีระบุค่าเป็นศูนย์ (0x0) โปรแกรมอรรถประโยชน์การเก็บพักพิเศษ จะไม่ถูกเริ่มต้น นอกจากนี้ โปรแกรมอรรถประโยชน์การเก็บพักพิเศษไม่ได้เริ่มต้นถ้า ไม่มีกำหนดค่ารีจิสทรี PoolTag ในรีจิสทรี
ชื่อของค่า: PoolTagOverruns
ชนิดข้อมูล: REG_DWORD
ข้อมูล: 1 | 0
1 บ่งชี้ว่า พบพู overruns การปันส่วนสำหรับการ แท็กที่ระบุ การปันส่วนจะอยู่ที่ส่วนท้ายของหน้าและการ guard หน้าต่อไปนี้

0 บ่งชี้ว่า พบพู underruns การปันส่วนสำหรับการ แท็ก การปันส่วนจะอยู่ที่จุดเริ่มต้นของหน้า และหน้า guard มาก่อนหน้าที่ประกอบด้วยการปันส่วน

ตัวอย่างการใช้งานทั่วไปเพื่อสร้างคีย์รีจิสทรีที่สองเหล่านี้ จะเป็นดังนี้:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


ชื่อของค่า: PoolTag
ชนิดข้อมูล: REG_DWORD
ข้อมูล: 0x2A

ชื่อของค่า: PoolTagOverruns
ชนิดข้อมูล: REG_DWORD
ข้อมูล: 1


หมายเหตุ สำหรับ Windows NT 4.0 เซิร์ฟเวอร์เทอร์มินัล คุณต้องปิด KStackPool เมื่อคุณใช้กลุ่มพิเศษ เมื่อต้องการทำเช่นนี้ เพิ่มค่ารีจิสทรีต่อไปนี้:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


ชื่อของค่า: EnableKStackPool
ชนิดข้อมูล: REG_DWORD
ข้อมูล: 0

1 - พู KStack ที่เปิดใช้งานเสมอ
2 - พู KStack ที่เปิดใช้งานสำหรับคอมพิวเตอร์ที่มีขนาด 256 MB หรือมากกว่า หน่วยความจำ (ค่าเริ่มต้น)
ถ้าคุณไม่ทำการเปลี่ยนแปลงนี้ในเทอร์มินัล คอมพิวเตอร์เซิร์ฟเวอร์ที่มีขนาด 256 MB หรือหน่วยความจำเพิ่มเติม คุณอาจได้รับ "หยุด 0x00000078 (PHASE0_EXCEPTION) "ข้อความแสดงข้อผิดพลาด


หมายเหตุ ลักษณะการทำงานการเก็บพักพิเศษอาจไม่ทำงานใน Windows Server 2003 หากมีรายการตารางเพพิเศษไม่เพียงพอ (PTEs) ปัญหานี้เกิดขึ้นในผู้ใช้เซิร์ฟเวอร์เทอร์มินัลที่ประกอบด้วย RAM มากกว่า 1 GB และที่มีการจัดการหน่วยความจำปรับแต่งค่าของเครื่องคอมพิวเตอร์ที่ตั้งค่าเป็นค่าเริ่มต้นโดยทั่วไป ปัญหานี้เกิดขึ้นใน Windows Server 2003 เวอร์ชั่น 64 บิตไม่

การวิเคราะห์แฟ้มการถ่ายโอนข้อมูลหน่วยความจำของปัญหาอาจประกอบด้วยข้อมูลต่อไปนี้:
*** Virtual Memory Usage *** 
Physical Memory: 1015660 ( 4062640 Kb) 
Page File: \??\C:\Pagefile1\pagefile.sys 
Current: 4193280Kb Free Space: 4180856Kb 
Minimum: 4193280Kb Maximum: 4193280Kb 
Available Pages: 552680 ( 2210720 Kb) 
ResAvail Pages: 932179 ( 3728716 Kb) 
Locked IO Pages: 347 ( 1388 Kb) 
Free System PTEs: 187166 ( 748664 Kb) 
Free NP PTEs: 32765 ( 131060 Kb) 
Free Special NP: 117228 ( 468912 Kb) 
Modified Pages: 106 ( 424 Kb) 
Modified PF Pages: 98 ( 392 Kb) 
NonPagedPool Usage: 6599 ( 26396 Kb) 
NonPagedPool Max: 65536 ( 262144 Kb) 
PagedPool 0 Usage: 10697 ( 42788 Kb) 
PagedPool 1 Usage: 1240 ( 4960 Kb) 
PagedPool 2 Usage: 1239 ( 4956 Kb) 
PagedPool 3 Usage: 1265 ( 5060 Kb) 
PagedPool 4 Usage: 1231 ( 4924 Kb) 
PagedPool Usage: 15672 ( 62688 Kb) 
PagedPool Maximum: 90112 ( 360448 Kb) 
Shared Commit: 3866 ( 15464 Kb) 
Special Pool: 511 ( 2044 Kb) <-- very small
Shared Process: 5205 ( 20820 Kb) 
PagedPool Commit: 15672 ( 62688 Kb) 
Driver Commit: 2091 ( 8364 Kb) 
Committed pages: 439832 ( 1759328 Kb) 
Commit limit: 2023823 ( 8095292 Kb)

0: kd> dd nt!MmSpecialPoolRejected l8 
8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage.
8057aff0 00000000 00000000 00000000 00000000

8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78
8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
คุณสามารถตรวจสอบการตัดสินค้าจากคลังตามขนาดของเก็บพักพิเศษที่มีการปันส่วนจากการวิเคราะห์ ในกรณีนี้ ปัญหาเกิดขึ้นเนื่องจากค่าการ PTE พูพิเศษต่อไปนี้:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
ปัญหานี้อาจเกิดขึ้นถ้าค่าของรายการรีจิสทรี MmSpecialPoolRejected เป็น 3 หรือใหญ่กว่าได้

เมื่อต้องการแก้ไขปัญหานี้ ตั้งค่าคอนฟิกค่าของรายการรีจิสทรี PagedPoolSize ให้เป็นค่าที่มีขนาดเล็กกว่าขนาดจพูที่ได้รับอนุญาต ตัวอย่างเช่น ตั้งค่ารายการรีจิสทรี PagedPoolSize เป็นค่าขนาด 256 MB ถ้าคุณต้องการตั้งค่าคอนฟิกค่ามีขนาดใหญ่กว่า ใช้โปรแกรมอรรถประโยชน์การตรวจสอบประสิทธิภาพในการกำหนดความต้องการของคอมพิวเตอร์ที่มีขนาดใหญ่ขึ้นของเพจพูล

คุณสามารถใช้ค่าต่อไปนี้สำหรับรายการรีจิสทรี PagedPoolSize:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
สำหรับ Windows Server 2003 โดยไม่มีเซอร์วิสแพ็ค:

ชื่อของค่า: PagedPoolSize
ชนิดข้อมูล: REG_DWORD
ข้อมูล: 10000000
ฐาน: เลขฐานสิบหก

สำหรับ Windows Server 2003 มีติดตั้ง Service Pack 1 (SP1):

ชื่อของค่า: PagedPoolSize
ชนิดข้อมูล: REG_DWORD
ข้อมูล: FFFFFFFF
ฐาน: เลขฐานสิบหก

หมายเหตุ หลังจากที่คุณทำการเปลี่ยนการเปลี่ยนแปลงรีจิสทรีที่อธิบายไว้ในเรื่องนี้ บทความ รีสตาร์ทเครื่องคอมพิวเตอร์เพื่อทำให้เกิดการเปลี่ยนแปลงมีผลบังคับใช้

ถ้า หลังจากที่คุณเปิดใช้งานคุณลักษณะการเก็บพักพิเศษ คอมพิวเตอร์หยุดการตอบสนอง (แฮง), และคุณได้รับข้อความแสดงข้อผิดพลาดบนหน้าจอสีน้ำเงินในระหว่างการเริ่มต้น เริ่มต้นใหม่ คอมพิวเตอร์ โดยใช้ตัวเลือก Last Known Good Configuration การเปิดใช้งานคุณลักษณะการเก็บพักพิเศษจะไม่เขียนสุดท้ายที่ดีที่ทราบอยู่แล้ว รายการการตั้งค่าคอนฟิกในรีจิสทรีจนกว่าหลังจากการเข้าสู่ระบบเรียบร้อยแล้ว

คุณสมบัติ

หมายเลขบทความ (Article ID): 188831 - รีวิวครั้งสุดท้าย: 19 เมษายน 2556 - Revision: 2.1
ใช้กับ
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Service Pack 2
  • Windows Vista Home Premium
  • Windows Vista Enterprise
  • Windows Vista Ultimate
  • Windows Vista Service Pack 2
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Service Pack 2
  • Windows 7 Home Premium
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows 7 Service Pack 1
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Service Pack 1
Keywords: 
kbenv kbhowto kbqfe kbmt KB188831 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:188831

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com