Клонирование проектов (что и где подправляем)

Клонируем проект на примере исходного примера VirtualSerial из Win DDK.
Новый проект называем VirtualSerialTcp (тут будет организован мост COM - TCP порт).

Первым делом создаем новый каталог VirtualSerialTcp , копируем туда все файлы из VirtualSerial и потом переименовываем все файлы virtualserial.* в virtualserialtcp.*!

фотка 1

Далее сначала вносим изменения в такие файлы :

фотка 2

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) отключен.
-------------------------------------------------------