lundi 21 avril 2014

c ++ - puis-je écrire les pilotes Windows avec Delphi 2010 ? -Débordement de pile


I've always heard that Delphi can do almost anything C++ can do...except write Windows drivers. Is this correct, and if so, why is that?


I recently read a blog post online that may indicate a possible solution for writing drivers with Delphi, but it's 3 years old and I don't know how accurate this information is.


So, with the latest version of Delphi (2010), would it be technically possible to write a Windows driver?




It may be technically possible to write some drivers with Delphi, but as far as a general answer goes, I'd say: you can't easily write drivers with Delphi.


First, there's a difference between user-mode driver (UMDF) drivers and kernel-mode (KMDF) drivers. UMDF drivers should be possible with Delphi. KMDF drivers aren't easily possible though, because


1) Delphi's linker can't produce them and


2) Delphi's object file format is different from the COFF format the Microsoft linker uses by default.


3) Delphi's RTL makes the assumption it lives in user-mode and may do certain things that one shouldn't do in kernel-land (I think e.g. of the way exceptions are handled; also different memory management), so you'd have to be very careful on which RTL functions are safe to use. There are also difficulties with System and SysInit units (see the comment by Ritsaert Hornstra to another answer here).


I'm not saying these aren't problems that cannot be overcome (cf. the post you link to) if you're really dedicated, but it won't be straightforward.


Secondly, KMDF drivers (I don't know about UMDF, actually - can anyone comment?) for Win64 have to be in 64-bit code. Since currently, there is no 64-bit Delphi compiler, writing them is a definite no-no.




You can write a Windows driver in any language that compiles down to a DLL in PE format, that has no external dependencies (other than those approved for loading in the kernel), can call functions with STDCALL linkage, and export functions with STDCALL linkage.


The no-unapproved-external-dependencies is going to be the hard part I would think. :)




I agree with both previous answers. I've actually done it in a special case: A print monitor. It's a special case of driver that runs in user mode, and I could write one in Delphi. There was definitely some benefits in using Delphi there.


But the last pitfall that wasn't mentioned yet (I think) is that you need to translate zillions of complex structures and macros from DDK header files. Translating some convoluted macros, in particular, can be very tricky.




I've found some links that may help you:




I've always heard that Delphi can do almost anything C++ can do...except write Windows drivers. Is this correct, and if so, why is that?


I recently read a blog post online that may indicate a possible solution for writing drivers with Delphi, but it's 3 years old and I don't know how accurate this information is.


So, with the latest version of Delphi (2010), would it be technically possible to write a Windows driver?



It may be technically possible to write some drivers with Delphi, but as far as a general answer goes, I'd say: you can't easily write drivers with Delphi.


First, there's a difference between user-mode driver (UMDF) drivers and kernel-mode (KMDF) drivers. UMDF drivers should be possible with Delphi. KMDF drivers aren't easily possible though, because


1) Delphi's linker can't produce them and


2) Delphi's object file format is different from the COFF format the Microsoft linker uses by default.


3) Delphi's RTL makes the assumption it lives in user-mode and may do certain things that one shouldn't do in kernel-land (I think e.g. of the way exceptions are handled; also different memory management), so you'd have to be very careful on which RTL functions are safe to use. There are also difficulties with System and SysInit units (see the comment by Ritsaert Hornstra to another answer here).


I'm not saying these aren't problems that cannot be overcome (cf. the post you link to) if you're really dedicated, but it won't be straightforward.


Secondly, KMDF drivers (I don't know about UMDF, actually - can anyone comment?) for Win64 have to be in 64-bit code. Since currently, there is no 64-bit Delphi compiler, writing them is a definite no-no.



You can write a Windows driver in any language that compiles down to a DLL in PE format, that has no external dependencies (other than those approved for loading in the kernel), can call functions with STDCALL linkage, and export functions with STDCALL linkage.


The no-unapproved-external-dependencies is going to be the hard part I would think. :)



I agree with both previous answers. I've actually done it in a special case: A print monitor. It's a special case of driver that runs in user mode, and I could write one in Delphi. There was definitely some benefits in using Delphi there.


But the last pitfall that wasn't mentioned yet (I think) is that you need to translate zillions of complex structures and macros from DDK header files. Translating some convoluted macros, in particular, can be very tricky.


0 commentaires:

Enregistrer un commentaire