NtUtils เป็นเฟรมเวิร์กสำหรับการเขียนโปรแกรมระบบ Windows ใน Delphi ที่ให้ชุดฟังก์ชันที่มีการจัดการข้อผิดพลาดและการบูรณาการภาษาที่ดีกว่าส่วนหัว Winapi/Ntapi ทั่วไป รวมกับข้อมูลโค้ดที่ใช้บ่อยและประเภทข้อมูลอัจฉริยะ
คุณสามารถค้นหาโค้ดตัวอย่างได้ใน พื้นที่เก็บข้อมูลเฉพาะ
ห้องสมุดมีโครงสร้างเป็นชั้นๆ รวม 3 ชั้น คือ
Winapi.*.pas ในตัวและไลบรารี Ntapi.*.pas ในโปรแกรมของคุณ แม้ว่าอาจจำเป็นต้องระบุคำนำหน้าเนมสเปซอย่างชัดเจนในกรณีที่ชื่อขัดแย้งกันSystem.SysUtils , System.Rtti และ System.Generics.Collectionsดังนั้นทุกสิ่งที่คุณต้องการจะรวมอยู่ใน Delphi เวอร์ชันฟรีล่าสุดแล้ว โบนัสคือการรวบรวมแอปพลิเคชันคอนโซลที่ไม่มี RTTI (หรือที่เรียกว่าการสะท้อนกลับ) จะทำให้ได้ไฟล์ปฏิบัติการที่น้อยมาก ดูตัวอย่างสำหรับรายละเอียดเพิ่มเติม
เนื่องจากการรวมทุกไฟล์จากไลบรารีลงในโปรเจ็กต์ของคุณมักจะซ้ำซ้อน คุณจึงสามารถกำหนดค่า Delphi สำหรับการค้นหาไฟล์อัตโนมัติได้ ด้วยวิธีนี้ คุณสามารถระบุหน่วยในส่วน uses และ Delphi จะรวมหน่วยดังกล่าวและการขึ้นต่อกันไว้ในโปรเจ็กต์โดยอัตโนมัติ หากต้องการกำหนดค่าโฟลเดอร์ที่ Delphi ทำการค้นหา ให้ไปที่ Project -> Options -> Building -> Delphi Compiler และเพิ่มบรรทัดต่อไปนี้ลงในเส้นทางการค้นหา:
.NtUtilsLibrary
.NtUtilsLibraryHeaders
.NtUtilsLibraryNtUiLib
หากชื่อโฟลเดอร์หรือตำแหน่งที่แตกต่างกันสำหรับโปรเจ็กต์ของคุณ คุณจะต้องปรับบรรทัดเหล่านี้ตามลำดับ
ไลบรารีบ่งชี้ถึงความล้มเหลวของผู้เรียกโดยการส่งคืนค่า TNtxStatus ที่ไม่สำเร็จ TNtxStatus (กำหนดใน NtUtils.pas) เป็นโครงสร้างที่เก็บรหัสข้อผิดพลาด (เข้ากันได้กับ NTSTATUS , HRESULT และข้อผิดพลาด Win32) รวมถึงข้อมูลเมตาเกี่ยวกับลักษณะของการดำเนินการที่พยายามทำ เช่น ตำแหน่งของความล้มเหลว stacktrace และ รายละเอียดอื่นๆ เช่น รูปแบบการเข้าถึงที่คาดหวัง/ร้องขอสำหรับการโทรแบบเปิด หรือค่าคลาสข้อมูลสำหรับการสืบค้น/ตั้งค่าการโทร หากต้องการตรวจสอบว่า TNtxStatus สำเร็จหรือไม่ ให้ใช้วิธี IsSuccess ในการเข้าถึงหรือตั้งค่ารหัสข้อผิดพลาดพื้นฐาน (ขึ้นอยู่กับประเภทและการตั้งค่าของผู้โทร) ให้ใช้คุณสมบัติเช่น Status , HResult , HResultAllowFalse , Win32Error , Win32ErrorOrSuccess , IsHResult , IsWin32 ฯลฯ
หากคุณต้องการใช้ข้อยกเว้น คุณสามารถเรียก RaiseOnError() บน TNtxStatus ที่กำหนดได้ตลอดเวลา โปรดทราบว่าเว้นแต่คุณต้องการใช้ข้อยกเว้นโดยไม่ต้องนำเข้า System.SysUtils (ซึ่งเป็นไปได้) ควรรวม NtUiLib.Exceptions ที่นำคลาสข้อยกเว้น ENtError เฉพาะมาด้วย (ได้มาจาก EOSError ในตัว)
NtUiLib.Errors แนบสี่วิธีในการแสดงค่า TNtxStatus เป็นสตริง ตัวอย่างเช่น หากข้อผิดพลาดที่มีค่า 0xC0000061 มาจากความพยายามที่จะเปลี่ยน ID เซสชันของโทเค็น วิธีการเหล่านี้จะส่งคืนข้อมูลต่อไปนี้:
| วิธี | สตริงที่ส่งคืน |
|---|---|
Name | STATUS_PRIVILEGE_NOT_HELD |
Description | A required privilege is not held by the client |
Summary | Privilege Not Held |
ToString | NtSetInformationToken returned STATUS_PRIVILEGE_NOT_HELD |
หากคุณต้องการไปไกลกว่านี้และแสดงกล่องข้อความที่สวยงามให้กับผู้ใช้ NtUiLib.Errors.Dialog เสนอ ShowNtxStatus() นอกจากนี้ การรวม NtUiLib.Exceptions.Dialog จะช่วยสนับสนุนการสะท้อนกลับที่จำเป็นและเพิ่มคุณค่าให้กับกล่องโต้ตอบให้ดียิ่งขึ้น นี่คือตัวอย่างลักษณะที่ปรากฏ:

