Пример създаде 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 шофьор (по-нататък "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 се разтоварва автоматично.