lotus

previous page: 7.9: How to Monitor or Intercept COMM Data Traffic
  
page up: Programming VCOMM FAQ
  
next page: 7.11: Blockable Functions

7.10: HyperTerminal Function Trace




Description

This article is from the Programming VCOMM FAQ, by nelson@desktop.nsc.com (Taed Nelson) with numerous contributions by others.

7.10: HyperTerminal Function Trace


[Contributed by Taed Nelson (nelson@lan.nsc.com).]

This trace is from a port driver that uses Vireo's VtoolsD, but the
translations to normal port driver functions should be obvious. All numbers
are in hexadecimal.

This was done by opening HyperTerminal with a script that uses COM5, hitting
the Cancel button, typing a single return character, hitting the disconnect
button, and then quitting HyperTerminal. The Writes that are seen are thus
the return character, and then the normal UniModem "ATZ<CR>".

Note that after the return character is written, there is no "Callback:
CN_RECEIVE". This is because the Read threshhold is 50, but only 1 character
was received. (A character was received since the virtual modem echos
characters in command mode.) But what is not seen in this trace is that,
since dwLastReceivedTime was kept updated, VCOMM did a "Callback: CN_RECEIVE"
when a certain timer expired. HyperTerminal then does a Read a short time
later. See other sections in this FAQ for mor information.

Obviously, pointers and some other values should not match anyone else's
traces, but the sequence of function calls should be nearly identical.

OnSysDynamicDeviceInit
DriverControl (function=00000000)
DC_Initialize (handle=c17cac74, iobase=00000000, irq=00000000, name=COM5)
Initialize (m_name=C16B4A30, baseIO=00000000, irq=00000000)
Open (hVM=C3D20154, pError=C15F5E20)
EnableNotification (pCallback=C1737E2E, refData=C65A0018)
EscapeFunction (lFunc=00000013, InData=C65A00A0, pOutData=00000000)
SetModemStatusShadow (pMSRShadow=C65A0050)
SetReadCallback (RxTrigger=FFFFFFFF, pCallback=00000000, refData=00000000)
ClearError (pComstat=00000000, pError=C15F5DE8)
Read (buf=C65A068C, cbRequest=00000001, pRxCount=C15F5E00, RxCount=00000000)
Purge (qType=00000001)
ClearError (pComstat=00000000, pError=C15F5E0C)
SetReadCallback (RxTrigger=00000001, pCallback=C173804C, refData=C65A0658)
GetCommState (pDCB=C15F5DF4)
SetCommState (pDCB=C15F5DF4, ActionMask=FFFFFFFF)
EscapeFunction (lFunc=00000005, InData=00000000, pOutData=00000000)
EscapeFunction (lFunc=00000003, InData=00000000, pOutData=00000000)
EscapeFunction (lFunc=00000010, InData=00000000, pOutData=00000000)
EscapeFunction (lFunc=00000014, InData=00000000, pOutData=00000000)
Setup (RxQueue=00000000, cbRxQueue=00001000, TxQueue=00000000, cbTxQueue=00000000)
Setup (RxQueue=00000000, cbRxQueue=00001000, TxQueue=00000000, cbTxQueue=00001000)
GetCommState (pDCB=C15F5E58)
SetCommState (pDCB=C15F5E58, ActionMask=FFFFFFFF)
EscapeFunction (lFunc=00000005, InData=00000000, pOutData=00000000)
EscapeFunction (lFunc=00000003, InData=00000000, pOutData=00000000)
SetReadCallback (RxTrigger=FFFFFFFF, pCallback=C1737E2E, refData=C65A0018)
SetWriteCallback (TxTrigger=FFFFFFFF, pCallback=C1737E2E, refData=C65A0018)
SetEventMask (mask=00000080, pEvents=00000000)
Setup (RxQueue=00000000, cbRxQueue=00008000, TxQueue=00000000, cbTxQueue=00008000)
GetCommState (pDCB=C15F5E58)
GetCommState (pDCB=C15F5E58)
GetCommState (pDCB=C15F5E58)
SetCommState (pDCB=C15F5E58, ActionMask=FFFFFFFF)
EscapeFunction (lFunc=00000005, InData=00000000, pOutData=00000000)
EscapeFunction (lFunc=00000003, InData=00000000, pOutData=00000000)
SetEventMask (mask=000000A0, pEvents=C65A0048)
GetQueueStatus (pComstat=C15F9E20)
SetReadCallback (RxTrigger=00000050, pCallback=C1737E2E, refData=C65A0018)
GetQueueStatus (pComstat=C1618E20)
SetWriteCallback (TxTrigger=00000001, pCallback=C1737E2E, refData=C65A0018)
Write (buf=00668D94, cbRequest=00000001, pTxCount=C1684CB4)
Callback: CN_TRANSMIT
SetReadCallback (RxTrigger=FFFFFFFF, pCallback=C1737E2E, refData=C65A0018)
Read (buf=C1603AD8, cbRequest=00000050, pRxCount=C1684CF0, RxCount=00000001)
SetWriteCallback (TxTrigger=FFFFFFFF, pCallback=C1737E2E, refData=C65A0018)
GetQueueStatus (pComstat=C1618E74)
GetQueueStatus (pComstat=C15F9E20)
SetReadCallback (RxTrigger=00000050, pCallback=C1737E2E, refData=C65A0018)
SetEventMask (mask=000000A0, pEvents=C65A0048)
GetEventMask (mask=000000A0, pEvents=00BBFF58)
SetReadCallback (RxTrigger=FFFFFFFF, pCallback=00000000, refData=00000000)
ClearError (pComstat=00000000, pError=C15F5E44)
Read (buf=C65A068C, cbRequest=00000001, pRxCount=C15F5E5C, RxCount=00000000)
Purge (qType=00000001)
ClearError (pComstat=00000000, pError=C15F5E68)
SetReadCallback (RxTrigger=00000001, pCallback=C173804C, refData=C65A0658)
SetWriteCallback (TxTrigger=FFFFFFFF, pCallback=00000000, refData=00000000)
SetEventMask (mask=00000000, pEvents=00000000)
Purge (qType=00000000)
ClearError (pComstat=00000000, pError=C15F5E84)
EscapeFunction (lFunc=00000006, InData=00000000, pOutData=00000000)
Purge (qType=00000000)
Purge (qType=00000001)
SetEventMask (mask=00000004, pEvents=00000000)
Write (buf=C170829C, cbRequest=00000004, pTxCount=C65A0508)
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_TRANSMIT
Callback: CN_EVENT=00000004
Callback: CN_EVENT=00000004
Close


 

Continue to:













TOP
previous page: 7.9: How to Monitor or Intercept COMM Data Traffic
  
page up: Programming VCOMM FAQ
  
next page: 7.11: Blockable Functions