2017-01-24 5 views
-3

Недавно я спросил the question, если бы я мог ограничить пропускную способность через приложения C# WinForms, как NetLimiter и NetBalancer. Мне сказали, что есть два способа сделать это. Либо через надлежащее QoS, либо записывая что-то вдоль линий «NDIS Network Filter Driver». Использование QoS - это не то, что я хочу принять. Поэтому я просмотрел некоторые материалы, необходимые для написания драйверов, и нашел интересные моменты. Такие точки, как хорошее понимание C/C++, потому что исполняемый код очень подвержен BSOD, так как он может быть запущен в так называемом «режиме ядра». Я также нашел GitHub «dump», который выглядит интересным и соблазняет меня исследовать и оглядываться.Написание драйверов для Windows

Как вы можете видеть, меня нет рядом с достаточно продвинутым, чтобы вникать в это на профессиональном уровне. Игнорируя это, что было бы хорошим началом для начала моих приключений в написании драйверов для мониторинга - и дальше по линии манипулировать сетью, чтобы ввести дросселирование.

Любая помощь, рекомендации или информация, которые могут быть полезны, всегда приветствуются.

PS: Я не уверен, является ли это (как указано выше в комментарии к моему предыдущему вопросу) слишком широким вопросом, на который нужно ответить на переполнение стека. Если да, то куда мне пойти, чтобы спросить об этом?

+1

Это кажется слишком широким (и вне темы с инструкцией/руководством). Вы можете пойти на более традиционный форум, попытаться найти наставника/наставника или, если бы это был я, начать писать что-то на основе того, что вы уже нашли, и задавать здесь * конкретные вопросы. – BradleyDotNET

+0

Где бы я нашел наставника/наставника для этого, однако, @BradleyDotNET. Есть ли форма, где я могу зарегистрироваться? И я нашел кое-что, о чем я мало понимаю, поэтому я включил его. Хотя было бы лучше, если бы я начал с этого. – Farcrada

+0

У Pluralsight есть программа для наставника/помощи, я уверен, что есть и другие. Совет Вилкса - это путь, который я бы начал, по крайней мере, хотя. – BradleyDotNET

ответ

2

Действительно, это было бы слишком широко. Написание драйверов - сложная вещь, которая требует хорошего понимания того, как работает компьютер и ОС. Кроме того, C# (и сама .NET) действительно недоступна в режиме ядра, поэтому предпочтительнее использовать C/C++. Хотя теоретически любой неуправляемый язык (например, Паскаль) мог бы сделать, я не слышал ни о каком написании драйверов в них. Собственные ресурсы разработчика Microsoft также написаны с учетом C/C++.

Что приводит нас к вопросу , почему вы хотите это сделать.

Если вам это нужно для работы и есть крайний срок, забудьте об этом. Возьмите кого-нибудь, кто уже знает этот материал. Или там может быть библиотека, которая заполняет эту потребность. Любой из этих вариантов будет дешевле, чем ваше время, потраченное на изучение всего этого.

Если это для вашего собственного любопытства, однако - пойдите для этого! Я бы посоветовал, сначала изучив C. Не C++, это сложнее, и для драйверов с C все равно будет проще. Но вы также можете забрать C++ позже, это хороший материал. C++ - это в основном, совместимый с C, поэтому вы можете начать с C, а затем продолжить с C++.

Параллельно, получите хорошую книгу о дизайне ОС. Не потому, что вы хотите создать ОС, а для понимания основных концепций, на которых он построен. Вы должны хорошо понимать такие вещи, как режим ядра/пользовательский режим, виртуальная память, прерывания, планирование процесса и т. Д.

Изучение некоторой сборки может быть полезно также (хотя и не обязательно).

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

А также ... читать this.