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