From 5d78952024da9cae29c7b1ecb545ead6ae0c20b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 29 Sep 2024 20:45:25 +0200 Subject: [PATCH] [NTOS:KD64] Simplify some code in debugging helpers --- ntoskrnl/include/internal/kd64.h | 4 +-- ntoskrnl/kd64/amd64/kdx64.c | 8 ++--- ntoskrnl/kd64/arm/kdarm.c | 4 +-- ntoskrnl/kd64/i386/kdx86.c | 50 ++++++++++++++------------------ ntoskrnl/kd64/kdapi.c | 18 ++++-------- 5 files changed, 36 insertions(+), 48 deletions(-) diff --git a/ntoskrnl/include/internal/kd64.h b/ntoskrnl/include/internal/kd64.h index 060832423ba..d9be3e72cc3 100644 --- a/ntoskrnl/include/internal/kd64.h +++ b/ntoskrnl/include/internal/kd64.h @@ -401,13 +401,13 @@ NTSTATUS NTAPI KdpSysReadMsr( _In_ ULONG Msr, - _Out_ PLARGE_INTEGER MsrValue); + _Out_ PULONGLONG MsrValue); NTSTATUS NTAPI KdpSysWriteMsr( _In_ ULONG Msr, - _In_ PLARGE_INTEGER MsrValue); + _In_ PULONGLONG MsrValue); // // Bus diff --git a/ntoskrnl/kd64/amd64/kdx64.c b/ntoskrnl/kd64/amd64/kdx64.c index b403bfa5918..c19505f634a 100644 --- a/ntoskrnl/kd64/amd64/kdx64.c +++ b/ntoskrnl/kd64/amd64/kdx64.c @@ -95,12 +95,12 @@ NTSTATUS NTAPI KdpSysReadMsr( _In_ ULONG Msr, - _Out_ PLARGE_INTEGER MsrValue) + _Out_ PULONGLONG MsrValue) { /* Use SEH to protect from invalid MSRs */ _SEH2_TRY { - MsrValue->QuadPart = __readmsr(Msr); + *MsrValue = __readmsr(Msr); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -115,12 +115,12 @@ NTSTATUS NTAPI KdpSysWriteMsr( _In_ ULONG Msr, - _In_ PLARGE_INTEGER MsrValue) + _In_ PULONGLONG MsrValue) { /* Use SEH to protect from invalid MSRs */ _SEH2_TRY { - __writemsr(Msr, MsrValue->QuadPart); + __writemsr(Msr, *MsrValue); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { diff --git a/ntoskrnl/kd64/arm/kdarm.c b/ntoskrnl/kd64/arm/kdarm.c index e322726c548..5a8674046a0 100644 --- a/ntoskrnl/kd64/arm/kdarm.c +++ b/ntoskrnl/kd64/arm/kdarm.c @@ -37,7 +37,7 @@ NTSTATUS NTAPI KdpSysReadMsr( _In_ ULONG Msr, - _Out_ PLARGE_INTEGER MsrValue) + _Out_ PULONGLONG MsrValue) { UNIMPLEMENTED; return STATUS_UNSUCCESSFUL; @@ -47,7 +47,7 @@ NTSTATUS NTAPI KdpSysWriteMsr( _In_ ULONG Msr, - _In_ PLARGE_INTEGER MsrValue) + _In_ PULONGLONG MsrValue) { UNIMPLEMENTED; return STATUS_UNSUCCESSFUL; diff --git a/ntoskrnl/kd64/i386/kdx86.c b/ntoskrnl/kd64/i386/kdx86.c index 64736cc8ef6..8fc77ebcf6e 100644 --- a/ntoskrnl/kd64/i386/kdx86.c +++ b/ntoskrnl/kd64/i386/kdx86.c @@ -93,22 +93,19 @@ NTSTATUS NTAPI KdpSysReadMsr( _In_ ULONG Msr, - _Out_ PLARGE_INTEGER MsrValue) + _Out_ PULONGLONG MsrValue) { - /* Wrap this in SEH in case the MSR doesn't exist */ + /* Use SEH to protect from invalid MSRs */ _SEH2_TRY { - /* Read from the MSR */ - MsrValue->QuadPart = __readmsr(Msr); + *MsrValue = __readmsr(Msr); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - /* Invalid MSR */ _SEH2_YIELD(return STATUS_NO_SUCH_DEVICE); } _SEH2_END; - /* Success */ return STATUS_SUCCESS; } @@ -116,22 +113,19 @@ NTSTATUS NTAPI KdpSysWriteMsr( _In_ ULONG Msr, - _In_ PLARGE_INTEGER MsrValue) + _In_ PULONGLONG MsrValue) { - /* Wrap this in SEH in case the MSR doesn't exist */ + /* Use SEH to protect from invalid MSRs */ _SEH2_TRY { - /* Write to the MSR */ - __writemsr(Msr, MsrValue->QuadPart); + __writemsr(Msr, *MsrValue); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - /* Invalid MSR */ _SEH2_YIELD(return STATUS_NO_SUCH_DEVICE); } _SEH2_END; - /* Success */ return STATUS_SUCCESS; } @@ -155,7 +149,7 @@ KdpSysReadBusData( Length); /* Return status */ - return *ActualLength != 0 ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; + return (*ActualLength != 0 ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); } NTSTATUS @@ -178,7 +172,7 @@ KdpSysWriteBusData( Length); /* Return status */ - return *ActualLength != 0 ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; + return (*ActualLength != 0 ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); } NTSTATUS @@ -272,9 +266,7 @@ KdpSysReadIoSpace( NTSTATUS Status; /* Verify parameters */ - if ((InterfaceType != Isa) || - (BusNumber != 0) || - (AddressSpace != 1)) + if ((InterfaceType != Isa) || (BusNumber != 0) || (AddressSpace != 1)) { /* Fail, we don't support this */ *ActualDataSize = 0; @@ -285,16 +277,17 @@ KdpSysReadIoSpace( switch (DataSize) { case sizeof(UCHAR): - + { /* Read 1 byte */ *(PUCHAR)DataValue = READ_PORT_UCHAR((PUCHAR)(ULONG_PTR)IoAddress); *ActualDataSize = sizeof(UCHAR); Status = STATUS_SUCCESS; break; + } case sizeof(USHORT): - + { /* Make sure the address is aligned */ if ((IoAddress & (sizeof(USHORT) - 1)) != 0) { @@ -310,9 +303,10 @@ KdpSysReadIoSpace( *ActualDataSize = sizeof(USHORT); Status = STATUS_SUCCESS; break; + } case sizeof(ULONG): - + { /* Make sure the address is aligned */ if ((IoAddress & (sizeof(ULONG) - 1)) != 0) { @@ -328,9 +322,9 @@ KdpSysReadIoSpace( *ActualDataSize = sizeof(ULONG); Status = STATUS_SUCCESS; break; + } default: - /* Invalid size, fail */ *ActualDataSize = 0; Status = STATUS_INVALID_PARAMETER; @@ -354,9 +348,7 @@ KdpSysWriteIoSpace( NTSTATUS Status; /* Verify parameters */ - if ((InterfaceType != Isa) || - (BusNumber != 0) || - (AddressSpace != 1)) + if ((InterfaceType != Isa) || (BusNumber != 0) || (AddressSpace != 1)) { /* Fail, we don't support this */ *ActualDataSize = 0; @@ -367,16 +359,17 @@ KdpSysWriteIoSpace( switch (DataSize) { case sizeof(UCHAR): - + { /* Write 1 byte */ WRITE_PORT_UCHAR((PUCHAR)(ULONG_PTR)IoAddress, *(PUCHAR)DataValue); *ActualDataSize = sizeof(UCHAR); Status = STATUS_SUCCESS; break; + } case sizeof(USHORT): - + { /* Make sure the address is aligned */ if ((IoAddress & (sizeof(USHORT) - 1)) != 0) { @@ -392,9 +385,10 @@ KdpSysWriteIoSpace( *ActualDataSize = sizeof(USHORT); Status = STATUS_SUCCESS; break; + } case sizeof(ULONG): - + { /* Make sure the address is aligned */ if ((IoAddress & (sizeof(ULONG) - 1)) != 0) { @@ -410,9 +404,9 @@ KdpSysWriteIoSpace( *ActualDataSize = sizeof(ULONG); Status = STATUS_SUCCESS; break; + } default: - /* Invalid size, fail */ *ActualDataSize = 0; Status = STATUS_INVALID_PARAMETER; diff --git a/ntoskrnl/kd64/kdapi.c b/ntoskrnl/kd64/kdapi.c index bd27655346b..ba226ce6e17 100644 --- a/ntoskrnl/kd64/kdapi.c +++ b/ntoskrnl/kd64/kdapi.c @@ -961,7 +961,7 @@ KdpReadMachineSpecificRegister(IN PDBGKD_MANIPULATE_STATE64 State, { STRING Header; PDBGKD_READ_WRITE_MSR ReadMsr = &State->u.ReadWriteMsr; - LARGE_INTEGER MsrValue; + ULARGE_INTEGER MsrValue; /* Setup the header */ Header.Length = sizeof(DBGKD_MANIPULATE_STATE64); @@ -969,8 +969,7 @@ KdpReadMachineSpecificRegister(IN PDBGKD_MANIPULATE_STATE64 State, ASSERT(Data->Length == 0); /* Call the internal routine */ - State->ReturnStatus = KdpSysReadMsr(ReadMsr->Msr, - &MsrValue); + State->ReturnStatus = KdpSysReadMsr(ReadMsr->Msr, &MsrValue.QuadPart); /* Return the data */ ReadMsr->DataValueLow = MsrValue.LowPart; @@ -991,7 +990,7 @@ KdpWriteMachineSpecificRegister(IN PDBGKD_MANIPULATE_STATE64 State, { STRING Header; PDBGKD_READ_WRITE_MSR WriteMsr = &State->u.ReadWriteMsr; - LARGE_INTEGER MsrValue; + ULARGE_INTEGER MsrValue; /* Setup the header */ Header.Length = sizeof(DBGKD_MANIPULATE_STATE64); @@ -1001,8 +1000,7 @@ KdpWriteMachineSpecificRegister(IN PDBGKD_MANIPULATE_STATE64 State, /* Call the internal routine */ MsrValue.LowPart = WriteMsr->DataValueLow; MsrValue.HighPart = WriteMsr->DataValueHigh; - State->ReturnStatus = KdpSysWriteMsr(WriteMsr->Msr, - &MsrValue); + State->ReturnStatus = KdpSysWriteMsr(WriteMsr->Msr, &MsrValue.QuadPart); /* Send the reply */ KdSendPacket(PACKET_TYPE_KD_STATE_MANIPULATE, @@ -1062,7 +1060,6 @@ KdpSetBusData(IN PDBGKD_MANIPULATE_STATE64 State, { STRING Header; PDBGKD_GET_SET_BUS_DATA SetBusData = &State->u.GetSetBusData; - ULONG Length; /* Setup the header */ Header.Length = sizeof(DBGKD_MANIPULATE_STATE64); @@ -1075,10 +1072,7 @@ KdpSetBusData(IN PDBGKD_MANIPULATE_STATE64 State, SetBusData->Offset, Data->Buffer, SetBusData->Length, - &Length); - - /* Return the actual length written */ - SetBusData->Length = Length; + &SetBusData->Length); /* Send the reply */ KdSendPacket(PACKET_TYPE_KD_STATE_MANIPULATE, @@ -1926,7 +1920,7 @@ KdEnterDebugger(IN PKTRAP_FRAME TrapFrame, /* Freeze all CPUs, raising also the IRQL to HIGH_LEVEL */ Enable = KeFreezeExecution(TrapFrame, ExceptionFrame); - /* Lock the port, save the state and set debugger entered */ + /* Lock the port, save its state and set the debugger entered flag */ KdpPortLocked = KeTryToAcquireSpinLockAtDpcLevel(&KdpDebuggerLock); KdSave(FALSE); KdEnteredDebugger = TRUE;