Могу ли я написать драйверы для Windows с Delphi 2010?

Вот элегантная, общая реализация в Scala, как описано в 99 Scala Problems .

object P26 {
  def flatMapSublists[A,B](ls: List[A])(f: (List[A]) => List[B]): List[B] = 
    ls match {
      case Nil => Nil
      case sublist@(_ :: tail) => f(sublist) ::: flatMapSublists(tail)(f)
    }

  def combinations[A](n: Int, ls: List[A]): List[List[A]] =
    if (n == 0) List(Nil)
    else flatMapSublists(ls) { sl =>
      combinations(n - 1, sl.tail) map {sl.head :: _}
    }
}

16
задан Mick 15 February 2010 в 00:33
поделиться

3 ответа

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

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

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

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

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

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

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

19
ответ дан 30 November 2019 в 12:43
поделиться

Состояние сеанса. Не стоит использовать его, когда это неуместно. Но больше ничего не работает на полномочия. Просто убедитесь, что они сериализуемы, так что вы можете вытолкнуть сеанс из процесса, когда вам нужно.

-121--2634520-

Получите бета-версию или RC и посмотрите, что изменилось в 4.0.

Протестируйте используемые в настоящее время инструменты на совместимость: знайте, как хорошо они работают, когда ожидается, что они будут на 100% и т.д.

Будучи умными на них уже тогда, когда придет время предложить работу с новой структурой, вы сможете убедить руководство в том, что вы в состоянии воспользоваться преимуществами новых функций.

-121--3941970-

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

Неутвержденные внешние зависимости будут трудной частью, которую я думаю.:)

6
ответ дан 30 November 2019 в 12:43
поделиться

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

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

1
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: