Могу ли я написать драйверы для Windows с Delphi 2010? - PullRequest
16 голосов
/ 15 февраля 2010

Я всегда слышал, что Delphi может делать почти все, что может делать C ++ ... кроме написания драйверов Windows. Это правильно, и если да, то почему?

Я недавно читал в блоге сообщение, которое может указать возможное решение для написания драйверов с Delphi , но ему уже 3 года, и я не знаю, насколько точна эта информация.

Итак, с последней версией Delphi (2010) технически возможно написать драйвер для Windows?

Ответы [ 4 ]

18 голосов
/ 15 февраля 2010

Технически возможно написать некоторые драйверы с Delphi, но что касается ответа general , я бы сказал: вы не можете легко написать драйверы с Delphi .

Во-первых, существует разница между драйвером пользовательского режима (UMDF) драйверами и драйверами режима ядра (KMDF) . Драйверы UMDF должны быть возможны с Delphi. Драйверы KMDF не всегда возможны, потому что

1) компоновщик Delphi не может их создать, и

2) Формат файла объекта Delphi отличается от формата COFF, используемого компоновщиком Microsoft по умолчанию.

3) RTL Delphi предполагает, что он живет в пользовательском режиме и может делать определенные вещи, которые нельзя делать в стране ядра (я думаю, например, как обрабатываются исключения; также другое управление памятью), так что вы Я должен быть очень осторожным в отношении того, какие функции RTL безопасны в использовании. Есть также трудности с модулями System и SysInit (см. Комментарий Ритсаэрта Хорнстра к другому ответу здесь).

Я не говорю, что это не проблемы, которые не могут быть преодолены (см. Пост, на который вы ссылаетесь), если вы действительно преданы делу, но это не будет простым.

Во-вторых, драйверы KMDF (на самом деле я не знаю о UMDF - кто-нибудь может прокомментировать?) Для Win64 должны быть в 64-битном коде. Поскольку в настоящее время нет 64-битного компилятора Delphi, написание их - это определенно нет-нет.

6 голосов
/ 15 февраля 2010

Вы можете написать драйвер Windows на любом языке, который компилируется в DLL в формате PE, который не имеет внешних зависимостей (кроме тех, которые одобрены для загрузки в ядре), может вызывать функции со связью STDCALL и экспортировать функции Связь STDCALL.

Я бы подумал, что нет непроверенных внешних зависимостей. :)

3 голосов
/ 15 ноября 2010

Я нашел несколько ссылок, которые могут вам помочь:

1 голос
/ 18 февраля 2010

Я согласен с обоими предыдущими ответами. Я действительно сделал это в специальном случае: монитор печати. Это особый случай драйвера, который работает в пользовательском режиме, и я мог бы написать его в Delphi. Использование Delphi определенно имело некоторые преимущества.

Но последняя ловушка, которая еще не была упомянута (я думаю), заключается в том, что вам нужно перевести миллионы сложных структур и макросов из заголовочных файлов DDK. В частности, перевод некоторых запутанных макросов может быть очень сложным.

...