TNtxStatus รองรับการจับร่องรอยสแต็ก (ปิดใช้งานตามค่าเริ่มต้น) หากต้องการเปิดใช้งาน ให้ตั้งค่า NtUtils.CaptureStackTraces เป็น True โปรดทราบว่าการแสดงสแต็กเทรซอย่างมีความหมายนั้นจำเป็นต้องกำหนดค่าการสร้างสัญลักษณ์การดีบักสำหรับไฟล์ปฏิบัติการของคุณ น่าเสียดายที่ Delphi สามารถส่งออกเฉพาะไฟล์ .map เท่านั้น (กำหนดค่าผ่านโครงการ -> ตัวเลือก -> การสร้าง -> คอมไพเลอร์ Delphi -> การเชื่อมโยง -> ไฟล์แผนที่) ซึ่งโดยทั่วไปยังไม่เพียงพอ คุณจะต้องใช้เครื่องมือ map2dbg ของบริษัทอื่นเพื่อแปลงเป็นไฟล์ .dbg เพื่อให้ API สัญลักษณ์นั้นสามารถเข้าใจได้ แม้ว่าไฟล์ .dbg อาจจะเพียงพอแล้ว แต่จะดีกว่าถ้าประมวลผลไฟล์เหล่านี้เพิ่มเติมด้วยการแปลงเป็น .pdb เวอร์ชันใหม่ผ่าน cv2pdb
หากต้องการสร้างสัญลักษณ์แก้ไขข้อบกพร่องโดยอัตโนมัติ ให้เพิ่มเหตุการณ์หลังการสร้างต่อไปนี้ในโครงการของคุณ:
map2dbg.exe $(OUTPUTPATH)
cv2pdb64.exe -n -s. -p$(OUTPUTNAME).pdb $(OUTPUTPATH)
Delphi ไม่มีตัวรวบรวมขยะ จึงมีเพียงไม่กี่ประเภทเท่านั้นที่ได้รับการจัดการแบบสำเร็จรูป: บันทึก สตริง อาร์เรย์ไดนามิก และอินเทอร์เฟซ ในทางกลับกัน คลาสและพอยน์เตอร์จำเป็นต้องมีการล้างข้อมูลอย่างชัดเจน ซึ่ง (ในรูปแบบที่ปลอดภัย) ต้องใช้การบล็อก แบบลองขั้นสุดท้าย ดังนั้นจึงทำให้โปรแกรมมีความซับซ้อนอย่างมาก เพื่อแก้ไขปัญหานี้ ไลบรารีมีสิ่งอำนวยความสะดวกสำหรับการจัดการอายุการใช้งานอัตโนมัติสำหรับหน่วยความจำและทรัพยากรอื่นๆ ซึ่งนำมาใช้ใน DelphiUtils.AutoObjects ด้วยการใช้ประเภทจากโมดูลนี้ เราแนะนำให้คอมไพเลอร์สร้างโค้ดที่ปลอดภัยต่อข้อยกเว้นโดยอัตโนมัติสำหรับการนับการอ้างอิง และปล่อยอ็อบเจ็กต์ในบทส่งท้ายของฟังก์ชันโดยอัตโนมัติ โมดูลนี้กำหนดอินเทอร์เฟซต่างๆ สำหรับทรัพยากรประเภทต่างๆ ที่อาจต้องมีการล้างข้อมูล โดยจะแนะนำลำดับชั้นต่อไปนี้:
กราฟ LR;
กราฟย่อย id1[ทรัพยากรใดๆ]
IAutoรีลีสได้
จบ
กราฟย่อย id2[ค่า THandle]
ฉันจัดการ
จบ
กราฟย่อย id3 [คลาส Delphi]
IAutoObject[IAutoObject<T>]
จบ
กราฟย่อย id4 [ตัวชี้]
IAutoPointer[IAutoPointer<P>]
จบ
กราฟย่อย id5 [ขอบเขตหน่วยความจำ]
IMemory[IMemory<P>]
จบ
IAutoReleasable -> IHandle;
IAutoReleasable -> IAutoObject;
IAutoReleasable -> IAutoPointer;
IAutoPointer -> IMemory;
IAutoReleasable เป็นประเภทพื้นฐานสำหรับทรัพยากรทั้งหมดที่จำเป็นต้องดำเนินการกับการล้างข้อมูล (อัตโนมัติ) IHandle ทำหน้าที่เป็นตัวห่อหุ้มสำหรับทรัพยากรที่กำหนดโดยค่า THandle IAutoObject<T> เป็น wrapper ทั่วไปสำหรับการปล่อยคลาส Delphi โดยอัตโนมัติ (เช่น สิ่งใดก็ตามที่มาจาก TObject) IAutoPointer<P> กำหนดอินเทอร์เฟซที่คล้ายกันสำหรับการปล่อยพอยน์เตอร์ที่จัดสรรแบบไดนามิก (โดยที่ขนาดของขอบเขตไม่เกี่ยวข้อง) IMemory<P> จัดเตรียม wrapper สำหรับขอบเขตหน่วยความจำในขนาดที่ทราบ ซึ่งสามารถเข้าถึงได้ผ่านตัวชี้ที่พิมพ์ เช่น บันทึกแบบกล่องที่มีการจัดการและไม่ได้รับการจัดการ
สูตรการใช้สิ่งอำนวยความสะดวกนี้มีดังต่อไปนี้:
กำหนดตัวแปรทุกตัวที่ต้องรักษา (อาจแชร์) ความเป็นเจ้าของบนออบเจ็กต์โดยใช้อินเทอร์เฟซใดอินเทอร์เฟซหนึ่ง:
ใช้ตัวช่วย อัตโนมัติ สำหรับการจัดสรร/คัดลอก/จับภาพวัตถุอัตโนมัติ:
เมื่อจำเป็น ให้ใช้การชี้ไปทางด้านซ้ายซึ่งจะช่วยหลีกเลี่ยงข้อมูลประเภทที่ซ้ำกัน และทำให้ไวยากรณ์สั้นลง
ตัวอย่างเช่น นี่คือโค้ดที่ปลอดภัยสำหรับการทำงานกับ TStringList โดยใช้แนวทางแบบคลาสสิก:
var
x: TStringList;
begin
x := TStringList.Create;
try
x.Add( ' Hi there ' );
x.SaveToFile( ' test.txt ' );
finally
x.Free;
end ;
end ;ตามที่คุณสามารถจินตนาการได้ การใช้วัตถุมากขึ้นในฟังก์ชันนี้จะเพิ่มความซับซ้อนอย่างมีนัยสำคัญและไม่เชิงเส้น อีกทางหนึ่ง นี่คือโค้ดที่เทียบเท่าซึ่งใช้ IAutoObject และขยายขนาดได้ดีขึ้น:
uses
DelphiUtils.AutoObjects;
var
x: IAutoObject<TStringList>;
begin
x := Auto.From(TStringList.Create);
x.Self.Add( ' Hi there ' );
x.Self.SaveToFile( ' test.txt ' );
end ; คอมไพเลอร์ปล่อยโค้ดการล้างข้อมูลที่จำเป็นลงในบทส่งท้ายของฟังก์ชัน และตรวจสอบให้แน่ใจว่าจะดำเนินการได้แม้ว่าจะมีข้อยกเว้นเกิดขึ้นก็ตาม นอกจากนี้ วิธีการนี้ยังช่วยให้รักษาความเป็นเจ้าของร่วมกันเหนือออบเจ็กต์ที่ซ่อนอยู่ ซึ่งช่วยให้คุณบันทึกการอ้างอิงที่สามารถอยู่ได้นานกว่าฟังก์ชันปัจจุบัน (โดยการจับภาพในฟังก์ชันที่ไม่ระบุชื่อและส่งคืน เป็นต้น) หากคุณไม่ต้องการฟังก์ชันนี้และต้องการรักษาเจ้าของเพียงคนเดียวที่ปล่อยอ็อบเจ็กต์ว่างเมื่อฟังก์ชันออก คุณสามารถลดความซับซ้อนของไวยากรณ์ให้ดียิ่งขึ้นไปอีก:
uses
NtUtils;
var
x: TStringList;
begin
x := Auto.From(TStringList.Create).Self;
x.Add( ' Hi there ' );
x.SaveToFile( ' test.txt ' );
end ; รหัสนี้ยังคงเทียบเท่ากับรหัสเริ่มต้น ภายในจะสร้างตัวแปรท้องถิ่นที่ซ่อนอยู่ซึ่งจัดเก็บอินเทอร์เฟซและเผยแพร่อ็อบเจ็กต์ในภายหลัง
เมื่อทำงานกับการจัดสรรหน่วยความจำแบบไดนามิก การใช้การแคสต์ด้านซ้ายจะสะดวกดังต่อไปนี้:
var
x: IMemory<PByteArray>;
begin
IMemory(x) := Auto.AllocateDynamic( 100 );
x.Data[ 15 ] := 20 ;
end ;คุณยังสามารถสร้างเรกคอร์ดที่มีการจัดการแบบกล่อง (จัดสรรบนฮีป) ที่อนุญาตให้ใช้ประเภทค่าร่วมกันราวกับว่าเป็นประเภทอ้างอิง โปรดทราบว่ายังสามารถรวมเขตข้อมูลที่ได้รับการจัดการ เช่น สตริง Delphi และอาร์เรย์แบบไดนามิก - คอมไพลเลอร์จะปล่อยโค้ดเพื่อปล่อยโดยอัตโนมัติ:
type
TMyRecord = record
MyInteger: Integer;
MyArray: TArray<Integer>;
end ;
PMyRecord = ^TMyRecord;
var
x: IMemory<PMyRecord>;
begin
IMemory(x) := Auto.Allocate<TMyRecord>;
x.Data.MyInteger := 42 ;
x.Data.MyArray := [ 1 , 2 , 3 ];
end ;เนื่องจาก Delphi ใช้การนับอ้างอิง จึงยังคงเป็นไปได้ที่จะรั่วไหลของหน่วยความจำหากวัตถุสองชิ้นมีการพึ่งพาแบบวงกลม คุณสามารถป้องกันไม่ให้เกิดขึ้นได้โดยใช้ การอ้างอิงที่ไม่รัดกุม การอ้างอิงดังกล่าวไม่นับรวมการยืดอายุการใช้งาน และตัวแปรที่จัดเก็บไว้จะกลายเป็น ศูนย์ โดยอัตโนมัติเมื่อวัตถุเป้าหมายถูกทำลาย คุณต้องอัปเกรดการอ้างอิงที่อ่อนแอเป็นการอ้างอิงที่รัดกุมก่อนจึงจะสามารถใช้งานได้ ดู Weak<I> จาก DelphiUtils.AutoObjects สำหรับรายละเอียดเพิ่มเติม
มีนามแฝงบางส่วนสำหรับประเภทตัวชี้ขนาดตัวแปรที่ใช้กันทั่วไป ต่อไปนี้คือตัวอย่างบางส่วน:
ตัวจัดการใช้ประเภท IHandle (ดู DelphiUtils.AutoObjects) ซึ่งเป็นไปตามตรรกะที่กล่าวถึงข้างต้น ดังนั้นจึงไม่จำเป็นต้องปิดอย่างชัดเจน คุณยังสามารถค้นหานามแฝงบางอย่างสำหรับ IHandle (IScmHandle, ISamHandle, ILsaHandle ฯลฯ) ซึ่งมีให้เพื่อความสะดวกในการอ่านโค้ดเท่านั้น
หากคุณต้องการเป็นเจ้าของค่าการจัดการใน IHandle คุณต้องมีคลาสที่ใช้อินเทอร์เฟซนี้และรู้วิธีปล่อยทรัพยากรที่ซ่อนอยู่ ตัวอย่างเช่น NtUtils.Objects กำหนดคลาสดังกล่าวสำหรับอ็อบเจ็กต์เคอร์เนลที่ต้องเรียก NtClose นอกจากนี้ยังแนบวิธีการช่วยเหลือเข้ากับ Auto เพื่อให้สามารถจับเคอร์เนลจัดการตามค่าผ่าน Auto.CaptureHandle(...) หากต้องการสร้าง IHandle ที่ไม่ใช่เจ้าของ ให้ใช้ Auto.RefHandle(...)
ชื่อของเรกคอร์ด คลาส และการแจงนับขึ้นต้นด้วย T และใช้ CamelCase (ตัวอย่าง: TTokenStatistics ) ตัวชี้ไปยังเรคคอร์ดหรือประเภทค่าอื่นๆ เริ่มต้นด้วย P (ตัวอย่าง: PTokenStatistics ) ชื่อของอินเทอร์เฟซเริ่มต้นด้วย I (ตัวอย่าง: ISid ) ค่าคงที่ใช้ ALL_CAPITALS คำจำกัดความทั้งหมดจากเลเยอร์ส่วนหัวที่มีชื่ออย่างเป็นทางการที่รู้จัก (เช่นประเภทที่กำหนดไว้ใน Windows SDK) จะถูกทำเครื่องหมายด้วยแอตทริบิวต์ SDKName ที่ระบุชื่อนี้
ฟังก์ชันส่วนใหญ่ใช้หลักการตั้งชื่อต่อไปนี้: คำนำหน้าของระบบย่อยที่มี x ต่อท้าย (Ntx, Ldrx, Lsax, Samx, Scmx, Wsx, Usrx, ...) + Action + Target/Object type/etc ชื่อฟังก์ชันยังใช้ CamelCase
ไลบรารีกำหนดเป้าหมายเป็น Windows 7 หรือสูงกว่า ทั้งรุ่น 32 และ 64 บิต แม้ว่าฟังก์ชันบางอย่างอาจมีเฉพาะใน Windows 11 เวอร์ชัน 64 บิตล่าสุดเท่านั้น ตัวอย่างบางส่วนคือ AppContainers และ ntdll syscall unhooking หากฟังก์ชันไลบรารีขึ้นอยู่กับ API ที่อาจไม่ปรากฏบน Windows 7 ฟังก์ชันนั้นจะใช้การนำเข้าแบบล่าช้าและตรวจสอบความพร้อมใช้งานในขณะรันไทม์
Delphi มาพร้อมกับระบบการสะท้อนที่หลากหลายซึ่งไลบรารีใช้ภายในเลเยอร์ NtUiLib ประเภทส่วนใหญ่ที่กำหนดไว้ในเลเยอร์ Headers ได้รับการตกแต่งด้วยแอตทริบิวต์ที่กำหนดเอง (ดู DelphiApi.Reflection) เพื่อให้บรรลุผล การตกแต่งเหล่านี้ปล่อยเมทาดาทาที่เป็นประโยชน์ซึ่งช่วยให้ไลบรารีแสดงประเภทข้อมูลที่ซับซ้อนได้อย่างแม่นยำ (เช่น PEB, TEB, USER_SHARED_DATA) ในรันไทม์ และสร้างรายงานที่น่าอัศจรรย์ด้วยโค้ดเพียงบรรทัดเดียว
นี่คือตัวอย่างการแสดง TSecurityLogonSessionData จาก Ntapi.NtSecApi โดยใช้ NtUiLib.Reflection.Types:

