Analyze Windows driver trust boundaries and kernel evidence for game-security research. Use for IOCTL authorization, callbacks and IRQL, driver provenance, DSE/PatchGuard, VBS/HVCI, build-specific internals, and crash or memory forensics; select repository resources for symbol comparison, ETW metadata, driver-unit coverage and offline dumps. Distinguish documented contracts, observed host state and inferred internals; report privilege prerequisites, mitigation scope, missing coverage and benign alternatives.
60
71%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.claude/skills/windows-kernel/SKILL.mdThis skill covers Windows kernel internals that matter for game security research: object callbacks, process and image notifications, APC behavior, driver loading, trust enforcement, memory manager structures, and the bookkeeping anti-cheats inspect to detect hostile drivers or hidden executable code.
Treat undocumented structures, offsets, globals, and allocator internals as
build-specific. Verify them against symbols and runtime observations for the
exact Windows build; use research-rigor before
generalizing a PoC or forensic heuristic.
For event provenance, provider/callback scope and absent telemetry, use observation coverage.
| Threat class | Necessary capability or boundary | Evidence and defensive focus |
|---|---|---|
| Dangerous privileged interface | A caller can reach sensitive driver operations | Device ACLs, per-operation authorization, constrained functionality |
| Vulnerable signed-driver abuse | An affected driver is loaded or loadable and its interface reachable | Exact hash/version, provenance, loaded inventory, applicable policy |
| Driver-mediated acquisition | A host kernel acquisition component and usable interface | Driver/service identity, acquisition process, interface access, timeline |
| Kernel code/data tampering | Ability to modify the affected protected state | Trusted comparison evidence, ownership, protection and integrity events |
Review buffer lengths, output initialization, object lifetime, cancellation, and IRQL alongside caller authorization. Signed code can still expose unsafe operations. The table is a threat-model synthesis; actual reachability requires evidence for the specific build and configuration. Microsoft driver security checklist
Distinguish VBS/HVCI capability, configuration, and running state. Memory integrity imposes executable-memory constraints; compatibility does not prove every driver interface or data operation safe. Memory integrity compatibility
Driver blocklists have incomplete coverage. Distinguish controls that prevent writing a vulnerable driver to disk from policies that block loading it, and record the active policy/version rather than assuming protection from the OS name. Microsoft driver block rules
Use Driver Verifier on a recovery-capable test system when evaluating owned drivers; preserve tested configuration and crash artifacts. It can deliberately bugcheck a system and does not establish a low false-positive anti-abuse detector. Driver Verifier
For acquisition relayed over USB or a network, use the source/transport distinction. Legitimate incident response can produce the same acquisition artifacts. Sources in this section were reviewed on 2026-09-09.
Cheat > PatchGuard-relatedCheat > Driver Signature enforcementCheat > Windows Kernel ExplorerCheat > EFI Driver (cross-reference with game-hacking skill)Cheat > Vulnerable DriverAnti Cheat > Detection:AttachAnti Cheat > Detection:HideAnti Cheat > Detection:Vulnerable DriverAnti Cheat > Detection:Spoof StackAnti Cheat > Windows Ring3 CallbackAnti Cheat > Windows Ring0 CallbackAnti Cheat > Information System & ForensicsSome Tricks > Windows Ring0Windows Security Features- Load local ntoskrnl image (typically C:\Windows\System32\ntoskrnl.exe)
- Use dbghelp + symbol server path (srv*cache*https://msdl.microsoft.com/download/symbols)
to resolve exported symbol RVAs and type information
- Build structure-aware field lookup:
- Query field offset directly (e.g., _EPROCESS.Token)
- Enumerate all members of a target struct (_TOKEN, _EPROCESS, etc.)
- Search a field name across all known structs (useful when parent type is unknown)
- Keep symbol path configurable for offline/private symbol repositories- Reduces hardcoded-offset fragility across Windows builds
- Helps map kernel object layouts used by anti-cheat and drivers
- Supports rapid adaptation when anti-cheat-relevant fields shift
(EPROCESS, ETHREAD, token/handle/security-related members)- Map executable sections of ntoskrnl image in user mode
- Scan for short control-flow gadgets (e.g., pop rcx ; ret, jmp rax)
- Use as a research primitive for:
- ROP chain feasibility analysis
- Kernel exploit mitigation evaluation
- Anti-cheat hardening review against gadget-dependent attack paths- Protects critical kernel structures
- Periodic verification checks
- BSOD on tampering detection
- Multiple trigger mechanisms- Requires signed drivers
- CI.dll verification
- Test signing mode
- WHQL certificationArchitecture:
- Uses the Windows hypervisor to create an isolated execution environment
- Splits the system into Virtual Trust Levels (VTLs)
- VTL0: Normal world — standard Windows kernel and user-mode processes
- VTL1: Secure world — Secure Kernel, security policy enforcement
- VTL1 is designed to remain isolated from a compromised VTL0, assuming the
hypervisor, secure kernel, hardware, and configuration path remain trustworthy
- Three main buckets:
- Memory-protection features (HVCI)
- Virtual Trust Levels (VTL0/VTL1 separation)
- VBS enclaves (isolated execution for selected workloads)- Also known as Memory Integrity
- Ensures only trusted, validated code executes in kernel mode
- Combines Windows hypervisor + Secure Kernel (VTL1) for enforcement
- Key mechanism: W→X transition restriction
- Enforced code pages are not intended to be writable from VTL0
- Executability is granted only after the configured code-integrity checks
- Enforcement pipeline:
- Code integrity policy defines what is trusted
- Hypervisor memory enforcement via second-stage address translation (EPT/SLAT)
- Once a kernel page is validated, strict execution rules are enforced
- Driver compatibility requirements: drivers must be HVCI-compatible- UEFI-based boot verification
- Boot loader chain validation
- Kernel signature checks
- DBX (forbidden signatures)
- Foundation for attestation and DMA-hardening assumptionsPsSetCreateProcessNotifyRoutine
PsSetCreateProcessNotifyRoutineEx
PsSetCreateProcessNotifyRoutineEx2PsSetCreateThreadNotifyRoutine
PsSetCreateThreadNotifyRoutineExPsSetLoadImageNotifyRoutine
PsSetLoadImageNotifyRoutineExObRegisterCallbacks
// OB_OPERATION_HANDLE_CREATE
// OB_OPERATION_HANDLE_DUPLICATEKeInitializeApc
KeInsertQueueApc
KeStackAttachProcess
RtlWalkFrameChainCmRegisterCallback
CmRegisterCallbackExFltRegisterFilter
// IRP_MJ_CREATE, IRP_MJ_READ, etc.NTSTATUS DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
) {
DriverObject->DriverUnload = DriverUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl;
// Create device, symbolic link...
return STATUS_SUCCESS;
}- gdrv.sys (Gigabyte)
- iqvw64e.sys (Intel)
- MsIo64.sys
- Mhyprot2.sys (Genshin Impact)
- dbutil_2_3.sys (Dell)
- RTCore64.sys (MSI)
- Capcom.sys- InfinityHook technique
- HalPrivateDispatchTable
- System call tracingArchitecture:
- Providers: kernel or user-mode components that emit events
- Manifest-based providers (registered via wevtutil)
- TraceLogging providers (self-describing, no manifest)
- MOF providers (legacy WMI-based)
- Consumers: tools that subscribe to and process events
- Real-time consumers (ETW sessions)
- Log file consumers (.etl files)
- Controllers: manage sessions (xperf, tracelog, logman)
Key kernel providers:
Microsoft-Windows-Kernel-Process (process/thread lifecycle)
Microsoft-Windows-Kernel-File (file I/O)
Microsoft-Windows-Kernel-Audit-API-Calls (security-sensitive APIs)- Microsoft-Windows-Threat-Intelligence
- Available to PPL (Protected Process Light) and above
- Events: NtReadVirtualMemory, NtWriteVirtualMemory, NtMapViewOfSection on protected processes
- Used by EDR and anti-cheat for detecting memory access to protected processes
- Attackers target: patch EtwThreatIntProvRegHandle or EtwpEventWriteFull- Patch EtwEventWrite in ntdll.dll (user-mode ETW silencing)
- Patch nt!EtwpEventWriteFull in kernel (kernel-mode ETW silencing)
- A debugger-related thread setting does not establish ETW invisibility;
undocumented cross-subsystem effects need build/provider-specific evidence
- Remove provider registration by walking EtwRegistration list
- EPT-based protection can defend ETW structures from tamperingTreat allocator internals as hypotheses tied to an exact kernel binary, architecture, configuration and matching symbols. Internal structure offsets, size thresholds, encoded headers, cache depths and allocation-routing diagrams are not a stable Windows driver interface. A symbol name without sufficient type information does not establish a layout; public and private symbol content differ. Microsoft symbol scope
Separate the public allocation request from its observed allocator path. Record pool flags, requested size, lifetime, calling/access IRQL and any special-pool or verifier configuration. If a dump or source study identifies size-class, variable-size, segment-backed or large-allocation paths, report only the path supported for that artifact. Do not infer the introduction date or every later layout from the availability of a public API.
For corruption analysis, preserve the useful threat classes: out-of-bounds access, use after free, double free, uninitialized disclosure and metadata damage. Each requires evidence of the faulty access or lifetime boundary. A crash, unusual allocation pattern or integrity-check failure alone does not establish deliberate exploitation, a specific corruption mechanism or successful privilege escalation. Do not turn historical metadata-decoding formulas into a current parser contract.
ExAllocatePool2 and ExAllocatePool3 document Windows 10 version 2004 as
their minimum supported client. The latter adds extended parameters; match the
particular parameter contract to the target WDK and OS.POOL_FLAG_UNINITIALIZED is used.
Allocation initialization does not cover later buffer reuse or incomplete
construction of a larger object. Review information disclosure and output
initialization before removing explicit clearing.DISPATCH_LEVEL, Pool2 requires nonpaged allocation; memory accessed there
must remain nonpaged even if it was allocated at a lower IRQL.ExAllocatePool2, ExAllocatePool3.
Microsoft's 2020 KDP architecture article describes static data protection and dynamic secure-pool allocations using VBS/SLAT. It is historical implementation context, not evidence that a present machine protects every pool allocation or that an arbitrary Pool3 allocation is secure. Establish the applicable API, successful protection state, exact region and lifecycle, and the trustworthiness of the hypervisor and policy path. Content protection does not by itself prove that every reference to that content, caller or update operation is authorized. Microsoft KDP architecture
Pool tags are caller-supplied labels used by debugging and tracking tools;
PoolMon groups memory use by tag. They are leads for attribution, not
cryptographic driver identities. A rare tag, a shared tag or a lookup in
pooltag.txt cannot by itself establish which signed binary allocated a buffer,
that a hidden driver is present, or that the allocation is malicious.
PoolMon scope
If a report invokes PiDDBCacheTable, MmUnloadedDrivers, PoolBigPageTable or
similar internal names, require an exact-build definition, collection method,
retention/coverage limits and supporting artifacts. Do not assume a universal
field layout, complete driver history or a one-to-one relationship between a
pool allocation and a driver object. Missing or malformed data can reflect
image incompleteness, stale symbols, reuse, collection effects or corruption.
For an existing authorized image, record its provenance/hash, acquisition time, OS/architecture, symbol identity, parser version and unavailable regions. Keep allocation facts, ownership hypotheses and security conclusions separate. Correlate available allocation stacks, loaded-module provenance, driver/service records and independent telemetry. Explain benign alternatives before assigning intent to executable memory, unrecognized tags or unusual allocation counts.
A negative scan describes the selected parser, metadata path and retained snapshot; it is not proof that all allocations or prior driver activity were observed. A bugcheck code is a starting point for its parameters, stack and surrounding state, not a unique allocator-path or attack signature.
Sources for these pool-contract and evidence corrections reviewed: 2026-09-09.
- Modify service table entries
- Requires PG bypass
- High detection risk- Hook driver dispatch routines
- Less monitored than SSDT
- Per-driver targetingMmMapIoSpace
MmCopyMemory
\\Device\\PhysicalMemoryZwReadVirtualMemory
ZwWriteVirtualMemory
KeStackAttachProcess
MmCopyVirtualMemoryIoAllocateMdl
MmProbeAndLockPages
MmMapLockedPagesSpecifyCacheThe README's > EFI Driver subcategory (under Cheat) contains 30+ projects:
- EFI bootkit frameworks: UEFI DXE drivers that persist across boots
- Boot-time memory mappers: inject code before Windows kernel initializes
- ExitBootServices hooks: intercept Windows boot handoff
- EFI runtime service abuse: GetVariable/SetVariable for kernel ↔ EFI comm
See also: game-hacking skill for EFI cheat workflows- EFI runtime services persist after ExitBootServices
- DXE (Driver Execution Environment) phase: full hardware access
- Pre-kernel execution: no DSE, no PatchGuard, no HVCI enforcement
- Secure Boot is the primary mitigation (firmware signature verification)- GetVariable/SetVariable: pass data between EFI and OS runtime
- Runtime memory mapping via EFI memory map
- Physical memory access before Windows memory manager initializes
- ACPI table injection for persistent low-level modificationsType 1 (bare-metal):
- Runs directly on hardware
- Examples: VMware ESXi, Microsoft Hyper-V, Xen
- Used for VBS, production security enforcement
Type 2 (hosted):
- Runs on top of a host operating system
- Examples: Oracle VirtualBox, VMware Workstation
- Common for research, development, and testingIntel VT-x:
- Introduced 2005, widely supported on modern Intel CPUs
- Foundation for VMCS, EPT, VM exits
AMD-V (SVM):
- AMD's counterpart to VT-x, also introduced 2005
- VMCB structure, NPT (Nested Page Tables)
ARM Virtualization Extensions:
- EL2 (hypervisor mode) and stage-2 memory translation
- Used on ARM platforms for mobile and embedded securityCentral data structure for Intel VT-x:
- Describes guest state, host state, and virtualization controls
- Tells the processor:
- What state to restore on VM entry
- What state to save on VM exit
- Which events transfer control back to the hypervisor
Guest/Host State Areas:
- Control registers (CR0, CR3, CR4)
- Segment registers (CS, SS, DS, ES, FS, GS)
- Debug registers (DR7 — hardware breakpoints)
- Descriptor-table registers (GDTR, IDTR)
- Key fields:
- CR3: root of guest page tables, central to virtual memory
- GDTR/IDTR: Global/Interrupt Descriptor Tables
- CS/SS: code and stack segments
- DR7: hardware breakpoint control
Control Fields:
- Pin-based controls
- Primary processor-based controls
- Secondary processor-based controls
- Events that cause VM exits:
- CPUID interception
- INVLPG interception
- Control-register access
- EPT violations
- MSR accessEPT is Intel's second-stage translation for guest-physical to host-physical addresses; guest page tables separately translate guest virtual addresses. Review the processor capabilities and active virtualization controls before assuming a paging depth, page size or particular handling of a denied access. A four-level diagram describes one configuration, not every implementation. Intel system-programming manuals
Second-stage permissions constrain CPU access to the configured guest mappings. They do not themselves identify the responsible module or decide whether an operation is legitimate. Device-originated access needs its own IOMMU and device policy analysis; use DMA analysis. A guest virtual address or module name must be correlated with the observed mapping and execution context before making an attribution claim.
VM Exits:
- Occur when configured events happen in the guest
- Triggers: CPUID, CR access, I/O instructions, EPT violations, MSR access
- On exit: processor saves guest state (per VMCS), restores host state,
records exit reason for hypervisor handler
VMCALL:
- Guest intentionally transfers control to hypervisor
- Similar in concept to a system call (guest → hypervisor)
- Used for guest-hypervisor communication interfaces- Running a hypervisor inside a VM managed by another hypervisor
- Useful for research, testing, and development
- Adds complexity: multiple layers participate in the same virtualization flow
- Relevant for testing hypervisor-based defense under VMware/Hyper-VUse virtualization evidence to examine guest isolation, authorized introspection and integrity policy. Treat unauthorized concealment or tampering as threat categories with explicit access prerequisites and observation limits; the presence of virtualization is also normal for development and platform security.
WHP exposes user-mode APIs to manage guest partitions, virtual processors and guest-physical mappings using the Windows hypervisor. It does not grant a tool arbitrary control over the running host kernel. Record the host/guest boundary, Windows build, architecture, SDK, feature state and actual capabilities. WHP API contract
The current WHvRunVirtualProcessor contract lists Windows 10 version 1803 for
x64 and Windows 11 version 24H2 build 26100.3915 for Arm64. Its successful return
and exit context describe a stop in guest execution, not complete tracing of
every instruction or a deterministic replay. Capabilities and available exit
contexts are architecture- and configuration-dependent; there is no generic
syscall exit reason in the documented enumeration. Correlate the actual reason
and context with the analysis question.
Run contract,
exit contexts,
capabilities.
Preserve unmodeled device, scheduler, timing and concurrency effects in a result. A CPU feature name or enabled optional feature alone does not prove that a given analysis tool, nested environment or third-party hypervisor combination is supported. Use product/build-specific evidence for compatibility; do not impose a universal coexistence or conflict rule.
A trusted hypervisor can enforce a separate guest-memory protection boundary. Windows VBS/KDP is one concrete architecture; other platforms' isolated execution environments require their own contracts and must not be equated with EPT hooks. Protecting selected data also differs from validating kernel code, authenticating an administrative request or preserving a detector's end-to-end coverage. Microsoft KDP architecture
| Review question | Evidence required |
|---|---|
| What is covered? | Exact protected memory, active mappings, access class and lifecycle; names such as callback list or ETW structure are not enough |
| Who owns the policy? | Hypervisor/security-component provenance and the authority allowed to change mappings or configuration |
| Was an access observed? | Available fault/exit context, collection coverage and correlation with the relevant mapping and execution context |
| Was the operation prevented? | Enforced decision and resulting state; a reported exit alone does not establish denial or continuing integrity |
| What remains outside scope? | Unprotected aliases or state, permitted update paths, device DMA, firmware and independent event or service failures |
For a vulnerable-driver threat, first establish the affected driver's presence, reachable interface and required privilege. A claim that attempted kernel data tampering was blocked additionally requires the protection evidence above. Do not infer that every driver-mediated write would fault or that every callback remains intact merely because a hypervisor is installed.
A CPU fault gives machine context; identifying a trustworthy principal and handling an allowed update are separate policy problems. Report detection, prevention, post-event integrity and recovery as different outcomes. Guest-kernel compromise does not automatically defeat an independently enforced boundary, but that claim assumes the hypervisor, hardware and configuration path remain trustworthy. Preserve those assumptions and any missing coverage explicitly.
Sources for these virtualization-boundary corrections reviewed: 2026-09-09.
The README contains categorized links for:
For project selection, load repository resource selection on demand. Use the shared repository navigation for local discovery layers, filename case, missing snapshots and currentness. Generated descriptions and wiki pages are discovery aids, not independent evidence.
For topic discovery, see the compiled windows-kernel overview. Verify its technical claims against primary sources and the actual target context.
Use the following repository sources directly when applying this skill. Prefer available local files for discovery and scoped historical inspection; use the raw URLs when the collection is not installed locally. These entrypoint details are retained here so source lookup does not depend on loading another skill.
Start with wiki/index.md for topical synthesis and cross-project connections. Wiki schema describes its structure. Generated wiki pages are discovery aids; follow their original citations before adopting technical claims.
Raw catalog: wiki/index.md. For this domain, read wiki/overviews/windows-kernel.md. Raw URL: windows-kernel overview.
A direct project question can start with its README entry or description below; reading the entire wiki is unnecessary.
README.md contains the collection's actual categories, subcategories, project URLs and short descriptions. Find the relevant category and retain the original URL, including any specific file or revision suffix.
Raw index: README.md.
For a concise project summary, look for the actual local path:
description/{owner}/{repo}/description_en.txt
https://raw.githubusercontent.com/gmh5225/awesome-game-security/refs/heads/main/description/{owner}/{repo}/description_en.txtExample: bgfx description. Extract owner/repository from the original GitHub project URL, omitting a .git suffix. Resolve existing path casing before constructing a local/raw path. Descriptions are generated summaries, not independent verification. If absent or inaccessible, use the README entry, relevant archive or original project.
For deeper inspection of an available captured source tree, locate:
archive/{owner}/{repo}.txt
https://raw.githubusercontent.com/gmh5225/awesome-game-security/refs/heads/main/archive/{owner}/{repo}.txtExample: bgfx archive. Prefer inspecting the relevant portion of an existing archive over re-cloning merely to inspect the same captured material. Archives may exclude files, use fallback extraction or contain truncation; they are not guaranteed complete checkouts. Record any upstream revision evidence and included-file limits. If missing or insufficient, follow the README's original upstream URL.
For a specific project, locate its README identity, use a description or wiki page for orientation when helpful, then inspect the relevant archive/source artifact for the question. For current compatibility or exact implementation, verify the matching upstream documentation, release or immutable source revision. Keep the collection revision and capture/generation dates separate from the upstream version. Multiple generated layers from one source are not independent corroboration, and missing archive content does not establish upstream absence.
The per-domain resource guide above helps choose useful artifacts. Shared repository navigation adds the optional read-only indexer, case-ambiguity handling and maintenance details; it supplements this Data Source section rather than replacing it.
c7e4d3f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.