Клонируем проект на примере исходного примера VirtualSerial из Win DDK.
Новый проект называем VirtualSerialTcp (тут будет организован мост COM - TCP порт).
Первым делом создаем новый каталог VirtualSerialTcp , копируем туда все файлы из VirtualSerial и потом переименовываем все файлы virtualserial.* в virtualserialtcp.*!
Далее сначала вносим изменения в такие файлы :
virtualserialtcp.inx
Из него в процессе сборки получается virtualserialtcp.inf (по-видимому простым копирование).
Меняем :
[Microsoft.NT$ARCH$]
%VirtualSerialDeviceName%=VirtualSerial_Install,UMDF\VirtualSerialTcp
.........
[SourceDisksFiles]
Virtualserialtcp.dll=1
........
[VirtualSerial_Install]UmdfLibraryVersion=$UMDFVERSION$
ServiceBinary=%12%\UMDF\Virtualserialtcp.dll
DriverCLSID={98E70F77-F6C8-4279-99E6-426A9415BCE1}
//DriverCLSID - обязательно надо сгенерировать новый GUID !
........
[UMDriverCopy]
Virtualserialtcp.dll,,,0x00004000 ; COPYFLG_IN_USE_RENAME
[Strings]
//тут можно писать все , что вам нравится
MSFTUMDF="Pavel Dorofeev"
MediaDescription="Pasha COM-TCP port"
WudfRdDisplayName="Pasha COM-TCP port"
VirtualSerialDeviceName="Pasha COM-TCP" // это имя в диспетчере устройств
sources
TARGETNAME=virtualserialtcp
.....
SOURCES=\
virtualserialtcp.rc \
comsup.cpp \
all.cpp \
dllsup.cpp \
driver.cpp \
device.cpp \
queue.cpp \
ringbuffer.cpp \
tcp.cpp \
.....
NTTARGETFILE1=$(OBJ_PATH)\$(O)\virtualserialtcp.inf
exports.def
; exports.def : Declares the module parameters.
LIBRARY "virtualserialtcp.DLL"
EXPORTS
DllGetClassObject PRIVATE
virtualserialtcp.rc
#define VER_FILETYPE VFT_DLL
#define VER_FILESUBTYPE VFT_UNKNOWN
#define VER_FILEDESCRIPTION_STR "WDF:UMDF VirtualSerialTcp"
#define VER_INTERNALNAME_STR "VirtualSerialTcp"
#define VER_ORIGINALFILENAME_STR "virtualserialtcp.dll"
Что касается трассировки
файл internal.h :
генерируем новый GUID для трассировки и прописываем его ниже:
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID( \
MyDriverTraceControl, (8EEECFC0,1E84,483C,92E6,7733E5FF6569), \
\
WPP_DEFINE_BIT(MYDRIVER_ALL_INFO) \
)
#define MYDRIVER_TRACING_ID L"Microsoft\\UMDF\\VirtualSerialTcp"
// ниже меняем на наш новый DriverCLSID
#define MYDRIVER_CLASS_ID { 0x98e70f77, 0xf6c8, 0x4279, { 0x99, 0xe6, 0x42, 0x6a, 0x94, 0x15, 0xbc, 0xe1 } }
Вроде ничего не упустил. И в конце наш батник которым все собираем и настраиваем.
Сборка
echo off
SET name=virtualserialtcp
SET nameP=VirtualSerialTcp
SET catDEVELOPMENT=VIRTUAL-SERIAL-TCP
SET catBATS=C:\DEVELOPMENT\DRIVERS\
SET trace=%catBATS%%catDEVELOPMENT%\trace\
SET bin=C:\WinDDK\7600.16385.1\src\serial\%nameP%\objchk_win7_amd64\amd64\
SET project=C:\WinDDK\7600.16385.1\src\serial\%nameP%\
SET wdf=C:\WinDDK\7600.16385.1\redist\wdf\amd64\
SET type=UMDF\VirtualSerialTcp
SET traceGUID=8EEECFC0-1E84-483C-92E6-7733E5FF6569
SET PATH=%PATH%;C:\WinDDK\7600.16385.1\tools\devcon\amd64;
call C:\WinDDK\7600.16385.1\bin\setenv.bat C:\WinDDK\7600.16385.1\ chk x64 WIN7
rem call:func tracelog -stop %name%
TIMEOUT /T 1
rem call:func devcon /r remove @root\ports\*
rem TIMEOUT /T 2
cd %bin%
call:func del /Q *.*
cd %project%
call:func build -gce
IF NOT EXIST %bin%WdfCoInstaller01009.dll xcopy %wdf%WdfCoInstaller01009.dll %bin%
IF NOT EXIST %bin%WUDFUpdate_01009.dll xcopy %wdf%WUDFUpdate_01009.dll %bin%
IF EXIST %name%.res del %name%.res
IF EXIST %name%.pdb del %name%.pdb
IF EXIST %name%.res (
echo DON'T DELETE .res
pause
exit
)
IF EXIST %name%.pdb (
echo DON'T DELETE PDB
pause
exit
)
cd %bin%
IF NOT EXIST %name%.pdb (
echo %name%.pdb NOT EXIST
pause
exit
)
call:func del *.tmf
call:func tracepdb.exe -f %bin%%name%.pdb -p %bin% -r %bin% -v -c
cd %trace%
call:func IF EXIST %name%.etl del %name%.etl
cd %trace%
:: parameters number >9
SET command=tracelog.exe -start %name% -guid #{%traceGUID%} -f %trace%%name%.etl -level 5 -flags 0xffff -ft 1
echo -------------------------------------------------------
echo %command%
echo -------------------------------------------------------
%command%
IF NOT %ERRORLEVEL% EQU 0 (
echo *********************************************************
echo ERRORLEVEL=%ERRORLEVEL% %command%
echo *********************************************************
pause
exit
)
call:func devcon.exe install %bin%%name%.inf %type%
TIMEOUT /T 5
call:func tracefmt.exe -f %trace%%name%.etl -p %bin% -o %trace%%name%.txt
echo -------------------------------------------------------
echo "C:\Program Files\Notepad++\notepad++.exe" %trace%%name%.txt
echo -------------------------------------------------------
:: C:\Program Files contains space in path
"C:\Program Files\Notepad++\notepad++.exe" %trace%%name%.txt
echo ---------------- open trace txt file ---------------
IF NOT %ERRORLEVEL% EQU 0 (
echo *************** notepad++.exe ***************
pause
exit
)
:func
echo .
echo -------------------------------------------------------
echo %~1
IF NOT [%~2]==[] echo %~2
IF NOT [%~3]==[] echo %~3
IF NOT [%~4]==[] echo %~4
IF NOT [%~5]==[] echo %~5
IF NOT [%~6]==[] echo %~6
IF NOT [%~7]==[] echo %~7
IF NOT [%~8]==[] echo %~8
IF NOT [%~9]==[] echo %~9
echo -------------------------------------------------------
%~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9
IF NOT %ERRORLEVEL% EQU 0 (
echo *********************************************************
echo ERRORLEVEL=%ERRORLEVEL% %~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9
echo *********************************************************
pause
exit
)
goto :eof
Что выдает наш bat-ник на консоль
WARNING: x64 Native compiling isn't supported. Using cross compilers.
OACR monitor running already
.
-------------------------------------------------------
tracelog
-stop
virtualserialtcp
-------------------------------------------------------
Operation Status: 0L .
Logger Name: virtualserialtcp
Logger Id: 0xa
Logger Thread Id: 000000000000147C
Guid: ae939bdf-a07f-11e8-b4a6-005056c00008
Buffer Size: 64 Kb
Maximum Buffers: 30
Minimum Buffers: 8
Number of Buffers: 8
Free Buffers: 8
Buffers Written: 6
Events Lost: 0
Log Buffers Lost: 0
Real Time Buffers Lost: 0
AgeLimit: 0
Real Time Consumers: 0
ClockType: PerfCounter
Log Mode: Sequential
Maximum File Size: not set
Buffer Flush Timer: 1 secs
Log Filename: C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.etl
Время ожидания 1 сек., нажмите любую клавишу для продолжения ...0
.
-------------------------------------------------------
del
/Q
*.*
-------------------------------------------------------
.
-------------------------------------------------------
build
-gce
-------------------------------------------------------
Invalidating OACR warning log for 'root:amd64chk'
Configuring OACR for 'root:amd64chk' - <OACR on>
C:\WinDDK\7600.16385.1\redist\wdf\amd64\WdfCoInstaller01009.dll
Скопировано файлов: 1.
C:\WinDDK\7600.16385.1\redist\wdf\amd64\WUDFUpdate_01009.dll
Скопировано файлов: 1.
.
-------------------------------------------------------
del
*.tmf
-------------------------------------------------------
.
-------------------------------------------------------
tracepdb.exe
-f
C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
-p
C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\
-r
C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\
-v
-c
-------------------------------------------------------
Microsoft (R) TracePDB.Exe (6.1.7600.16385)
й Microsoft Corporation. All rights reserved.
Drive=C:, Dir=\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\, Name=virtualserialtcp, Ext = .pdb
Target file is C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
Extracting TMF files from C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb to C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\4a9bf3e6-b77c-cb35-6416-7020d4155e6b.tmf for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\f791cea3-3806-2a3b-84be-8d06948e0ab8.tmf for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\8EEECFC0-1E84-483C-92E6-7733E5FF6569.tmc for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\b279a4e7-99fb-bd17-a413-e6bec137c6aa.tmf for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\54ca8054-b3da-cb6c-8727-90c648eec3ef.tmf for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\9e4015eb-5cf0-74d5-1c32-6f252c14e89d.tmf for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
tracepdb : info BNP0000: WPPFMT generating C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\\c9d5dfa7-737c-1322-4e84-ac2c5424799d.tmf for C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.pdb
.
-------------------------------------------------------
IF
EXIST
virtualserialtcp.etl
del
virtualserialtcp.etl
-------------------------------------------------------
-------------------------------------------------------
tracelog.exe -start virtualserialtcp -guid #{8EEECFC0-1E84-483C-92E6-7733E5FF6569} -f C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.etl -level 5 -flags 0xffff -ft 1
-------------------------------------------------------
Logger Started...
Enabling trace to logger 10
Enabling 8eeecfc0-1e84-483c-92e6-7733e5ff6569 (Flags = 0x0000ffff Level = 5 ) to logger 10
Operation Status: 0L .
Logger Name: virtualserialtcp
Logger Id: 0xa
Logger Thread Id: 0000000000000F3C
Guid: ae939bea-a07f-11e8-b4a6-005056c00008
Session Security: D:(A;;0x800;;;WD)(A;;0x120fff;;;SY)(A;;0x120fff;;;LS)(A;;0x120fff;;;NS)(A;;0x120fff;;;BA)(A;;0xee5;;;LU)(A;;LC;;;MU)
Buffer Size: 64 Kb
Maximum Buffers: 30
Minimum Buffers: 8
Number of Buffers: 8
Free Buffers: 8
Buffers Written: 1
Events Lost: 0
Log Buffers Lost: 0
Real Time Buffers Lost: 0
AgeLimit: 0
Real Time Consumers: 0
ClockType: PerfCounter
Log Mode: Sequential
Maximum File Size: not set
Buffer Flush Timer: 1 secs
Log Filename: C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.etl
.
-------------------------------------------------------
devcon.exe
install
C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.inf
UMDF\VirtualSerialTcp
-------------------------------------------------------
Device node created. Install is complete when drivers are installed...
Updating drivers for UMDF\VirtualSerialTcp from C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\virtualserialtcp.inf.
Drivers installed successfully.
Время ожидания 5 сек., нажмите любую клавишу для продолжения ...43210
.
-------------------------------------------------------
tracefmt.exe
-f
C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.etl
-p
C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\
-o
C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.txt
-------------------------------------------------------
Setting log file to: C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.etl
Examining C:\WinDDK\7600.16385.1\tools\tracing\amd64\default.tmf for message formats, 3 found.
Searching for TMF files on path: C:\WinDDK\7600.16385.1\src\serial\VirtualSerialTcp\objchk_win7_amd64\amd64\
Logfile C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.etl:
OS version 6.1.7601 (Currently running on 6.1.7601)
Start Time 2018-08-15-15:21:35.663
End Time Not set (Logger may not have been stopped).
Timezone is @tzres.dll,-1832 (Bias is -180mins)
BufferSize 65536 B
Maximum File Size 0 MB
Buffers Written Not set (Logger may not have been stopped).
Logger Mode Settings (0) Logfile Mode is not set
ProcessorCount 4
Processing completed Buffers: 3, Events: 92, EventsLost: 0 :: Format Errors: 0, Unknowns: 0
Event traces dumped to C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.txt
Event Summary dumped to C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.txt.sum
-------------------------------------------------------
"C:\Program Files\Notepad++\notepad++.exe" C:\DEVELOPMENT\DRIVERS\VIRTUAL-SERIAL-TCP\trace\virtualserialtcp.txt
-------------------------------------------------------
---------------- open trace txt file ---------------
.
-------------------------------------------------------
Режим вывода команд на экран (ECHO) отключен.
-------------------------------------------------------