-
大小: 965KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-05-15
- 語(yǔ)言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
主要功能
===========
基本上跟商業(yè)軟件Virtual Serial Ports Driver XP3類似。
1.在操作系統(tǒng)中,虛擬出若干串口??梢允褂么诠ぞ撸ū热绮僮飨到y(tǒng)自帶的超級(jí)終端軟件)對(duì)串口進(jìn)行打開(kāi)、發(fā)送、接收、關(guān)閉等操作。
2. 由于是虛擬串口,所以可以設(shè)置任意波特率、數(shù)據(jù)位、奇偶校驗(yàn)、停止位等端口操作。
3. 通過(guò)協(xié)議傳送、接收數(shù)據(jù)。
使用說(shuō)明
===========
1. 安裝toaster( win2k ddk sample)總線驅(qū)動(dòng)程序:BusEnum.sys。安裝步驟詳見(jiàn)DDK的toaster\bus例子
2. 控制臺(tái)上運(yùn)行enum -p 1,對(duì)新的硬件設(shè)備指定 SimSerial\inf目錄,安裝我們的虛擬串口驅(qū)動(dòng)程序。
安裝完畢以后在“設(shè)備管理器”中應(yīng)該多出一類設(shè)備“VirtualSerial”。enum程序由DDK的toaster\exe\enum例子編譯。只是改動(dòng)了toaster\inc\public.h中的#define BUS_HARDWARE_IDS L"Toaster\\MsToaster\0"
3. 控制臺(tái)上運(yùn)行enum -p 2,添加第二個(gè)虛擬串口設(shè)備
4. 控制臺(tái)上運(yùn)行test.exe,枚舉并且互連剛剛生成的兩個(gè)串口。
5. 打開(kāi)“超級(jí)終端”,在“連接到”對(duì)話框上“連接時(shí)使用”中選擇“COM20”
6. 打開(kāi)“超級(jí)終端”,在“連接到”對(duì)話框上“連接時(shí)使用”中選擇“COM21”
7. 卸載設(shè)備可以在控制臺(tái)上運(yùn)行 enum -u 1, enum -u 2
8. 更新驅(qū)動(dòng)程序時(shí),只需要將所有的虛擬串口卸載,然后再編譯驅(qū)動(dòng)程序,build -ceZ,運(yùn)行cc.bat即可。

