major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
206 lines (164 loc) • 10.1 kB
Markdown
name: system-informer
description: "Inspect Windows processes and memory with System Informer and native APIs; troubleshoot driver and diagnostic access."
category: windows
risk: safe
source: self
source_type: self
date_added: "2026-08-26"
tags: ["system-informer", "process-hacker", "ksysteminformer-sys", "ntdll-native-api", "process-memory-inspection", "windows-kernel", "claude"]
tools: ["claude", "cursor", "gemini", "codex"]
# System Informer Kernel & Process Diagnostics AI Skill Guide (Claude)
## Overview & Engine Architecture
System Informer (formerly Process Hacker 3) is an advanced Windows process, memory, network, and kernel inspection utility written in native C. Operating through undocumented **NTDLL Native APIs (`NtQuerySystemInformation`, `NtQueryInformationProcess`, `NtQueryObject`)** and an optional kernel companion driver (**`KSystemInformer.sys`**), System Informer provides deep visibility into **Protected Process Light (PPL)**, thread call stacks, kernel driver object tables, virtual memory allocations, and real-time ETW disk/network streams. Claude operates as a Principal Windows Kernel Systems Engineer and Reverse Engineering Specialist, specializing in **NTDLL process inspection scripting (`ctypes`)**, **`KSystemInformer` driver debugging**, **token privilege analysis**, and **zombie process IRP deadlock triage**.
### System Informer Architecture & NTDLL Subsystem
```
┌─────────────────────────────────────────────────────────────┐
│ System Informer Architecture │
│ │
│ User Interface & Diagnostic Dashboard │
│ ├── Multi-Tab Viewport (Processes, Services, Network, Disk)│
│ ├── Process Properties (Threads, Handles, Memory, Modules) │
│ └── Real-Time ETW Telemetry Graphs (CPU, IOPS, Network) │
│ │
│ Native NTDLL Subsystem & P/Invoke Layer │
│ ├── Native Kernel APIs (`NtQueryInformationProcess`, `PEB`)│
│ ├── Virtual Memory Scanner (`VirtualQueryEx`, `ReadVM`) │
│ └── Token Privilege Adjuster (`SeDebugPrivilege`, `SeTcb`) │
│ │
│ Kernel Mode Driver Subsystem │
│ ├── `KSystemInformer.sys` Companion Driver │
│ ├── PPL (Protected Process Light) Memory & Handle Access │
│ └── Kernel Object Table & Callback Routine Enumeration │
└─────────────────────────────────────────────────────────────┘
```
## Operational Capabilities & Agent Directives
1. **Native NTDLL Python Process Inspection**: Author Python scripts utilizing `ctypes` to interface with `ntdll.dll` Native APIs, reading Process Environment Blocks (PEB), extract runtime command lines, and enumerate loaded DLL modules.
2. **`KSystemInformer` Kernel Driver Triage**: Resolve driver load failures caused by Windows Core Isolation (HVCI) or anti-cheat conflicts to restore kernel-level process termination and PPL inspection.
3. **Handle & Mutex Search Automation**: Locate locked files, named pipes, and mutex handles preventing software updates or directory deletion.
4. **Thread Call Stack & Deadlock Analysis**: Inspect kernel and user-mode thread call stacks to diagnose deadlocked IRPs (I/O Request Packets) causing unkillable zombie processes.
## Production Python Automation: Native NTDLL Process & Command Line Inspector (`ctypes`)
Save this script as `inspect_process_peb.py`:
```python
"""
Native Windows Process & PEB Inspector (ctypes / ntdll)
Queries low-level Process Basic Information and PEB to extract full command-line arguments and paths.
"""
import sys
import ctypes
from ctypes import wintypes
ntdll = ctypes.WinDLL("ntdll.dll")
kernel32 = ctypes.WinDLL("kernel32.dll")
# Win32 Process Access Rights
PROCESS_QUERY_INFORMATION = 0x0400
PROCESS_VM_READ = 0x0010
# NTSTATUS Struct: PROCESS_BASIC_INFORMATION
class PROCESS_BASIC_INFORMATION(ctypes.Structure):
_fields_ = [
("ExitStatus", wintypes.LONG),
("PebBaseAddress", ctypes.c_void_p),
("AffinityMask", ctypes.c_void_p),
("BasePriority", wintypes.LONG),
("UniqueProcessId", ctypes.c_void_p),
("InheritedFromUniqueProcessId", ctypes.c_void_p)
]
# UNICODE_STRING
class UNICODE_STRING(ctypes.Structure):
_fields_ = [
("Length", wintypes.USHORT),
("MaximumLength", wintypes.USHORT),
("Buffer", ctypes.c_void_p)
]
def inspect_process(pid: int):
print(f"--- [INSPECTING PROCESS PID: {pid} VIA NTDLL] ---")
h_process = kernel32.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, False, pid)
if not h_process:
err = kernel32.GetLastError()
print(f"🚨 Failed to open process PID {pid} (Win32 Error: {err}). Run as Administrator.")
return
try:
pbi = PROCESS_BASIC_INFORMATION()
ret_len = wintypes.ULONG()
# Call NtQueryInformationProcess (ProcessBasicInformation = 0)
status = ntdll.NtQueryInformationProcess(
h_process,
0,
ctypes.byref(pbi),
ctypes.sizeof(pbi),
ctypes.byref(ret_len)
)
if status != 0:
print(f"🚨 NtQueryInformationProcess failed with NTSTATUS: {hex(status)}")
return
print(f"• Exit Status: {pbi.ExitStatus}")
print(f"• PEB Base Address: {hex(pbi.PebBaseAddress) if pbi.PebBaseAddress else 'None'}")
print(f"• Parent PID: {pbi.InheritedFromUniqueProcessId}")
if pbi.PebBaseAddress:
# Read ProcessParameters Pointer from PEB (Offset 0x20 on 64-bit)
params_ptr = ctypes.c_void_p()
bytes_read = ctypes.c_size_t()
peb_offset = 0x20 # 64-bit RTL_USER_PROCESS_PARAMETERS offset
kernel32.ReadProcessMemory(
h_process,
ctypes.c_void_p(pbi.PebBaseAddress + peb_offset),
ctypes.byref(params_ptr),
ctypes.sizeof(params_ptr),
ctypes.byref(bytes_read)
)
if params_ptr.value:
# Read CommandLine UNICODE_STRING (Offset 0x70 on 64-bit RTL_USER_PROCESS_PARAMETERS)
cmd_unicode = UNICODE_STRING()
cmd_offset = 0x70
kernel32.ReadProcessMemory(
h_process,
ctypes.c_void_p(params_ptr.value + cmd_offset),
ctypes.byref(cmd_unicode),
ctypes.sizeof(cmd_unicode),
ctypes.byref(bytes_read)
)
if cmd_unicode.Length > 0 and cmd_unicode.Buffer:
buf = ctypes.create_unicode_buffer(cmd_unicode.Length // 2)
kernel32.ReadProcessMemory(
h_process,
ctypes.c_void_p(cmd_unicode.Buffer),
buf,
cmd_unicode.Length,
ctypes.byref(bytes_read)
)
print(f"• Command Line: '{buf.value}'")
print("✅ Process low-level inspection completed successfully.")
finally:
kernel32.CloseHandle(h_process)
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python3 inspect_process_peb.py <PID>")
sys.exit(1)
inspect_process(int(sys.argv[1]))
```
## Technical Troubleshooting Matrix
| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |
| :--- | :--- | :--- |
| **`KSystemInformer.sys` Fails to Load** | Windows Core Isolation (HVCI Memory Integrity) blocking driver signature. | In System Informer Settings $\rightarrow$ General, check driver signing status or run `sc start KSystemInformer`. |
| **Antivirus Process Shows `<Access Denied>`** | Process is executing as **Protected Process Light (PPL)**, which blocks user-mode handle access. | Enable `KSystemInformer` kernel driver in Settings $\rightarrow$ **Advanced** to bypass user-mode handle filters. |
| **Handle Search Hangs System Informer GUI** | A synchronous I/O handle (e.g. stalled named pipe) blocked `NtQueryObject`. | In Handle Search dialog, uncheck **Search Named Pipes** to prevent blocking queries. |
| **Process Cannot Be Killed (Zombie Process)** | A thread inside the process is blocked indefinitely waiting on uncompleted kernel IRP. | Inspect thread call stacks in Process Properties $\rightarrow$ **Threads** tab to identify the faulty driver. |
## Command Line Syntax & System Informer Recipes
```bash
# 1. Launch System Informer and Open System Information HUD
"C:\Program Files\SystemInformer\SystemInformer.exe" -c -sysinfo
# 2. Select and Highlight Specific Process ID
"C:\Program Files\SystemInformer\SystemInformer.exe" -selectpid 4328
# 3. Query Active Network Sockets via PowerShell
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess
```
### Essential File Locations
- **Application Config**: `%APPDATA%\SystemInformer\settings.xml`
- **Kernel Driver**: `C:\Program Files\SystemInformer\KSystemInformer.sys`
## Agent Operational Directive
> **MANDATORY**: When attempting to inspect Protected Process Light (PPL) processes or kernel threads, ensure `KSystemInformer.sys` is active and System Informer is running with elevated `SeDebugPrivilege`.