KdpPrompt
UINT16 __stdcall KdpPrompt(
PSTR Message,
UINT16 MessageLength,
PSTR Reply,
UINT16 ReplyLength,
INT8 PreviousMode,
KTRAP_FRAME *TrapFrame,
KTRAP_FRAME *ExceptionFrame){
CHAR *v8;
unsigned __int16 v9;
unsigned __int16 v10;
CHAR *v11;
void *v12;
CHAR *v13;
void *v14;
char *v15;
UINT8 v16;
char v18[480];
CHAR Destination[480];
STRING Input;
_STRING String;
CHAR *v22;
v8 = Message;
*(_DWORD *)(&Input.MaximumLength + 1) = 0;
String = 0i64;
v9 = 512;
if( MessageLength <= 0x200u )
v9 = MessageLength;
v10 = 512;
if( ReplyLength <= 0x200u )
v10 = ReplyLength;
if( PreviousMode )
{
if( v9 )
{
v11 = &Message[v9];
if( (unsigned __int64)v11 > 0x7FFFFFFF0000i64 || v11 < v8 )
MEMORY[0x7FFFFFFF0000] = 0;
}
v12 = alloca(512i64);
v22 = Destination;
KdpQuickMoveMemory(Destination, v8, v9);
v8 = v13;
ProbeForWrite(Reply, v10, 1ui64);
v14 = alloca(512i64);
v15 = v18;
v22 = v18;
}
else
{
v15 = Reply;
}
Input.Buffer = v15;
Input.Length = 0;
Input.MaximumLength = v10;
String.Buffer = v8;
String.Length = v9;
KdLogDbgPrint(&String);
v16 = KdEnterDebugger(TrapFrame, ExceptionFrame);
while( KdpPromptString(&String, &Input) == 1 )
;
KdExitDebugger(v16);
if( PreviousMode == 1 )
KdpQuickMoveMemory(Reply, Input.Buffer, Input.Length);
return Input.Length;
}Referenced by:
KdpTrap