代碼片段和文件信息
//?Test.cpp?:?Defines?the?entry?point?for?the?console?application.
//
#include?“stdafx.h“
#include?
#include?
//#include?
#include?
#include?
#include?“objbase.h“
#include?
#include?“..\inc\wdmioctl.h“
DEFINE_GUID(GUID_CLASS_COMPORT??????????0x86e0d1e0L?0x8089?0x11d0?0x9c?0xe4?0x08?0x00?0x3e?0x30?0x1f?0x73);
void?HandleDevice(?PSP_INTERFACE_DEVICE_DETAIL_DATA?detail?);
int?main(int?argc?char*?argv[])
{
HDEVINFO info;
DWORD n;
BOOL bRet;
DWORD needed;
SP_INTERFACE_DEVICE_DATA ifdata;
PSP_INTERFACE_DEVICE_DETAIL_DATA detail?=?NULL;
//?首先得到該ClassGUID值下的設(shè)備信息句柄?info.?本程序中ClassGUID代表串口設(shè)備類
//?HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{86e0d1e0-8089-11d0-9ce4-08003e301f73}
info?=?SetupDiGetClassDevs(?(LPGUID)?&GUID_CLASS_COMPORT//(LPGUID)&GUID_WDMSAMPLE_DEVICE_INTERFACE_CLASS
NULL?NULL?DIGCF_PRESENT?|?DIGCF_INTERFACEDEVICE);
if(?info?==?INVALID_HANDLE_VALUE?){
printf(“Error?%d?trying?to?open?enumeration?handle?for?\n“?GetLastError()?);
return?0;
}
????ifdata.cbSize?=?sizeof(ifdata);
n?=?0;
//?使用該?info?依次枚舉當(dāng)前該ClassGUID下的所有設(shè)備接口,將該接口信息放在ifdata
????while(?SetupDiEnumDeviceInterfaces(info?NULL?(LPGUID)&GUID_CLASS_COMPORT//(LPGUID)?&GUID_WDMSAMPLE_DEVICE_INTERFACE_CLASS
n?&ifdata))
{
//?第一次調(diào)用?SetupDiGetDeviceInterfaceDetail,得到ifdata所需空間大小
SetupDiGetDeviceInterfaceDetail(info?&ifdata?NULL?0?&needed?NULL);
detail?=?(PSP_INTERFACE_DEVICE_DETAIL_DATA)?malloc(needed);
if?(!detail)
{
printf(“Error?%d?trying?to?get?memory?for?interface?detail\n“?GetLastError());
goto?FAILED;
}
//?第二次調(diào)用?SetupDiGetDeviceInterfaceDetail,得到ifdata指代的設(shè)備的詳細(xì)信息
detail->cbSize?=?sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if?(!SetupDiGetDeviceInterfaceDetail(info?&ifdata?detail?needed?NULL?NULL))
{
printf(“Error?%d?getting?interface?detail\n“?GetLastError());
goto?FAILED;
}
//?對(duì)ifdata/detail所指代的設(shè)備進(jìn)行打開(kāi),IoControl,關(guān)閉等操作
HandleDevice(?detail?);
free(?detail?);
detail?=?NULL;
n++;
}
FAILED:
if(?detail?!=?NULL?){
free(?detail?);
}
bRet?=?SetupDiDestroyDeviceInfoList(?info?);
return?0;
}
void?HandleDevice(?PSP_INTERFACE_DEVICE_DETAIL_DATA?detail?)
{
????char name[?MAX_PATH?];
HANDLE hfile;
DWORD junk;
INT ComX;
//?打開(kāi)設(shè)備,此處的設(shè)備名稱為Kernel?mode下IoRegisterDeviceInterface后OS自動(dòng)生成名稱。如下形式
//?##?#Toaster#MsToaster#1&1aafb3d5&2&01#{86e0d1e0-8089-11d0-9ce4-08003e301f73}
strncpy(name?detail->DevicePath?sizeof(name));
hfile?=?CreateFile(?name?GENERIC_READ?|?GENERIC_WRITE?0?NULL?OPEN_EXISTING?0?NULL);
????if?(hfile?==?INVALID_HANDLE_VALUE)
????{
????????printf(“Error?%d?trying?to?open?%s\n“?GetLastError()?name);
????????return;
????}
scanf(?“%d“?&ComX?);
#if?1
if(!DeviceIoControl(hfileIOCTL_INIT_SETTING?&ComX?sizeof(?INT?)?NULL??0?&junk?NULL))
????{
printf(“Direct?IOCTL?failed?with?code?%d
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄??????????0??2004-01-16?09:10??SimSerial
?????目錄??????????0??2004-01-16?09:10??SimSerial\DebugLog
?????目錄??????????0??2004-01-16?09:10??SimSerial\DebugLog\24
?????文件??????30970??2003-12-24?23:32??SimSerial\DebugLog\24\COM9口發(fā)送文件打印信息.log
?????文件??????28792??2003-12-24?23:43??SimSerial\DebugLog\24\com9接收文件打印信息.log
?????文件??????12368??2003-12-17?23:44??SimSerial\DebugLog\filter打印信息_8.27.log
?????文件???????2190??2003-12-11?22:30??SimSerial\DebugLog\GetResource.log
?????文件???????7892??2003-12-11?23:00??SimSerial\DebugLog\toaster_bus分析2003_12_11.log
?????文件???????4928??2003-12-17?23:27??SimSerial\DebugLog\使用超級(jí)終端打開(kāi)虛擬串口.log
?????文件??????36374??2003-12-18?22:55??SimSerial\DebugLog\接收文件.log
?????文件????????350??2004-01-07?23:56??SimSerial\DebugLog\設(shè)備名的處理說(shuō)明.txt
?????文件??????16322??2003-12-18?21:18??SimSerial\DebugLog\超級(jí)終端中接收文件.log
?????文件???????9692??2003-12-24?21:36??SimSerial\DebugLog\過(guò)濾驅(qū)動(dòng)攔截XP3虛擬串口信息.log
?????目錄??????????0??2004-01-16?09:10??SimSerial\exe
?????文件???????3389??2003-12-26?23:48??SimSerial\exe\1.c
?????文件???????1196??2003-07-16?21:44??SimSerial\exe\ReadMe.txt
?????文件????????291??2003-07-16?21:44??SimSerial\exe\StdAfx.cpp
?????文件????????769??2003-07-16?21:44??SimSerial\exe\StdAfx.h
?????文件???????9795??2004-01-14?23:45??SimSerial\exe\Test.cpp
?????文件???????4551??2004-01-08?22:31??SimSerial\exe\Test.dsp
?????文件????????531??2003-07-16?21:44??SimSerial\exe\Test.dsw
?????文件??????58368??2004-01-14?23:46??SimSerial\exe\Test.ncb
?????文件??????55808??2004-01-14?23:46??SimSerial\exe\Test.opt
?????文件???????1451??2004-01-14?23:46??SimSerial\exe\Test.plg
?????文件????????657??2004-01-15?23:53??SimSerial\exe\說(shuō)明.txt
?????目錄??????????0??2004-01-16?09:10??SimSerial\filter
?????目錄??????????0??2003-12-17?23:30??SimSerial\filter\buslower
?????文件????????271??2000-07-27?01:35??SimSerial\filter\buslower\MAKEFILE
?????文件?????????91??2000-07-27?01:35??SimSerial\filter\buslower\sources
?????目錄??????????0??2003-12-17?23:30??SimSerial\filter\busupper
............此處省略178個(gè)文件信息
評(píng)論
共有 條評(píng)論