Все драйвера в 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
)
В какой-то момент ваш проект начинаем выдавать ошибки при компиляции/ сборке.
Из этого например вообще не понять ничего.
Например такое у меня появилось, когда я добавлял слушающий 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 .
Иногда клинит, трассировка не показывает внятных сообщений:
можно удалить драйвер полностью , потом весь каталог куда он собирается, потом остановить трассировку, но ничего не поможет.
Но если в файле internal.h чуть переставить местами файлы
#include "tcp.h"
#include "bridge.h"
вдруг все заводится как надо.
Еще признак исправления трассировки будет какое-то соoбщение SetEntriesInAcl Error...
кое-какие варианты:
Trace(TRACE_LEVEL_INFORMATION,"%!FUNC!" );