TDTCP!TdInputThread函数和termdd!IcaChannelInput函数的关系

NTSTATUS

TdInputThread( PTD pTd )

{

(void) IcaChannelInput( pTd->pContext,

Channel_Command,

0,

NULL,

(PCHAR) &Command,

sizeof(Command) );

}

1: kd> p

TDTCP!TdInputThread+0x3d1:

b98a7613 c785ecf7ffff02000000 mov dword ptr [ebp-814h],2

1: kd> p

TDTCP!TdInputThread+0x3db:

b98a761d e9f1010000 jmp TDTCP!TdInputThread+0x5d1 (b98a7813)

1: kd> p

TDTCP!TdInputThread+0x5d1:

b98a7813 6808080000 push 808h

1: kd> t

Breakpoint 6 hit

TDTCP!IcaChannelInput:

b98acb90 ff2528d08ab9 jmp dword ptr [TDTCP!_imp__IcaChannelInput (b98ad028)]

1: kd> kc

00 TDTCP!IcaChannelInput

01 termdd!_IcaDriverThread

02 nt!PspSystemThreadStartup

03 nt!KiThreadStartup

1: kd> p

termdd!IcaChannelInput:

ba84fa6c 55 push ebp

1: kd> kc

00 termdd!IcaChannelInput
01 TDTCP!TdInputThread
02 termdd!_IcaDriverThread
03 nt!PspSystemThreadStartup
04 nt!KiThreadStartup

1: kd> bp termdd!IcaChannelInputInternal

1: kd> g

Breakpoint 13 hit

termdd!IcaChannelInputInternal:

ba84ebce 55 push ebp

1: kd> kc

00 termdd!IcaChannelInputInternal

01 termdd!IcaChannelInput

02 RDPWD!MCSIcaChannelInput

03 termdd!IcaChannelInput

04 TDTCP!TdInputThread

05 termdd!_IcaDriverThread

06 nt!PspSystemThreadStartup

07 nt!KiThreadStartup

1: kd> dv

pStack = 0x89304020
ChannelClass = Channel_Command (0n4)

VirtualClass = 0n0

pInBuf = 0x00000000

pBuffer = 0xb9b7c548 "???"

ByteCount = 0x808

pChannel = 0x80ae2bca

Status = 0n-1165694001

cancelIrql = 0x08 ''

SdIoctl = struct _SD_IOCTL

IrpSp = 0x00000000

CopyCount = 0

pConnect = 0xb9b7c4c8

Irp = 0x00000808

pFilterBuf = 0x00000000

case Channel_Command :

if ( ByteCount < sizeof(ICA_COMMAND_HEADER) ) {

TRACESTACK(( pStack, TC_ICADD, TT_ERROR,

"TermDD: IcaChannelInputInternal: Channel_command bad bytecount\n" ));

break;

}

pHeader = (PICA_COMMAND_HEADER) pBuffer;

switch ( pHeader->Command ) {

case ICA_COMMAND_BROKEN_CONNECTION :

TRACESTACK(( pStack, TC_ICADD, TT_API1,

"TermDD: IcaChannelInputInternal, Broken Connection\n" ));

/* set closing flag */

pStack->fClosing = TRUE;

srv03rtm/public/internal/termsrv/inc/icadd.h

/*

* IcaTrace - Trace Class

*/

#define TC_ICASRV 0x00000001 // ica service

#define TC_ICAAPI 0x00000002 // icadd interface dll

#define TC_ICADD 0x00000004 // ica device driver

#define TC_WD 0x00000008 // winstation driver

#define TC_CD 0x00000010 // connection driver

#define TC_PD 0x00000020 // protocol driver

#define TC_TD 0x00000040 // transport driver

#define TC_RELIABLE 0x00000100 // reliable protocol driver

#define TC_FRAME 0x00000200 // frame protocol driver

#define TC_COMP 0x00000400 // compression

#define TC_CRYPT 0x00000800 // encryption

#define TC_TW 0x10000000 // thinwire

#define TC_DISPLAY 0x10000000 // display driver

#define TC_WFSHELL 0x20000000

#define TC_WX 0x40000000 // winstation extension

#define TC_LOAD 0x80000000 // load balancing

#define TC_ALL 0xffffffff // everything