分享
 
 
 

UKEY虚拟通道方式流程分析

王朝vc·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

UKEY虚拟通道方式流程分析

最后更新 05-08-19

一 UKEY-虚拟通道整体架构

二 TermRWVC 虚拟通道client

由TSSysInf的client端

(E:\Program Files\Microsoft SDK\samples\winbase\WtsApi\TSSysInf\Client\SysInf_C.c)程序改写。

1 服务器端程序TermRWVC运行在PC上,提供5个接口函数供UKEY厂商调用。

1). 打开设备

TERMRWVC_API HANDLE CreateFileCenterm(char * lpFileName);

2). 关闭设备

TERMRWVC_API BOOL CloseHandleCenterm(HANDLE hFile);

3). 读取文件

TERMRWVC_API BOOL ReadFileCenterm( HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumberOfBytesToRead,

LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped);

4). 写入文件

TERMRWVC_API BOOL WriteFileCenterm( HANDLE hFile,

LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORD lpNumberOfBytesWritten,

LPOVERLAPPED lpOverlapped);

5) .设置波特率(与串口扩展兼容)

TERMRWVC_API BOOL ComSetCenterm( HANDLE hFile,

unsigned long ulBaudRate);

#define TAXUSBNAME TEXT("TAX1:")

//提供Usb接口,设备名为TAX1:

2 TermRWVC.cpp中主要完成以下操作:

1) DllMain,DLL的入口

2) 打开虚拟通道操作OpenTaxVc,调用WTSVirtualChannelOpen函数打开虚拟通道,该函数在2003SDK的Wtsapi32.h中定义。

3) 关闭虚拟通道操作CloseTaxVc

4) 读写虚拟通道操作DoTaxVc

5) 实现打开设备CreateFileCenterm,以TSUSBHSOPEN状态为参数调用DoTaxVc函数。

6) 实现关闭设备CloseHandleCenterm,以TSUSBHSCLOSE状态为参数调用DoTaxVc函数。

7) 实现读取文件ReadFileCenterm,以TSUSBHSREAD状态为参数调用DoTaxVc函数。

8) 实现写入文件WriteFileCenterm,以TSUSBHSWRITE状态为参数调用DoTaxVc函数。

9) 设置波特率ComSetCenterm没有实现。

3 DoTaxVc函数分析

涉及到的类结构TS_USB_DATA *p_usbdata,在StdAfx.h (E:\project\UKEY\天安信源代码\TermRWVC050201\TermRWVC\StdAfx.h)中有定义。

根据dwOPtype的类型判断是以下哪种状态,执行相应的操作

1)TSUSBHSOPEN ,

2)TSUSBHSCLOSE

3) TSUSBHSREAD ,调用WTSVirtualChannelRead

4) TSUSBHSWRITE

5) TSUSBHSSMASK 0x0ce37 //SERVER data

6) TSUSBHSCMASK 0x0ce25 //CLIENT data

7) TSUSBHSTIMEOUT 40000;//INFINITE;

三 usbVTC 虚拟通道Server

由TSSysInf的server端

(E:\Program Files\Microsoft SDK\samples\winbase\WtsApi\TSSysInf\Server)程序改写。

1 SysInfo.h由E:\Program Files\Microsoft SDK\samples\winbase\WtsApi\TSSysInf\Inc\SysInfo.h针对USBKEY做了部分修改:

1) 增加了虚拟通道USB操作类型的声明

2) 增加了类结构TS_USB_DATA 的声明

3) 增加了BOOL ReadUsbData(void)函数声明

4) 增加了BOOL WriteUsbData(DWORD dwlen,char * pszdata) 函数声明

2

VirtualChannelInitEventProc函数(SysInf_C.cpp)

1)Event事件定义

Value

Meaning

CHANNEL_EVENT_CONNECTED

A connection has been established with a terminal server that supports virtual channels. The pData parameter is a pointer to a null-terminated string with the name of the server.

CHANNEL_EVENT_DISCONNECTED

The connection to the terminal server has been disconnected. The pData parameter is NULL.

CHANNEL_EVENT_INITIALIZED

The Terminal Services client initialization has been completed. The pData parameter is NULL.

CHANNEL_EVENT_TERMINATED

The client has been terminated. The pData parameter is NULL.

CHANNEL_EVENT_V1_CONNECTED

A connection has been established with a terminal server that does not support virtual channels. The pData parameter is NULL.

CHANNEL_EVENT_REMOTE_CONTROL_START

A remote control operation has been started. The pData parameter is NULL.

CHANNEL_EVENT_REMOTE_CONTROL_STOP

A remote control operation has been terminated. The pData parameter is a pointer to a null-terminated string containing the name of the server.

2) PCHANNEL_ENTRY_POINTS pEntryPoints类结构体定义

typedef struct tagCHANNEL_ENTRY_POINTS {

DWORD cbSize;

DWORD protocolVersion;

PVIRTUALCHANNELINIT pVirtualChannelInit;

PVIRTUALCHANNELOPEN pVirtualChannelOpen;

PVIRTUALCHANNELCLOSE pVirtualChannelClose;

PVIRTUALCHANNELWRITE pVirtualChannelWrite;

} CHANNEL_ENTRY_POINTS, *PCHANNEL_ENTRY_POINTS;

3) CHANNEL_EVENT_CONNECTED事件处理流程:

3 VirtualChannelOpenEvent 函数

1)event 事件定义

[in] Indicates the event that caused the notification. This parameter can be one of the following values.

Value

Meaning

CHANNEL_EVENT_DATA_RECEIVED

The virtual channel received data from the server end. pData is a pointer to a chunk of the data. dataLength indicates the size of this chunk. totalLength indicates the total size of the data written by the server.

CHANNEL_EVENT_WRITE_CANCELLED

A write operation started by a VirtualChannelWrite call has been canceled. pData is the value specified in the pUserData parameter of VirtualChannelWrite.

A write operation is canceled when the client session is disconnected. This notification enables you to free any memory associated with the write operation.

CHANNEL_EVENT_WRITE_COMPLETE

A write operation started by a VirtualChannelWrite call has been completed. pData is the value specified in the pUserData parameter of VirtualChannelWrite.

4 WorkerThread线程函数

监听由客户端发来的指令

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有