Пример създаде VxD-шофьор на Delphi (източник) - софтуер
Съставяне на този пример е възможно само с Delphi 3. Delphi 2 не е тествана поради липсата на това, фаловете тези обекти като Делфи 4 отхвърлени Microsoft Линкер 5.12.8181 като файлове с неизвестен формат.
Microsoft Macro Assembler вер са били използвани при написването на този материал. 6.11d и Microsoft Точкова Линкер вер. 5.12.8181 предоставения Windows 98DDK
- Статично заредени в паметта по време на процеса на зареждане и се намират в паметта на всички времена
- Динамично заредени в паметта на първия адрес на водача и може да бъде изтеглен в края на миналия Характеристиката VxD.
Възможността за създаване на подкрепа и двата вида зареждане на водача.
Имаме нужда от динамично зареждаеми VxD шофьор (по-нататък "VxD"), както е шофьор може да бъде без да се рестартира изтегляне Windows от Win32® приложения, използвайки CreateFile () рутина.
Когато прилагането Win32 отваря дръжка на VxD, виртуалната устройство с помощта на VWIN32 LoadDevice обслужване зарежда VxD-водача в паметта и ще изпрати информация съобщението W32_DEVICEIOCONTROL зареден VxD.
Следователно, трябва да се справят с най-малко три системни съобщения за изграждане на VxD:
- SYS_DYNAMIC_DEVICE_INIT
- SYS_DYNAMIC_DEVICE_EXIT
- W32_DEVICEIOCONTROL.
SYS_DYNAMIC_DEVICE_INIT Съобщението е изпратено, когато се опитва да зареди динамично VxD, SYS_DYNAMIC_DEVICE_EXIT изпраща, когато динамично разтоварят. От товарачи съобщение за потвърждаване на успеха трябва да бъдат върнати в VXD_SUCCESS на AX регистър
W32_DEVICEIOCONTROL съобщение има следните стойности за dwService
- DIOC_OPEN - изпраща се изпраща при откриването на дръжката VxD функция CreateFile на () само след SYS_DYNAMIC_DEVICE_INIT. Ако се окаже успешна, е необходимо да се върне NO_ERROR (0);
- DIOC_CLOSEHANDLE - изпратени, когато затворите дръжка VxD функция API CloseHandle на () и точно преди SYS_DYNAMIC_DEVICE_EXIT
- (Стойност> 0) - брой функция посочено в параметър dwIoControlCode при достъп до функцията VxD API DeviceIoControl
Заредете модул (vxdmain.asm)
Когато се говори за процедурите са в Delphi модули трябва да бъдат взети под внимание за fastcall-процедури, приложени към името в началото на знака "@"
Delphi генерира код, за да се инициализира / отмяна на обезпечаването модули, позовавайки се на външни процедури HandleFinaly и инициализация дори ако блоковете initilization и финализиране в модула не. Нека да създадете празен "мъниче" за тези процедури и да декларира ги предоставят за външни модули.
Процедурно модул (vxdProcs.pas)
Инструмент за товарене / разтоварване VxD
Тя е проста форма с два бутона. Ето един метод за отваряне и затваряне на водача VxD.
Разтоварят неизползвани модули могат да се извършват автоматично от уточняване на параметрите на CreateFile (. FILE_FLAG_DELETE_ON_CLOSE,). В този случай системата на всяко отваряне на дескриптора VxD ще се увеличи използването на вътрешния брояч от 1 и да се изважда 1 при затваряне на дескриптора. Когато стойността на брояча е нула VxD се разтоварва автоматично.