build.exe и все сопутствующее в cmd файл

Все драйвера в Windows , да и сама Windows собирается при помощи одной консольной программки build.exe . И похоже это надолго.

Поэтому без bat файла никак не обойтись.

Допустим у вас начался творческий процесс вы начали писать свои драйвера или точнее брать заготовки из Win DDK 7 и править под свои нужды.

Я использую примерно такой батник (не буду комментировать):

rem @echo on

SET name=virtualserial
SET nameP=VirtualSerialTcp
SET cat=C:\DEVELOPMENT\DRIVERS\Virtual-Serial\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 log=%cat%log\
SET type=UMDF\VirtualSerial

call C:\WinDDK\7600.16385.1\bin\setenv.bat C:\WinDDK\7600.16385.1\ chk x64 WIN7

echo  ----------- stop trace %name% -------------
tracelog -stop %name%
echo  ----------- stop trace %name% -------------

echo ---------- delete driver from system -------------------

SET PATH=%PATH%;C:\WinDDK\7600.16385.1\tools\devcon\amd64;

echo ---------- devcon dp_delete === %ERRORLEVEL% -------------------
devcon /r remove @root\ports\*
echo ---------- delete driver from system === %ERRORLEVEL% -------------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo ************* devcon remove ***************
	pause
	exit
)

echo ---------- del .pdb .res -------------------
cd %bin%

echo ---------- del .pdb .res -------------------


echo  ----------- delete *.* in %bin% -------------
cd %bin%
del /Q *.*
echo  ----------- delete *.* === %ERRORLEVEL% -------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo ************* tracepdb ***************
	pause
	exit
)
echo  ----------- delete *.* in %bin% -------------


echo ---------- build -------------------
cd %project%
build -gce
echo ---------- build === %ERRORLEVEL% -------------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo ************* build ***************
	pause
	exit
)

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
)

echo ---------- create TMF files  pdb -- tmf -------------------
del *.tmf
IF NOT %ERRORLEVEL% EQU 0 (
	echo ************* del *.tmf ***************
	pause
	exit
)
tracepdb.exe -f %bin%%name%.pdb -p %bin% -r %bin% -v -c
echo ---------- create TMF files  pdb -- tmf === %ERRORLEVEL% -------------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo ************* tracepdb ***************
	pause
	exit
)


echo ---------- tracelog.exe -start ... -- etl -------------------
cd %log%
IF EXIST %name%.etl del %name%.etl
echo ---------- DELETE etl === %ERRORLEVEL% -------------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo ************* tracepdb ***************
	pause
	exit
)

tracelog.exe -start %name% -guid #{C31877A2-C8C8-4c58-B5B8-7D6311D5E343} -f %log%%name%.etl -level 5 -flags 0xffff -ft 1
IF NOT EXIST %log%%name%.etl (
	echo don't exists  %log%%name%.etl
	pause
	exit
)
echo ---------- tracelog.exe -start ... -- etl === %ERRORLEVEL%  -------------------


echo ---------- devcon.exe install %name% -------------------
devcon.exe install %bin%%name%.inf %type%
echo ---------- devcon.exe install === %ERRORLEVEL% -------------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo *************** devcon ***************
	pause
	exit
)

echo ---------------- tracefmt.exe  etl -- txt ---------------
tracefmt.exe -f %log%%name%.etl -p %bin% -o %log%%name%.txt
IF NOT %ERRORLEVEL% EQU 0 (
	echo *************** tracefmt ***************
	pause
	exit
)
echo ---------------- tracefmt.exe  etl -- txt === %ERRORLEVEL% ---------------


echo ---------------- open trace txt file  ---------------
"C:\Program Files\Notepad  \notepad  .exe" %log%%name%.txt
echo ---------------- open trace txt file  ---------------
IF NOT %ERRORLEVEL% EQU 0 (
	echo *************** notepad  .exe ***************
	pause
	exit
)

В какой-то момент ваш проект начинаем выдавать ошибки при компиляции/ сборке.

фотка 1

Из этого например вообще не понять ничего.
Например такое у меня появилось, когда я добавлял слушающий tcp поток в VirtualSerial пример.

buildchk_win7_amd64.log здесь логи с ошибками компиляции/сборки

В каталоге проекта появился buildchk_win7_amd64.log. И вот тут наконец-то видим , что не нравится сборщику.

К примеру вот такая ругань:

error LNK2001: unresolved external symbol WSARecvEx


Находим на ms сайте описание WSARecvEx и что это реализовано в библиотеки Mswsock.lib, значит забыли эту библиотеку подключить. Подключаем библиотеки в файле sources :

TARGETLIBS=\
..........
$(SDK_LIB_PATH)\Mswsock.lib

и ошибка уходит.

Также почему-то в трее (правый нижний угол окна) у меня имелся какой-то OACR warnings (не помню с чем установилось). Так вот после build-а я там увидел описание ошибок компилятора. Но мне лично удобнее смотреть buildchk_win7_amd64.log в NodePad .

фотка 2

Иногда клинит, трассировка не показывает внятных сообщений:
можно удалить драйвер полностью , потом весь каталог куда он собирается, потом остановить трассировку, но ничего не поможет.

Но если в файле internal.h чуть переставить местами файлы
#include "tcp.h"
#include "bridge.h"
вдруг все заводится как надо.
Еще признак исправления трассировки будет какое-то соoбщение SetEntriesInAcl Error...

кое-какие варианты:
Trace(TRACE_LEVEL_INFORMATION,"%!FUNC!" );