ภาพรวมวัตถุประสงค์ของโมดูลต่างๆ มีดังนี้
| หน่วยสนับสนุน | คำอธิบาย |
|---|---|
| DelphiUtils.AutoObjects | การจัดการอายุการใช้งานทรัพยากรอัตโนมัติ |
| DelphiUtils.กิจกรรมอัตโนมัติ | กิจกรรมที่ไม่ระบุตัวตนของสมาชิกหลายคน |
| DelphiUtils.Arrays | ผู้ช่วย TArray |
| DelphiUtils.Lists | รายการลิงค์คู่ทางพันธุกรรมดั้งเดิม |
| DelphiUtils.Async | ข้อกำหนดการสนับสนุน Async I/O |
| DelphiUtils.ExternalImport | ผู้ช่วย IAT คำหลักภายนอกของ Delphi |
| DelphiUtils.RangeChecks | ตัวช่วยตรวจสอบระยะ |
| NtUtils | ประเภทห้องสมุดทั่วไป |
| NtUtils.SysUtils | การจัดการสตริง |
| NtUtils ข้อผิดพลาด | การแปลงรหัสข้อผิดพลาด |
| NtUiLib.ข้อผิดพลาด | ค้นหาชื่อรหัสข้อผิดพลาด |
| NtUiLib.ข้อยกเว้น | การรวมข้อยกเว้น SysUtils |
| DelphiUiLib.Strings | การทำให้สวยงามของสตริง |
| DelphiUiLib การสะท้อนกลับ | รองรับ RTTI พื้นฐาน |
| DelphiUiLib.Reflection.Numeric | การแสดง RTTI ของประเภทตัวเลข |
| DelphiUiLib.Reflection.Records | การแสดง RTTI ของประเภทเรคคอร์ด |
| DelphiUiLib.Reflection.Strings | RTTI prettification ของสตริง |
| NtUiLib.Reflection.Types | การแสดง RTTI สำหรับประเภททั่วไป |
| NtUiLib.คอนโซล | ตัวช่วย I/O คอนโซล |
| NtUiLib.TaskDialog | GUI ที่ใช้ TaskDialog |
| NtUiLib.ข้อผิดพลาดกล่องโต้ตอบ | กล่องโต้ตอบข้อผิดพลาด GUI |
| NtUiLib.ข้อยกเว้นกล่องโต้ตอบ | กล่องโต้ตอบข้อยกเว้น GUI |
| หน่วยระบบ | คำอธิบาย |
|---|---|
| NtUtils.ActCtx | บริบทการเปิดใช้งาน |
| NtUtils.AntiHooking | ยกเลิกการเชื่อมต่อและ syscall โดยตรง |
| NtUtils.คอม | COM, IDispatch, WinRT |
| NtUtils.Csr | การลงทะเบียน CSRSS/SxS |
| NtUtils.DbgHelp | สัญลักษณ์ DbgHelp และดีบัก |
| NtUtils.Debug | แก้ไขข้อบกพร่องวัตถุ |
| NtUtils.Dism | DISM API |
| NtUtils.สิ่งแวดล้อม | ตัวแปรสภาพแวดล้อม |
| NtUtils.สิ่งแวดล้อมผู้ใช้ | ตัวแปรสภาพแวดล้อมของผู้ใช้ |
| NtUtils.สิ่งแวดล้อม.ระยะไกล | ตัวแปรสภาพแวดล้อมของกระบวนการอื่นๆ |
| NtUtils.Files | ชื่อไฟล์ Win32/NT |
| NtUtils.Files.Open | ไฟล์และไปป์เปิด/สร้าง |
| NtUtils.Files.Operations | การดำเนินงานไฟล์ |
| NtUtils.Files.Directories | การแจงนับไดเรกทอรีไฟล์ |
| NtUtils.Files.FltMgr | API ตัวจัดการตัวกรอง |
| NtUtils.Files.Mup | ผู้ให้บริการ UNC หลายราย |
| NtUtils.Files.Volumes | การดำเนินการตามปริมาณ |
| NtUtils.Files.Control | การดำเนินงาน FSCTL |
| NtUtils.ImageHlp | การแยกวิเคราะห์ PE |
| NtUtils.ImageHlp.Syscalls | การเรียกค้นหมายเลข Syscall |
| NtUtils.ImageHlp.DbgHelp | สัญลักษณ์สาธารณะที่ไม่มี DbgHelp |
| NtUtils.งาน | วัตถุงานและไซโล |
| NtUtils.งาน.ระยะไกล | แบบสอบถามออบเจ็กต์งานข้ามกระบวนการ |
| NtUtils.Ldr | รูทีน LDR และการแยกวิเคราะห์ |
| NtUtils.Lsa | นโยบายแอลเอสเอ |
| NtUtils.Lsa.การตรวจสอบ | นโยบายการตรวจสอบ |
| NtUtils.Lsa.Sid | การค้นหา SID |
| NtUtils.Lsa.Logon | เซสชันการเข้าสู่ระบบ |
| NtUtils.Manifests | ตัวสร้างรายการ Fusion/SxS |
| NtUtils.หน่วยความจำ | การดำเนินงานของหน่วยความจำ |
| NtUtils.MiniDumps | การแยกวิเคราะห์รูปแบบ Minidump |
| NtUtils.Objects | วัตถุเคอร์เนลและจุดจับ |
| NtUtils.Objects.Snapshots | จัดการสแนปช็อต |
| NtUtils.Objects.Namespace | เนมสเปซวัตถุ NT |
| NtUtils.Objects.Remote | การดำเนินการจัดการข้ามกระบวนการ |
| NtUtils.Objects.เปรียบเทียบ | จัดการการเปรียบเทียบ |
| NtUtils.แพ็คเกจ | แพ็คเกจแอปและตระกูลแพ็คเกจ |
| NtUtils.Packages.SRCache | แคชที่เก็บของรัฐ |
| NtUtils.Packages.WinRT | ข้อมูลแพ็คเกจที่ใช้ WinRT |
| NtUtils.Power | ฟังก์ชั่นที่เกี่ยวข้องกับพลังงาน |
| NtUtils กระบวนการ | ประมวลผลวัตถุ |
| NtUtils กระบวนการ ข้อมูล | ประมวลผลข้อมูลแบบสอบถาม/ชุด |
| NtUtils.Processes.Info.Remote | ประมวลผลแบบสอบถาม/ตั้งค่าผ่านการแทรกโค้ด |
| NtUtils กระบวนการ โมดูล | การแจงนับ LDR ข้ามกระบวนการ |
| NtUtils กระบวนการ สแนปชอต | การแจงนับกระบวนการ |
| NtUtils กระบวนการ สร้าง | คำจำกัดความการสร้างกระบวนการทั่วไป |
| NtUtils.Processes.Create.Win32 | วิธีการสร้างกระบวนการ Win32 |
| NtUtils.Processes.Create.Shell | วิธีการสร้างกระบวนการเชลล์ |
| NtUtils.Processes.Create.Native | NtCreateUserProcess และผู้ร่วม |
| NtUtils กระบวนการ สร้าง คู่มือ | NtCreateProcessEx |
| NtUtils.Processes.Create.Com | การสร้างกระบวนการที่ใช้ COM |
| NtUtils กระบวนการ สร้าง Csr | การสร้างกระบวนการผ่าน SbApiPort |
| NtUtils.Processes.Create.Package | การเปิดใช้งาน Appx |
| NtUtils.Processes.Create.Remote | การสร้างกระบวนการด้วยการฉีดโค้ด |
| NtUtils.Processes.Create.Clone | กระบวนการโคลนนิ่ง |
| NtUtils.โปรไฟล์ | โปรไฟล์ผู้ใช้และ AppContainer |
| NtUtils.Registry | คีย์รีจิสทรี |
| NtUtils.Registry.ออฟไลน์ | การจัดการรังแบบออฟไลน์ |
| NtUtils.Registry.VReg | การจำลองเสมือนของรีจิสทรีแบบไซโล |
| NtUtils.Sam | ฐานข้อมูลแซม |
| NtUtils.Sections | วัตถุฉายภาพส่วน/หน่วยความจำ |
| NtUtils.ความปลอดภัย | ตัวอธิบายความปลอดภัย |
| NtUtils.Security.Acl | ACL และ ACE |
| NtUtils.Security.Sid | SID |
| NtUtils.Security.AppContainer | AppContainer และ SID ความสามารถ |
| NtUtils.Shellcode | การฉีดโค้ด |
| NtUtils.Shellcode.Dll | การฉีด DLL |
| NtUtils.Shellcode.Exe | การฉีด EXE |
| NtUtils.Svc | บริการ SCM |
| NtUtils.Svc.SingleTaskSvc | การดำเนินการบริการ |
| NtUtils การซิงโครไนซ์ | การซิงโครไนซ์เบื้องต้น |
| NtUtils.System | ข้อมูลระบบ |
| NtUtils.TaskScheduler | ตัวกำหนดเวลางาน |
| NtUtils.กระทู้ | วัตถุด้าย |
| NtUtils.Tokens.Info | สอบถามกระทู้/ข้อมูลการตั้งค่า |
| NtUtils.Threads.Worker | คนทำงานเธรด (กลุ่มเธรด) |
| NtUtils.โทเค็น | วัตถุโทเค็น |
| NtUtils.Tokens.เลียนแบบ | การเลียนแบบโทเค็น |
| NtUtils.Tokens.Logon | ผู้ใช้ & เข้าสู่ระบบ S4U |
| NtUtils.Tokens.AppModel | นโยบายโทเค็น AppModel |
| NtUtils.ธุรกรรม | ออบเจ็กต์ธุรกรรม (TmTx) |
| NtUtils.ธุรกรรม.ระยะไกล | บังคับให้กระบวนการเข้าสู่ธุรกรรม |
| NtUtils.UserManager | บริการตัวจัดการผู้ใช้ (Umgr) API |
| NtUtils.Wim | Windows Imaging (*.wim) API |
| NtUtils.WinSafer | API ที่ปลอดภัยยิ่งขึ้น |
| NtUtils.WinStation | API เซิร์ฟเวอร์เทอร์มินัล |
| NtUtils.WinUser | User32/GUI API |
| NtUtils.WinUser.WindowAffinity | การปรับเปลี่ยนความสัมพันธ์ของหน้าต่าง |
| NtUtils.WinUser.WinstaLock | การล็อคและปลดล็อคสถานีหน้าต่าง |
| NtUtils.XmlLite | การแยกวิเคราะห์และสร้าง XML ผ่าน XmlLite |
| NtUiLib.การเติมข้อความอัตโนมัติ | เติมข้อมูลอัตโนมัติสำหรับการควบคุมการแก้ไข |
| NtUiLib.AutoCompletion.Namespace | การเติมเนมสเปซวัตถุ NT ให้สมบูรณ์อัตโนมัติ |
| NtUiLib.การทำให้สมบูรณ์อัตโนมัติ.Sid | SID เติมข้อมูลอัตโนมัติ |
| NtUiLib.การทำให้สมบูรณ์อัตโนมัติ.Sid.Common | ผู้ให้บริการ/ตัวจดจำชื่อ SID แบบธรรมดา |
| NtUiLib.AutoCompletion.Sid.AppContainer | AppContainer และผู้ให้บริการ/ตัวจดจำ SID แพ็คเกจ |
| NtUiLib.AutoCompletion.Sid.ความสามารถ | ผู้ให้บริการ/ตัวจดจำความสามารถ SID |
| NtUiLib.WinCred | กล่องโต้ตอบข้อมูลรับรอง |