/*++ Copyright (c) 1998-2000 Microsoft Corporation Module Name: tracecom Abstract: This module traces serial IRP's. Author: Tad Brockway 7/14/99 Revision History: --*/ #include #include "tracecom.h" #define TRC_FILE "TraceCOM" // // Disable unreferenced formal parameter warning because we have // lots of these for this module. And, that's okay. // #pragma warning (disable: 4100) // // This tracing function must be linkable. // extern void TraceCOMProtocol(TCHAR *format, ...); ////////////////////////////////////////////////////////////////////// // // Internal Prototypes // // Trace out the specified serial IOCTL request. void TraceSerialIOCTLRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ); // Trace out the specified serial IOCTL response. void TraceSerialIOCTLResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); // Trace out a Set Handflow request. void TraceSetHandflowRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ); // Trace out a Set Wait Mask request. void TraceSetWaitMaskRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ); // Trace out a Set Timeouts request. void TraceSetTimeoutsRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ); // Trace out a Set Chars request. void TraceSetCharsRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ); // Trace out a Get Timeouts response. void TraceGetTimeoutsResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); // Trace out a Get Chars request. void TraceGetCharsRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); // Trace out a Get Wait Mask response. void TraceGetWaitMaskResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); // Trace out a Set Handflow response. void TraceGetHandflowResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); // Trace out a Get Communication Status response. void TraceGetCommStatusResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); // Trace out a Get Properties response. void TraceGetProperties( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ); void TraceSerialIrpRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ) /*++ Routine Description: Trace out the specified serial irp request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor inputBuf - Input Buffer, if Applicable. outputBufferLength - IRP Output buffer if relevant inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { // // Switch on the IRP Type. // switch (majorFunction) { case IRP_MJ_CREATE: TraceCOMProtocol(_T("->@@Device %ld:\tIRP_MJ_CREATE"), deviceID); return; case IRP_MJ_CLOSE: TraceCOMProtocol(_T("->@@Device %ld:\tIRP_MJ_CLOSE"), deviceID); return; case IRP_MJ_CLEANUP: TraceCOMProtocol(_T("->@@Device %ld:\tIRP_MJ_CLEANUP"), deviceID); return; case IRP_MJ_READ: TraceCOMProtocol(_T("->@@Device %ld:\tIRP_MJ_READ"), deviceID); return; case IRP_MJ_WRITE: TraceCOMProtocol(_T("->@@Device %ld:\tIRP_MJ_WRITE"), deviceID); return; case IRP_MJ_DEVICE_CONTROL: TraceSerialIOCTLRequest( deviceID, majorFunction, minorFunction, inputBuf, outputBufferLength, inputBufferLength, ioControlCode ); return; default: TraceCOMProtocol(_T("->@@Device %ld\tUnrecognized IRP"), deviceID); } } void TraceSerialIOCTLRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ) /*++ Routine Description: Trace out the specified serial IOCTL request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor inputBuf - Input Buffer, if Applicable. outputBufferLength - IRP Output buffer if relevant inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { PSERIAL_LINE_CONTROL lineControl; PSERIAL_QUEUE_SIZE serialQueueSize; UCHAR *immediateChar; // // Switch on the IRP Type. // switch (ioControlCode) { case IOCTL_SERIAL_SET_BAUD_RATE : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_BAUD_RATE: %ld baud"), deviceID, ((PSERIAL_BAUD_RATE)inputBuf)->BaudRate); break; case IOCTL_SERIAL_GET_BAUD_RATE : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_BAUD_RATE"), deviceID); break; case IOCTL_SERIAL_SET_LINE_CONTROL : lineControl = (PSERIAL_LINE_CONTROL)inputBuf; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_LINE_CONTROL ..."), deviceID); TraceCOMProtocol(_T("->@@Device %ld:\t\tstop bits:%ld"), deviceID, lineControl->StopBits); TraceCOMProtocol(_T("->@@Device %ld:\t\tparity: %ld"), deviceID, lineControl->Parity); TraceCOMProtocol(_T("->@@Device %ld:\t\tword len: %ld"), deviceID, lineControl->WordLength); break; case IOCTL_SERIAL_GET_LINE_CONTROL : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_LINE_CONTROL"), deviceID); break; case IOCTL_SERIAL_SET_TIMEOUTS : TraceSetTimeoutsRequest( deviceID, majorFunction, minorFunction, inputBuf, outputBufferLength, inputBufferLength, ioControlCode ); break; case IOCTL_SERIAL_GET_TIMEOUTS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_TIMEOUTS"), deviceID); break; case IOCTL_SERIAL_SET_CHARS : TraceSetCharsRequest(deviceID, majorFunction, minorFunction, inputBuf, outputBufferLength, inputBufferLength, ioControlCode); break; case IOCTL_SERIAL_GET_CHARS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_CHARS"), deviceID); break; case IOCTL_SERIAL_SET_DTR : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_DTR"), deviceID); break; case IOCTL_SERIAL_CLR_DTR : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_CLR_DTR"), deviceID); break; case IOCTL_SERIAL_RESET_DEVICE : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_RESET_DEVICE"), deviceID); break; case IOCTL_SERIAL_SET_RTS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_RTS"), deviceID); break; case IOCTL_SERIAL_CLR_RTS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_CLR_RTS"), deviceID); break; case IOCTL_SERIAL_SET_XOFF : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_XOFF"), deviceID); break; case IOCTL_SERIAL_SET_XON : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_XON"), deviceID); break; case IOCTL_SERIAL_SET_BREAK_ON : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_BREAK_ON"), deviceID); break; case IOCTL_SERIAL_SET_BREAK_OFF : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_BREAK_OFF"), deviceID); break; case IOCTL_SERIAL_SET_QUEUE_SIZE : serialQueueSize = (PSERIAL_QUEUE_SIZE)inputBuf; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_QUEUE_SIZE ..."), deviceID); TraceCOMProtocol(_T("->@@Device %ld:\t\tInSize:%ld"), deviceID, serialQueueSize->InSize); TraceCOMProtocol(_T("->@@Device %ld:\t\tOutSize:%ld"), deviceID, serialQueueSize->OutSize); break; case IOCTL_SERIAL_GET_WAIT_MASK : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_WAIT_MASK"), deviceID); break; case IOCTL_SERIAL_SET_WAIT_MASK : TraceSetWaitMaskRequest(deviceID, majorFunction, minorFunction, inputBuf, outputBufferLength, inputBufferLength, ioControlCode); break; case IOCTL_SERIAL_WAIT_ON_MASK : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_WAIT_ON_MASK"), deviceID); break; case IOCTL_SERIAL_IMMEDIATE_CHAR : immediateChar = (UCHAR *)inputBuf; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_IMMEDIATE_CHAR: %ld"), deviceID, *immediateChar); break; case IOCTL_SERIAL_PURGE : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_PURGE"), deviceID); break; case IOCTL_SERIAL_GET_HANDFLOW : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_HANDFLOW"), deviceID); break; case IOCTL_SERIAL_SET_HANDFLOW : TraceSetHandflowRequest( deviceID, majorFunction, minorFunction, inputBuf, outputBufferLength, inputBufferLength, ioControlCode ); break; case IOCTL_SERIAL_GET_MODEMSTATUS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_MODEMSTATUS"), deviceID); break; case IOCTL_SERIAL_GET_DTRRTS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_DTRRTS"), deviceID); break; case IOCTL_SERIAL_GET_COMMSTATUS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_COMMSTATUS"), deviceID); break; case IOCTL_SERIAL_GET_PROPERTIES : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_PROPERTIES"), deviceID); break; case IOCTL_SERIAL_XOFF_COUNTER : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_XOFF_COUNTER"), deviceID); break; case IOCTL_SERIAL_LSRMST_INSERT : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_LSRMST_INSERT"), deviceID); break; case IOCTL_SERIAL_CONFIG_SIZE : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_CONFIG_SIZE"), deviceID); break; case IOCTL_SERIAL_GET_STATS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_STATS"), deviceID); break; case IOCTL_SERIAL_CLEAR_STATS : TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_CLEAR_STATS"), deviceID); break; default: TraceCOMProtocol(_T("->@@Device %ld:\tUnrecognized IOCTL %08X"), deviceID, ioControlCode); } } void TraceSerialIrpResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode , ULONG status ) /*++ Routine Description: Trace out the specified serial irp response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Status of function call. Return Value: NA --*/ { // // Switch on the IRP Type. // switch (majorFunction) { case IRP_MJ_CREATE: TraceCOMProtocol(_T("<-@@Device %ld:\tIRP_MJ_CREATE"), deviceID); return; case IRP_MJ_CLOSE: TraceCOMProtocol(_T("<-@@Device %ld:\tIRP_MJ_CLOSE"), deviceID); return; case IRP_MJ_CLEANUP: TraceCOMProtocol(_T("<-@@Device %ld:\tIRP_MJ_CLEANUP"), deviceID); return; case IRP_MJ_READ: TraceCOMProtocol(_T("<-@@Device %ld:\tIRP_MJ_READ"), deviceID); return; case IRP_MJ_WRITE: TraceCOMProtocol(_T("<-@@Device %ld:\tIRP_MJ_WRITE"), deviceID); return; case IRP_MJ_DEVICE_CONTROL: TraceSerialIOCTLResponse( deviceID, majorFunction, minorFunction, outputBuf, outputBufferLength, inputBufferLength, ioControlCode, status ); return; default: TraceCOMProtocol(_T("<-@@Device %ld:\tUnrecognized IRP"), deviceID); } } void TraceSerialIOCTLResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out the specified serial IOCTL request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Return status from operation. Return Value: NA --*/ { PSERIAL_LINE_CONTROL lineControl; ULONG *modemStatus; ULONG *configSize; // // Switch on the IRP Type. // switch (ioControlCode) { case IOCTL_SERIAL_SET_BAUD_RATE : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_BAUD_RATE ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_BAUD_RATE : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_BAUD_RATE ret %08X ..."), deviceID, status); TraceCOMProtocol(_T("<-@@Device %ld:\t\tBaud Rate:%ld"), deviceID, ((PSERIAL_BAUD_RATE)outputBuf)->BaudRate); break; case IOCTL_SERIAL_SET_LINE_CONTROL : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_LINE_CONTROL ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_LINE_CONTROL : lineControl = (PSERIAL_LINE_CONTROL)outputBuf; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_LINE_CONTROL ret %08X ..."), deviceID, status); TraceCOMProtocol(_T("<-@@Device %ld:\t\tstop bits:%ld"), deviceID, lineControl->StopBits); TraceCOMProtocol(_T("<-@@Device %ld:\t\tparity: %ld"), deviceID, lineControl->Parity); TraceCOMProtocol(_T("<-@@Device %ld:\t\tword len: %ld"), deviceID, lineControl->WordLength); break; case IOCTL_SERIAL_SET_TIMEOUTS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_TIMEOUTS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_TIMEOUTS : TraceGetTimeoutsResponse(deviceID, majorFunction, minorFunction, outputBuf, outputBufferLength, inputBufferLength, ioControlCode, status); break; case IOCTL_SERIAL_SET_CHARS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_CHARS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_CHARS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_CHARS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_DTR : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_DTR ret %08X"), deviceID, status); break; case IOCTL_SERIAL_CLR_DTR : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_CLR_DTR ret %08X"), deviceID, status); break; case IOCTL_SERIAL_RESET_DEVICE : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_RESET_DEVICE ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_RTS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_RTS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_CLR_RTS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_CLR_RTS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_XOFF : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_XOFF ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_XON : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_XON ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_BREAK_ON : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_BREAK_ON ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_BREAK_OFF : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_BREAK_OFF ret %08X"), deviceID, status); break; case IOCTL_SERIAL_SET_QUEUE_SIZE : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_QUEUE_SIZE ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_WAIT_MASK : TraceGetWaitMaskResponse(deviceID, majorFunction, minorFunction, outputBuf, outputBufferLength, inputBufferLength, ioControlCode, status); break; case IOCTL_SERIAL_SET_WAIT_MASK : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_WAIT_MASK ret %08X"), deviceID, status); break; case IOCTL_SERIAL_WAIT_ON_MASK : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_WAIT_ON_MASK ret %08X"), deviceID, status); break; case IOCTL_SERIAL_IMMEDIATE_CHAR : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_IMMEDIATE_CHAR ret %08X"), deviceID, status); break; case IOCTL_SERIAL_PURGE : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_PURGE ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_HANDFLOW : TraceGetHandflowResponse(deviceID, majorFunction, minorFunction, outputBuf, outputBufferLength, inputBufferLength, ioControlCode, status); break; case IOCTL_SERIAL_SET_HANDFLOW : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_HANDFLOW ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_MODEMSTATUS : modemStatus = (ULONG *)outputBuf; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_MODEMSTATUS ret %08X ..."), deviceID, status); TraceCOMProtocol(_T("<-@@Device %ld:\t\tmodem status:%08X"), deviceID, *modemStatus); case IOCTL_SERIAL_GET_DTRRTS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_DTRRTS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_GET_COMMSTATUS : TraceGetCommStatusResponse(deviceID, majorFunction, minorFunction, outputBuf, outputBufferLength, inputBufferLength, ioControlCode, status); break; case IOCTL_SERIAL_GET_PROPERTIES : TraceGetProperties(deviceID, majorFunction, minorFunction, outputBuf, outputBufferLength, inputBufferLength, ioControlCode, status); break; case IOCTL_SERIAL_XOFF_COUNTER : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_XOFF_COUNTER ret %08X"), deviceID, status); break; case IOCTL_SERIAL_LSRMST_INSERT : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_LSRMST_INSERT ret %08X"), deviceID, status); break; case IOCTL_SERIAL_CONFIG_SIZE : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_CONFIG_SIZE ret %08X ..."), deviceID, status); configSize = (ULONG *)outputBuf; TraceCOMProtocol(_T("<-@@Device %ld:\t\tConfig size: %ld"), deviceID, configSize); break; case IOCTL_SERIAL_GET_STATS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_STATS ret %08X"), deviceID, status); break; case IOCTL_SERIAL_CLEAR_STATS : TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_CLEAR_STATS ret %08X"), deviceID, status); break; default: TraceCOMProtocol(_T("<-@@Device %ld:\tUnrecognized IOCTL %08X"), deviceID, ioControlCode); } } void TraceSetHandflowRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ) /*++ Routine Description: Trace out a Set Handflow request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { PSERIAL_HANDFLOW handFlow; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_HANDFLOW ..."), deviceID); handFlow = (PSERIAL_HANDFLOW)inputBuf; if (handFlow->ControlHandShake & SERIAL_CTS_HANDSHAKE) { TraceCOMProtocol(_T("->@@Device %ld:\t\tCTS enabled.")); } if (handFlow->ControlHandShake & SERIAL_DSR_HANDSHAKE) { TraceCOMProtocol(_T("->@@Device %ld:\t\tDSR enabled.")); } if (handFlow->FlowReplace & SERIAL_AUTO_TRANSMIT) { TraceCOMProtocol(_T("->@@Device %ld:\t\tOUTX enabled.")); } if (handFlow->FlowReplace & SERIAL_AUTO_RECEIVE) { TraceCOMProtocol(_T("->@@Device %ld:\t\tINX enabled.")); } if (handFlow->FlowReplace & SERIAL_NULL_STRIPPING) { TraceCOMProtocol(_T("->@@Device %ld:\t\tNull Stripping enabled.")); } if (handFlow->FlowReplace & SERIAL_ERROR_CHAR) { TraceCOMProtocol(_T("->@@Device %ld:\t\tError Character enabled.")); } if (handFlow->FlowReplace & SERIAL_XOFF_CONTINUE) { TraceCOMProtocol(_T("->@@Device %ld:\t\tXOFF Continue enabled.")); } if (handFlow->ControlHandShake & SERIAL_ERROR_ABORT) { TraceCOMProtocol(_T("->@@Device %ld:\t\tError Abort enabled.")); } switch (handFlow->FlowReplace & SERIAL_RTS_MASK) { case 0: TraceCOMProtocol(_T("->@@Device %ld:\t\tRTS Control disable.")); break; case SERIAL_RTS_CONTROL: TraceCOMProtocol(_T("->@@Device %ld:\t\tRTS Control enable.")); break; case SERIAL_RTS_HANDSHAKE: TraceCOMProtocol(_T("->@@Device %ld:\t\tRTS Control Handshake.")); break; case SERIAL_TRANSMIT_TOGGLE: TraceCOMProtocol(_T("->@@Device %ld:\t\tRTS Control Toggle.")); break; } switch (handFlow->ControlHandShake & SERIAL_DTR_MASK) { case 0: TraceCOMProtocol(_T("->@@Device %ld:\t\tDTR Control disable.")); break; case SERIAL_DTR_CONTROL: TraceCOMProtocol(_T("->@@Device %ld:\t\tDTR Control enable.")); break; case SERIAL_DTR_HANDSHAKE: TraceCOMProtocol(_T("->@@Device %ld:\t\tDTR Control handshake.")); break; } if (handFlow->ControlHandShake & SERIAL_DSR_SENSITIVITY) { TraceCOMProtocol(_T("->@@Device %ld:\t\tDSR Sensitivity is TRUE.")); } TraceCOMProtocol(_T("->@@Device %ld:\t\tXON Limit is %ld."), (WORD)handFlow->XonLimit); TraceCOMProtocol(_T("->@@Device %ld:\t\tXOFF Limit is %ld."), (WORD)handFlow->XoffLimit); } void TraceSetWaitMaskRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ) /*++ Routine Description: Trace out a Set Wait Mask request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { ULONG *waitMask; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_GET_WAIT_MASK ..."), deviceID); waitMask = (ULONG *)inputBuf; if (*waitMask & EV_BREAK) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_BREAK is set"), deviceID); } if (*waitMask & EV_CTS) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_CTS is set"), deviceID); } if (*waitMask & EV_DSR) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_DSR is set"), deviceID); } if (*waitMask & EV_ERR) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_ERR is set"), deviceID); } if (*waitMask & EV_RING) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_RING is set"), deviceID); } if (*waitMask & EV_RLSD) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_RLSD is set"), deviceID); } if (*waitMask & EV_RXCHAR) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_RXCHAR is set"), deviceID); } if (*waitMask & EV_RXFLAG) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_RXFLAG is set"), deviceID); } if (*waitMask & EV_TXEMPTY) { TraceCOMProtocol(_T("->@@Device %ld:\t\tWait mask EV_TXEMPTY is set"), deviceID); } } void TraceSetTimeoutsRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ) /*++ Routine Description: Trace out a Set Timeouts request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { PSERIAL_TIMEOUTS newTimeouts; newTimeouts = (PSERIAL_TIMEOUTS)inputBuf; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_TIMEOUTS ...."), deviceID); TraceCOMProtocol(_T("->@@Device %ld:\t\tReadIntervalTimeout:%ld"), deviceID, newTimeouts->ReadIntervalTimeout); TraceCOMProtocol(_T("->@@Device %ld:\t\tReadTotalTimeoutMultiplier:%ld"), deviceID, newTimeouts->ReadTotalTimeoutMultiplier); TraceCOMProtocol(_T("->@@Device %ld:\t\tReadTotalTimeoutConstant:%ld"), deviceID, newTimeouts->ReadTotalTimeoutConstant); TraceCOMProtocol(_T("->@@Device %ld:\t\tWriteTotalTimeoutMultiplier:%ld"), deviceID, newTimeouts->WriteTotalTimeoutMultiplier); TraceCOMProtocol(_T("->@@Device %ld:\t\tWriteTotalTimeoutConstant:%ld"), deviceID, newTimeouts->WriteTotalTimeoutConstant); } void TraceSetCharsRequest( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE inputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode ) /*++ Routine Description: Trace out a Set Chars request. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { PSERIAL_CHARS serialChars; serialChars = (PSERIAL_CHARS)inputBuf; TraceCOMProtocol(_T("->@@Device %ld:\tIOCTL_SERIAL_SET_CHARS ...."), deviceID); TraceCOMProtocol(_T("->@@Device %ld:\t\tXonChar:%ld"), deviceID, serialChars->XonChar); TraceCOMProtocol(_T("->@@Device %ld:\t\tXoffChar:%ld"), deviceID, serialChars->XoffChar); TraceCOMProtocol(_T("->@@Device %ld:\t\tErrorChar:%ld"), deviceID, serialChars->ErrorChar); TraceCOMProtocol(_T("->@@Device %ld:\t\tBreakChar:%ld"), deviceID, serialChars->BreakChar); TraceCOMProtocol(_T("->@@Device %ld:\t\tEofChar:%ld"), deviceID, serialChars->EofChar); TraceCOMProtocol(_T("->@@Device %ld:\t\tEventChar:%ld"), deviceID, serialChars->EventChar); } void TraceGetTimeoutsResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out a Get Timeouts response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. Return Value: NA --*/ { PSERIAL_TIMEOUTS st; st = (PSERIAL_TIMEOUTS)outputBuf; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_TIMEOUTS ret %08X ..."), deviceID, status); TraceCOMProtocol(_T("<-@@Device %ld:\t\tReadIntervalTimeout:%ld"), deviceID, st->ReadIntervalTimeout); TraceCOMProtocol(_T("<-@@Device %ld:\t\tReadTotalTimeoutMultiplier:%ld"), deviceID, st->ReadTotalTimeoutMultiplier); TraceCOMProtocol(_T("<-@@Device %ld:\t\tReadTotalTimeoutConstant:%ld"), deviceID, st->ReadTotalTimeoutConstant); TraceCOMProtocol(_T("<-@@Device %ld:\t\tWriteTotalTimeoutMultiplier:%ld"), deviceID, st->WriteTotalTimeoutMultiplier); TraceCOMProtocol(_T("<-@@Device %ld:\t\tWriteTotalTimeoutConstant:%ld"), deviceID, st->WriteTotalTimeoutConstant); } void TraceGetCharsResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out a Get Chars response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Return status from operation. Return Value: NA --*/ { PSERIAL_CHARS serialChars; serialChars = (PSERIAL_CHARS)outputBuf; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_CHARS ret %08X ..."), deviceID, status); TraceCOMProtocol(_T("<-@@Device %ld:\t\tXonChar:%ld"), deviceID, serialChars->XonChar); TraceCOMProtocol(_T("<-@@Device %ld:\t\tXoffChar:%ld"), deviceID, serialChars->XoffChar); TraceCOMProtocol(_T("<-@@Device %ld:\t\tErrorChar:%ld"), deviceID, serialChars->ErrorChar); TraceCOMProtocol(_T("<-@@Device %ld:\t\tBreakChar:%ld"), deviceID, serialChars->BreakChar); TraceCOMProtocol(_T("<-@@Device %ld:\t\tEofChar:%ld"), deviceID, serialChars->EofChar); TraceCOMProtocol(_T("<-@@Device %ld:\t\tEventChar:%ld"), deviceID, serialChars->EventChar); } void TraceGetWaitMaskResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out a Get Wait Mask response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Return status from operation. Return Value: NA --*/ { ULONG *waitMask; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_WAIT_MASK ret %08X ..."), deviceID, status); waitMask = (ULONG *)outputBuf; if (*waitMask & EV_BREAK) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_BREAK is set"), deviceID); } if (*waitMask & EV_CTS) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_CTS is set"), deviceID); } if (*waitMask & EV_DSR) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_DSR is set"), deviceID); } if (*waitMask & EV_ERR) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_ERR is set"), deviceID); } if (*waitMask & EV_RING) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_RING is set"), deviceID); } if (*waitMask & EV_RLSD) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_RLSD is set"), deviceID); } if (*waitMask & EV_RXCHAR) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_RXCHAR is set"), deviceID); } if (*waitMask & EV_RXFLAG) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_RXFLAG is set"), deviceID); } if (*waitMask & EV_TXEMPTY) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait mask EV_TXEMPTY is set"), deviceID); } } void TraceGetHandflowResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out a Get Handflow response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Return status from operation. Return Value: NA --*/ { PSERIAL_HANDFLOW handFlow; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_SET_HANDFLOW ret %08X ..."), deviceID, status); handFlow = (PSERIAL_HANDFLOW)outputBuf; if (handFlow->ControlHandShake & SERIAL_CTS_HANDSHAKE) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tCTS enabled."), deviceID); } if (handFlow->ControlHandShake & SERIAL_DSR_HANDSHAKE) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tDSR enabled."), deviceID); } if (handFlow->FlowReplace & SERIAL_AUTO_TRANSMIT) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tOUTX enabled."), deviceID); } if (handFlow->FlowReplace & SERIAL_AUTO_RECEIVE) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tINX enabled."), deviceID); } if (handFlow->FlowReplace & SERIAL_NULL_STRIPPING) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tNull Stripping enabled."), deviceID); } if (handFlow->FlowReplace & SERIAL_ERROR_CHAR) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tError Character enabled."), deviceID); } if (handFlow->FlowReplace & SERIAL_XOFF_CONTINUE) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tXOFF Continue enabled."), deviceID); } if (handFlow->ControlHandShake & SERIAL_ERROR_ABORT) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tError Abort enabled."), deviceID); } switch (handFlow->FlowReplace & SERIAL_RTS_MASK) { case 0: TraceCOMProtocol(_T("<-@@Device %ld:\t\tRTS Control disable."), deviceID); break; case SERIAL_RTS_CONTROL: TraceCOMProtocol(_T("<-@@Device %ld:\t\tRTS Control enable."), deviceID); break; case SERIAL_RTS_HANDSHAKE: TraceCOMProtocol(_T("<-@@Device %ld:\t\tRTS Control Handshake."), deviceID); break; case SERIAL_TRANSMIT_TOGGLE: TraceCOMProtocol(_T("<-@@Device %ld:\t\tRTS Control Toggle."), deviceID); break; } switch (handFlow->ControlHandShake & SERIAL_DTR_MASK) { case 0: TraceCOMProtocol(_T("<-@@Device %ld:\t\tDTR Control disable."), deviceID); break; case SERIAL_DTR_CONTROL: TraceCOMProtocol(_T("<-@@Device %ld:\t\tDTR Control enable."), deviceID); break; case SERIAL_DTR_HANDSHAKE: TraceCOMProtocol(_T("<-@@Device %ld:\t\tDTR Control handshake."), deviceID); break; } if (handFlow->ControlHandShake & SERIAL_DSR_SENSITIVITY) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tDSR Sensitivity is TRUE."), deviceID); } TraceCOMProtocol(_T("<-@@Device %ld:\t\tXON Limit is %ld."), (WORD)handFlow->XonLimit, deviceID); TraceCOMProtocol(_T("<-@@Device %ld:\t\tXOFF Limit is %ld."), deviceID, (WORD)handFlow->XoffLimit); } void TraceGetCommStatusResponse( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out a Get Communication Status response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Return status from operation. Return Value: NA --*/ { PSERIAL_STATUS serialCommStatus; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_COMMSTATUS ret %08X ..."), deviceID, status); serialCommStatus = (PSERIAL_STATUS)outputBuf; if (serialCommStatus->HoldReasons & SERIAL_TX_WAITING_FOR_CTS) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWaiting for CTS."), deviceID); } if (serialCommStatus->HoldReasons & SERIAL_TX_WAITING_FOR_DSR) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWaiting for DSR."), deviceID); } if (serialCommStatus->HoldReasons & SERIAL_TX_WAITING_FOR_DCD) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWaiting for DCD."), deviceID); } if (serialCommStatus->HoldReasons & SERIAL_TX_WAITING_FOR_XON) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWaiting for XON."), deviceID); } if (serialCommStatus->HoldReasons & SERIAL_TX_WAITING_XOFF_SENT) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWaiting for XOFF Sent."), deviceID); } if (serialCommStatus->EofReceived) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tEOF received."), deviceID); } if (serialCommStatus->WaitForImmediate) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tWait for immediate."), deviceID); } TraceCOMProtocol(_T("<-@@Device %ld:\t\t%ld byes in input queue."), deviceID, serialCommStatus->AmountInInQueue); TraceCOMProtocol(_T("<-@@Device %ld:\t\t%ld byes in input queue."), deviceID, serialCommStatus->AmountInOutQueue); if (serialCommStatus->Errors & SERIAL_ERROR_BREAK) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tError Break."), deviceID); } if (serialCommStatus->Errors & SERIAL_ERROR_FRAMING) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tFraming Error."), deviceID); } if (serialCommStatus->Errors & SERIAL_ERROR_OVERRUN) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tOverrun Error."), deviceID); } if (serialCommStatus->Errors & SERIAL_ERROR_QUEUEOVERRUN) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tQueue Overrun."), deviceID); } if (serialCommStatus->Errors & SERIAL_ERROR_PARITY) { TraceCOMProtocol(_T("<-@@Device %ld:\t\tParity Error."), deviceID); } } void TraceGetProperties( ULONG deviceID, ULONG majorFunction, ULONG minorFunction, PBYTE outputBuf, ULONG outputBufferLength, ULONG inputBufferLength, ULONG ioControlCode, ULONG status ) /*++ Routine Description: Trace out a Get Properties response. Arguments: deviceID - Device Identifer. 0 is okay. majorFunction - IRP Major minorFunction - IRP Minor outputBuf - Output buffer, if applicable outputBufferLength - IRP Output buffer length. inputBufferLength - IRP Input buffer length. ioControlCode - IOCTL control code if IRP is for an IOCTL. status - Return status from operation. Return Value: NA --*/ { PSERIAL_COMMPROP sp; TraceCOMProtocol(_T("<-@@Device %ld:\tIOCTL_SERIAL_GET_PROPERTIES ret %08X ..."), deviceID, status); sp = (PSERIAL_COMMPROP)outputBuf; TraceCOMProtocol(_T("<-@@Device %ld:\t\t: PacketLength %ld."), deviceID, sp->PacketLength); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: PacketVersion %ld."), deviceID, sp->PacketVersion); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: ServiceMask %ld."), deviceID, sp->ServiceMask); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: MaxTxQueue %ld."), deviceID, sp->MaxTxQueue); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: MaxRxQueue %ld."), deviceID, sp->MaxRxQueue); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: MaxBaud %ld."), deviceID, sp->MaxBaud); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: ProvSubType %ld."), deviceID, sp->ProvSubType); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: ProvCapabilities %ld."), deviceID, sp->ProvCapabilities); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: SettableParams %ld."), deviceID, sp->SettableParams); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: SettableBaud %ld."), deviceID, sp->SettableBaud); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: SettableData %ld."), deviceID, sp->SettableData); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: SettableStopParity%ld."),deviceID, sp->SettableStopParity); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: CurrentTxQueue %ld."), deviceID, sp->CurrentTxQueue); TraceCOMProtocol(_T("<-@@Device %ld:\t\t: CurrentRxQueue %ld."), deviceID, sp->CurrentRxQueue); }