Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

kddbgio.c File Reference

#include "kdp.h"

Go to the source code of this file.

Functions

BOOLEAN KdpPrintString (IN PSTRING Output)
BOOLEAN KdpPromptString (IN PSTRING Output, IN OUT PSTRING Input)


Function Documentation

BOOLEAN KdpPrintString (  IN PSTRING  Output  ) 
 

Definition at line 30 of file 4/kddbgio.c.

References KdpMessageBuffer, KdpMoveMemory(), KdpPollBreakInWithPortLock(), KdpSendPacket(), KeGetCurrentPrcb, KeProcessorLevel, and USHORT.

Referenced by KdpTrap().

00036 : 00037 00038 This routine prints a string. 00039 00040 Arguments: 00041 00042 Output - Supplies a pointer to a string descriptor for the output string. 00043 00044 Return Value: 00045 00046 TRUE if Control-C present in input buffer after print is done. 00047 FALSE otherwise. 00048 00049 --*/ 00050 00051 { 00052 00053 ULONG Length; 00054 STRING MessageData; 00055 STRING MessageHeader; 00056 DBGKD_DEBUG_IO DebugIo; 00057 00058 // 00059 // Move the output string to the message buffer. 00060 // 00061 00062 Length = KdpMoveMemory( 00063 (PCHAR)KdpMessageBuffer, 00064 (PCHAR)Output->Buffer, 00065 Output->Length 00066 ); 00067 00068 // 00069 // If the total message length is greater than the maximum packet size, 00070 // then truncate the output string. 00071 // 00072 00073 if ((sizeof(DBGKD_DEBUG_IO) + Length) > PACKET_MAX_SIZE) { 00074 Length = PACKET_MAX_SIZE - sizeof(DBGKD_DEBUG_IO); 00075 } 00076 00077 // 00078 // Construct the print string message and message descriptor. 00079 // 00080 00081 DebugIo.ApiNumber = DbgKdPrintStringApi; 00082 DebugIo.ProcessorLevel = KeProcessorLevel; 00083 DebugIo.Processor = (USHORT)KeGetCurrentPrcb()->Number; 00084 DebugIo.u.PrintString.LengthOfString = Length; 00085 MessageHeader.Length = sizeof(DBGKD_DEBUG_IO); 00086 MessageHeader.Buffer = (PCHAR)&DebugIo; 00087 00088 // 00089 // Construct the print string data and data descriptor. 00090 // 00091 00092 MessageData.Length = (USHORT)Length; 00093 MessageData.Buffer = KdpMessageBuffer; 00094 00095 // 00096 // Send packet to the kernel debugger on the host machine. 00097 // 00098 00099 KdpSendPacket( 00100 PACKET_TYPE_KD_DEBUG_IO, 00101 &MessageHeader, 00102 &MessageData 00103 ); 00104 00105 return KdpPollBreakInWithPortLock(); 00106 }

BOOLEAN KdpPromptString (  IN PSTRING  Output,
IN OUT PSTRING  Input
) 
 

Definition at line 110 of file 4/kddbgio.c.

References FALSE, KDP_MESSAGE_BUFFER_SIZE, KDP_PACKET_RECEIVED, KDP_PACKET_RESEND, KdpMessageBuffer, KdpMoveMemory(), KdpReceivePacket(), KdpSendPacket(), KeGetCurrentPrcb, KeProcessorLevel, TRUE, and USHORT.

Referenced by KdpTrap().

00117 : 00118 00119 This routine prints a string, then reads a reply string. 00120 00121 Arguments: 00122 00123 Output - Supplies a pointer to a string descriptor for the output string. 00124 00125 Input - Supplies a pointer to a string descriptor for the input string. 00126 (Length stored/returned in Input->Length) 00127 00128 Return Value: 00129 00130 TRUE - A Breakin sequence was seen, caller should breakpoint and retry 00131 FALSE - No Breakin seen. 00132 00133 --*/ 00134 00135 { 00136 00137 ULONG Length; 00138 STRING MessageData; 00139 STRING MessageHeader; 00140 DBGKD_DEBUG_IO DebugIo; 00141 ULONG ReturnCode; 00142 00143 // 00144 // Move the output string to the message buffer. 00145 // 00146 00147 Length = KdpMoveMemory( 00148 (PCHAR)KdpMessageBuffer, 00149 (PCHAR)Output->Buffer, 00150 Output->Length 00151 ); 00152 00153 // 00154 // If the total message length is greater than the maximum packet size, 00155 // then truncate the output string. 00156 // 00157 00158 if ((sizeof(DBGKD_DEBUG_IO) + Length) > PACKET_MAX_SIZE) { 00159 Length = PACKET_MAX_SIZE - sizeof(DBGKD_DEBUG_IO); 00160 } 00161 00162 // 00163 // Construct the prompt string message and message descriptor. 00164 // 00165 00166 DebugIo.ApiNumber = DbgKdGetStringApi; 00167 DebugIo.ProcessorLevel = KeProcessorLevel; 00168 DebugIo.Processor = (USHORT)KeGetCurrentPrcb()->Number; 00169 DebugIo.u.GetString.LengthOfPromptString = Length; 00170 DebugIo.u.GetString.LengthOfStringRead = Input->MaximumLength; 00171 MessageHeader.Length = sizeof(DBGKD_DEBUG_IO); 00172 MessageHeader.Buffer = (PCHAR)&DebugIo; 00173 00174 // 00175 // Construct the prompt string data and data descriptor. 00176 // 00177 00178 MessageData.Length = (USHORT)Length; 00179 MessageData.Buffer = KdpMessageBuffer; 00180 00181 // 00182 // Send packet to the kernel debugger on the host machine. 00183 // 00184 00185 KdpSendPacket( 00186 PACKET_TYPE_KD_DEBUG_IO, 00187 &MessageHeader, 00188 &MessageData 00189 ); 00190 00191 00192 // 00193 // Receive packet from the kernel debugger on the host machine. 00194 // 00195 00196 MessageHeader.MaximumLength = sizeof(DBGKD_DEBUG_IO); 00197 MessageData.MaximumLength = KDP_MESSAGE_BUFFER_SIZE; 00198 00199 do { 00200 ReturnCode = KdpReceivePacket( 00201 PACKET_TYPE_KD_DEBUG_IO, 00202 &MessageHeader, 00203 &MessageData, 00204 &Length 00205 ); 00206 if (ReturnCode == KDP_PACKET_RESEND) { 00207 return TRUE; 00208 } 00209 } while (ReturnCode != KDP_PACKET_RECEIVED); 00210 00211 00212 if (Length > Input->MaximumLength) { 00213 Length = Input->MaximumLength; 00214 } 00215 00216 Input->Length = (USHORT)KdpMoveMemory( 00217 (PCHAR)Input->Buffer, 00218 (PCHAR)KdpMessageBuffer, 00219 Length 00220 ); 00221 00222 return FALSE; 00223 } }


Generated on Sat May 15 19:44:25 2004 for test by doxygen 1.3.7