[NTOS:KD64] Simplify some code in debugging helpers

This commit is contained in:
Hermès Bélusca-Maïto
2025-01-28 22:00:34 +01:00
parent 1c61d4ce90
commit 5d78952024
5 changed files with 36 additions and 48 deletions
+2 -2
View File
@@ -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
+4 -4
View File
@@ -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)
{
+2 -2
View File
@@ -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;
+22 -28
View File
@@ -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;
+6 -12
View File
@@ -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;