Delphi mondială - șofer pe Delfi
Conducătorii auto în Delphi
Compilarea acest exemplu este posibila numai cu Delphi 3. Delphi 2 nu a fost testat din cauza lipsei de ea, Halyards obiect Delphi 4 respins Microsoft® Linker 5.12.8181 ca fișiere de format necunoscut.
Microsoft® ver Macro Assembler au fost utilizate în scris acest material. 6.11d și Microsoft® incrementală Linker ver. 5.12.8181 pentru Windows 98DDK furnizat
drivere VxD sunt împărțite în două tipuri:
Static încărcat în memorie în timpul procesului de boot și sunt prezente în memorie, în orice moment este încărcată dinamic în memorie la prima adresă a conducătorului auto și poate fi descărcat de la închiderea ultimului descriptor VxD.
Fezabilitatea stabilirea sprijinului pe ambele tipuri de încărcare conducătorului auto.
Avem nevoie de un driver dinamic încărcabile VxD (denumit în continuare „VxD“) ca un conducător auto poate fi fără a reporni pentru Windows descărcare de aplicații Win32® folosind CreateFile) de rutină (.
Când aplicația Win32 deschide un mâner la VxD, dispozitivul virtuale cu ajutorul serviciului VWIN32 LoadDevice încarcă VxD-driver-ul în memorie și trimite mesajul de informații W32_DEVICEIOCONTROL încărcate VxD.
Prin urmare, trebuie să se ocupe de cel puțin trei mesaje de sistem pentru construirea unui VxD:
- SYS_DYNAMIC_DEVICE_INIT
- SYS_DYNAMIC_DEVICE_EXIT
- W32_DEVICEIOCONTROL.
Mesajul SYS_DYNAMIC_DEVICE_INIT trimis atunci când încearcă să se încarce în mod dinamic VxD, SYS_DYNAMIC_DEVICE_EXIT a trimis atunci când descărcați în mod dinamic. De stivuitoare de mesaje pentru a confirma succesul trebuie să fie returnate în VXD_SUCCESS registru AX
Mesajul W32_DEVICEIOCONTROL are următoarele valori pentru dwService
DIOC_OPEN - a trimis este trimis la deschiderea CreateFile funcției mâner VxD () numai după SYS_DYNAMIC_DEVICE_INIT. Daca va avea succes, este necesar să se întoarcă NO_ERROR (0);
DIOC_CLOSEHANDLE - a trimis atunci când închideți mânerul VxD funcția API CloseHandle () și chiar înainte de SYS_DYNAMIC_DEVICE_EXIT
(Value> 0) - numărul funcției specificat în parametrul dwIoControlCode la accesarea funcției VxD API DeviceIoControl
Modul de încărcare (vxdmain.asm)
Atunci când se referă la procedurile fiind în modulele Delphi ar trebui să fie luate în considerare pentru fastcall procedure anexate la numele de la începutul „@“
Delphi generează un cod pentru a inițializa module / deprovisioning, referindu-se la procedurile externe HandleFinaly și de inițializare, chiar dacă blocurile initilization și finalizarea în modulul nr. Să creeze un gol „cioturi“ pentru aceste proceduri și le declare disponibile pentru modulele externe.
Modul procedural (vxdProcs.pas)
Instrumentul pentru VxD de încărcare / descărcare
Este o formă simplă, cu două butoane. Aici este o metodă pentru deschiderea și închiderea șoferului VxD.
Unload module neutilizate pot fi efectuate în mod automat prin specificarea parametrilor CreateFile (. FILE_FLAG_DELETE_ON_CLOSE,). În acest caz, sistemul de la fiecare deschidere la descriptorul VxD va crește utilizarea contorului intern de 1 și pentru a scădea 1 atunci când se închide descriptor. Atunci când valoarea contorului este zero VxD este descărcat automat.
Conducătorii auto în Delphi se pot scrie. Dar asta e doar merita?