Tech7 min read

ASUS ROG Zephyrus G14: Analyzing Crash Dumps and Removing the AMD Driver

IkesanContents

My laptop, an ASUS ROG Zephyrus G14 (official support page), has been crashing repeatedly.
In addition to crash dumps recorded on September 30, abnormal GPU-related shutdowns were logged on October 3 and October 15.
To isolate the root cause, I set up a script to continuously record system logs during subsequent crashes while analyzing past dumps and the existing driver setup.

PC Environment

ItemDetails
ModelASUS ROG Zephyrus G14
OSWindows 11 Home (version 10.0.26200.0)
CPUAMD Ryzen 7 5800HS (8 cores / 16 threads)
Memory16 GB
Integrated GPUAMD Radeon Graphics
Discrete GPUNVIDIA GeForce RTX 3050 Ti Laptop GPU (4 GB VRAM)

This laptop has an integrated AMD Radeon Graphics unit on the CPU and a discrete NVIDIA GeForce RTX 3050 Ti Laptop GPU. The AMD GPU handles day-to-day display output and power-saving controls. Because of this setup, malfunctions in the AMD driver can trigger display timeouts and system crashes independently of the discrete GPU.

MEMORY_MANAGEMENT During Audio Processing

Records of Windows Blue Screen of Death (BSoD) events were saved in C:\Windows\Minidump.
Analyzing these minidumps with WinDbg revealed that the two crashes on September 30 and the crash on October 15 all shared stop code 0x1A (MEMORY_MANAGEMENT).

In all three instances, the crashing process was audiodg.exe, the first argument was 0x1230, and the failure location was identically portcls!CPortPinWaveRT::Close+0x31f.

Timestamp (JST)Stop CodeProcessFailure Location
September 30, 02:46:000x1A (arg1: 0x1230)audiodg.exeportcls!CPortPinWaveRT::Close+0x31f
September 30, 02:53:040x1A (arg1: 0x1230)audiodg.exeportcls!CPortPinWaveRT::Close+0x31f
October 15, 03:44:320x1A (arg1: 0x1230)audiodg.exeportcls!CPortPinWaveRT::Close+0x31f

portcls.sys is the Windows Port Class audio driver component (Microsoft Port Class documentation). The crashes occurred during the transition from CPortPinWaveRT::Close, which closes an audio stream, to memory deallocation (MmUnmapLockedPages).

The call stack also included Realtek’s audio driver RTKVHD64.sys. The relevant portion of the stack trace:

PROCESS_NAME: audiodg.exe

nt!MiUnmapLockedPagesInUserSpace
nt!MmUnmapLockedPages
portcls!CPortPinWaveRT::Close+0x31f
portcls!DispatchClose
ks!KsDispatchIrp
portcls!PcDispatchIrp
RTKVHD64+0x243aaa

FAILURE_BUCKET_ID: 0x1a_1230_portcls!CPortPinWaveRT::Close

The system halted on different days with the same combination of audiodg.exe and RTKVHD64.sys. Memory unmapping errors repeatedly triggered during audio stream teardown.

GPU Timeouts in amdkmdag.sys

In addition to minidumps, separate logs were stored in C:\Windows\LiveKernelReports\WATCHDOG.
These are Windows live kernel dumps (LiveKernel), which record abnormal system states without halting the entire operating system.

Five of the seven saved files were VIDEO_ENGINE_TIMEOUT_DETECTED (code 0x141).
This bug check code indicates that a graphics processing engine failed to respond within its allotted time. Windows records these as LiveKernel dumps rather than full system halts (Microsoft 0x141 documentation).

Timestamp (JST)CodeDescriptionAnalysis Result
September 30, 02:52:430x193VIDEO_DXGKRNL_LIVEDUMP-
September 30, 02:56:530x141VIDEO_ENGINE_TIMEOUT_DETECTEDamdkmdag.sys (+0xfa9c0)
October 3, 17:19:220x141VIDEO_ENGINE_TIMEOUT_DETECTEDamdkmdag.sys (+0xfa9c0)
October 15, 03:20:100x141VIDEO_ENGINE_TIMEOUT_DETECTEDamdkmdag.sys (+0xfa9c0)
October 15, 03:47:280x141VIDEO_ENGINE_TIMEOUT_DETECTEDamdkmdag.sys (+0xfa9c0)
October 15, 03:56:180x141VIDEO_ENGINE_TIMEOUT_DETECTEDamdkmdag.sys (+0xfa9c0)
October 15, 04:05:370x1A8VIDEO_DXGKRNL_BLACK_SCREEN_LIVEDUMP-

All five timeouts originated in amdkmdag.sys, AMD’s GPU driver, at the identical offset +0xfa9c0. The timeouts occurred repeatedly at the exact same location between September 30 and October 15.

With AMD driver timeouts recurring alongside audio processing crashes, I started by reviewing the graphics driver setup.

CrashMon: Continuous System Monitoring via PowerShell

Alongside dump analysis, I prepared a PowerShell monitoring script named “CrashMon” to continuously log system metrics leading up to a crash.
The script is located in C:\CrashMon.

