[NTOS:KD64] Simplify some code in debugging helpers

This commit is contained in:
Hermès Bélusca-Maïto 2024-09-29 20:45:25 +02:00
parent 1c61d4ce90
commit 5d78952024
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
5 changed files with 36 additions and 48 deletions

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

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)
{

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;

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;

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;