Интерфейс с драйвером устройства из управляемого кода - нет P / Invoke? - PullRequest
1 голос
/ 21 февраля 2012

Я начинаю погружаться в разработку драйверов для Windows 7.Одна вещь, которая не ясна, - то, как программа управляемого кода может получить доступ к информации от драйвера (общение, например, с цифровой картой ввода / вывода).

Например, драйвер (режим ядра или пользовательский режим)) будет управлять доступом к регистрам на карте PCI / PCIe, но чтение / запись данных регистра должны быть доступны программисту, пишущему управляемый код (C #, VB.NET) через класс .NET.

Iне хочу прибегать к P / Invoke, как в вызовах Win32API.

Если это вопрос совместного использования памяти (IOCTL), я использую промежуточную управляемую DLL для «скрытия» P / Invoke илиЕсть ли что-то простое, что мне не хватает?

Спасибо!

1 Ответ

1 голос
/ 21 февраля 2012

Если вы хотите погрузиться в разработку драйверов для Windows 7, вообще не используйте управляемый код. Но если вы имеете в виду, что хотите вызвать функциональность определенных драйверов, вы можете использовать различные методы, и P / Invoke, вероятно, самый простой из них.

Причина проста: драйверы устройств по своей природе неуправляемые, поэтому вам необходимо использовать такую ​​технику, как P / Invoke. Вот пример , как вы можете вызывать драйверы устройств . А вот как разговаривать с USB-устройством .

Я понимаю ваше негодование против P / Invoke. Но каким-то образом вам нужно будет преодолеть разрыв между управляемым и неуправляемым. Вы можете сделать все это вручную (используя свои собственные маршалеры и все остальное), но я бы посоветовал вам прибегать к этому, только если обычный P / Invoke не подходит для этой работы. Конечно, вы всегда можете скрыть сложности, создав тонкий набор классов, который делает мрачные детали интерфейса, а затем вы можете свободно вызывать эту самодельную библиотеку из управляемого кода.

...