I configured Windows to produce complete memory dumps upon system failure and disabled automatic deletion of MEMORY.DMP during low disk space conditions.
I also expanded event log capacities for both System and Application, and enabled diagnostic logs for power management, storage, and GPU events.

The recording script, logger.ps1, runs under the SYSTEM account via Windows Task Scheduler.
It triggers at system startup and every five minutes as a heartbeat check, with internal locks to prevent concurrent runs. After setup, the scheduled task registered as Running.

Logged MetricDetails
HeartbeatTimestamp, system uptime
CPU and MemoryCPU utilization, available memory, commit charge, non-paged pool size
DiskUtilization rate, queue length, I/O latency, read/write volume
Power and ThermalsReported sensor temperatures, AC power status, battery level
NetworkPing response times to the local gateway and external IPs
ProcessesTotal process count, targeted background services (e.g., RustDesk), top CPU/memory consumers

The primary loop runs every 15 seconds, while heavy queries for top processes run once every four iterations (roughly once per minute).
To prevent buffered logs from being lost during sudden system freezes, every write operation flushes immediately to disk.
The script also mirrors logs to external media if a CrashMon directory is present on a removable USB drive.

In the same directory, collect.ps1 gathers event logs, dump files, and system information in a single pass after reboots to collect detailed diagnostic records following any future crash.

Chipset Driver Rollback via DriverStore

Suspecting potential chipset involvement in addition to GPU issues, I created a system restore point and disabled Windows Fast Startup.
Next, I ran a script to roll back AMD chipset drivers to an earlier stable state.
The script uninstalls newer driver packages from the Windows DriverStore and prompts device redetection. This allows the system to fall back onto older stored packages.

While package removals completed without errors, the driver versions reported immediately afterward remained identical to their pre-execution states:

DevicePre-Rollback VersionPost-Rollback Version
AMD Micro PEP Device1.0.29.01.0.29.0
AMD I2C Controller1.2.0.1311.2.0.131
AMD GPIO Controller2.2.0.1372.2.0.137
AMD SMBus5.12.0.445.12.0.44
AMD PSP 10.0 Device5.46.0.05.46.0.0

For the Micro PEP device, an unused package (1.0.47.1) was purged, while active version 1.0.29.0 stayed in place.
The GPIO Controller and PSP Device reported that changes required a full system restart to take effect.

Removing AMD Adrenalin

During the chipset adjustment, another 0x141 timeout in amdkmdag.sys was logged in the LiveKernel dump directory.
Because AMD’s generic Adrenalin software appeared to be a key source of instability, I decided to revert to ASUS’s certified OEM drivers instead.

The target was Adrenalin 26.5.2, manually installed on September 30.
I uninstalled five AMD utilities, including AMD Settings, and removed the display driver package along with components such as OpenCL and AMD Crash Defender.

All uninstallers completed cleanly. The integrated AMD graphics controller fell back to the Windows in-box “Microsoft Basic Display Adapter.” Display adapter status at this stage:

Display AdapterDriver Version
NVIDIA GeForce RTX 3050 Ti Laptop GPU32.0.16.1714
Microsoft Basic Display Adapter10.0.26100.1

During the Adrenalin uninstallation, a black screen LiveKernel dump (0x1A8: VIDEO_DXGKRNL_BLACK_SCREEN_LIVEDUMP) was logged.
Arguments indicated that the operating system detected a connected display but failed to activate the display path, matching the expected behavior when video output resets as the AMD driver detaches.

SYSTEM_SERVICE_EXCEPTION During Virtual GPU Processing

Shortly after removing Adrenalin, a minidump from a different failure category appeared.
The stop code was SYSTEM_SERVICE_EXCEPTION (0x3B), with exception code 0xC0000005 denoting an access violation:

PROCESS_NAME: vmwp.exe
BUGCHECK_CODE: 3b
BUGCHECK_P1: c0000005

dxgkrnl!DXGAUTOPUSHLOCKSHARED::DXGAUTOPUSHLOCKSHARED
dxgkrnl!DXGK_VIRTUAL_GPU_PARAV::VirtualGpuDriverEscape
dxgkrnl!DxgkDdiVirtualGpuDriverEscape
dxgkrnl!DpiFdoDispatchIoctl
dxgkrnl!DpiDispatchIoctl
nvlddmkm+0x19394f2

The crashed process was vmwp.exe, the worker process that hosts virtual machines for Hyper-V and WSL2.
The stack trace contained virtual GPU interfaces from the Windows DirectX graphics kernel (dxgkrnl.sys) along with NVIDIA’s kernel driver, nvlddmkm.sys. Unlike the timeouts on the AMD side, this indicated an access violation occurring within NVIDIA GPU paths accessed through GPU virtualization.

To prevent Windows Update from automatically delivering replacement drivers during subsequent installations, I set ExcludeWUDriversInQualityUpdate=1 and SearchOrderConfig=0 to suppress automatic driver updates.

The crash dumps collected from the system separated into three distinct failure points: 0x1A in audio processing, 0x141 timeouts in the AMD driver, and 0x3B inside virtual GPU handling. With CrashMon actively logging system health, testing now continues with ASUS’s certified OEM drivers to observe system stability.