Можно ли взаимодействовать с / использовать сторонний драйвер Windows?

Это касается некоторых уже отвеченных вопросов, так что не стесняйтесь дублировать, но есть вероятность, что я их уже прочитал и не удовлетворен.

В моей системе 2 драйвера (расположены в C: \ Windows \ System32 \ drivers), которые называются pefndis.sys а также wfpcapture.sys, Я уверен на 100% pefndis.sys является драйвером ядра и уверен на 99,9% wfpcature.sys как хорошо. Это сторонние драйверы, установленные анализатором сообщений Mircosoft. я обнаружил pefndis.sys используется для сбора данных на проводе и wfpcapture.sys используется для захвата данных выше сетевого уровня (т. е. для захвата петлевого трафика). У меня нет документации, заголовочных файлов и т. Д. Для этих драйверов, так как у Microsoft не было намерения использовать эти драйверы для пользовательских решений, как я хотел бы. Так получилось, что я определил wfpcapture.sys как выполнение точных задач, которые я хочу, и я хотел бы использовать то, что он может сделать; это кажется гораздо более разумным, чем тратить время и усилия на реализацию моего собственного драйвера. Однако мои усилия провалились.

Вот что я сделал: у меня есть простой код на C ++:

void Provider::InitDriver()
{
HANDLE wfpHandle = NULL;
DWORD lastError = 0;

LPCTSTR wfpName = L"\\\\.\\wfpcapture";
LPCTSTR pefName = L"\\\\.\\pefndis";

wfpHandle = CreateFile(
wfpName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

lastError = GetLastError();

CloseHandle(wfpHandle);
}

Когда я бегу CreateFile с wfpNameЯ получаю неверный дескриптор и lastError==2 это означает, что файл не может быть найден. Когда я бегу CreateFile с pefNameЯ получаю правильную ручку и lastError==0, При дальнейшем расследовании большинство моих случайно выбранных .sys файлы из drivers Папка выдает недействительные дескрипторы с кодами ошибок 2. Иногда я получаю код ошибки 5 (Доступ запрещен, что также кажется странным, так как я запускаю все как администратор). У кого-нибудь есть объяснение, почему я не могу понять wfpcapture.sys? Я воспитал pefndis.sys драйвер, потому что он был установлен той же программой, что и wfpcapture.sys, и я могу четко понять, что все мои строки отформатированы правильно, и оба файла находятся в одном каталоге. Я наткнулся эта почта вчера сказал мне IoCreateSymbolicLink может использоваться в коде драйвера, чтобы дать драйверу другой псевдоним. Если я использую неправильный псевдоним, это объясняет, почему так много .sys файлы возвращают ошибки FILE_NOT_FOUND, когда я пытаюсь их обработать?

Я попытался провести еще какое-то исследование файла, используя IL DASM (не повезло, это нативный код), DUMPBIN, WinObj, и DependencyWalker.

DUMPBIN /EXPORTS [...]wfpcapture.sys не возвращает экспорт. Я нахожу это чрезвычайно странным. Эти ответы предположить .DLL без экспорта просто ресурсы или код запутан. Я почти уверен wfpcapture.sys не просто содержит ресурсы. Является ли запутывание самым разумным объяснением … есть ли другие идеи, почему у него нет экспорта?

Я не мог найти wfpcapture в WinObj где угодно. Я нашел pefndis в Device\, Где wfpcapture? Это на самом деле не говорит с устройством, так что это имеет смысл, но это все-таки драйвер, правильно? Нужно ли каким-либо образом регистрироваться в Windows CreateFile можете их найти?

Я думаю, что DependencyWalker проверил то, что сказал мне ДАМПБИН .. без экспорта. Я понятия не имею, как Message Analyzer (или что-то еще в его стеке зависимостей) на самом деле говорит с ним.

Еще немного фона для полной картины … wfpcapture.sys является провайдером ETW, который подключается к архитектуре WFP корпорации Майкрософт (используется для приложений брандмауэра и IDS), чтобы прослушивать пакеты над сетевым уровнем. Я хочу код, который «активирует» wfpcapture.sys а затем бездействует и собирает события (захват пакетов), которые wfpcapture издает. Это та часть активации, которую я не могу понять. Если я настрою Message Analyzer, чтобы начать захват трафика локального хоста, то включу часть моего кода, которая фиксирует события (используя StartTrace(...) а также EnableTraceEx2(...)), это работает просто отлично. Я просто хочу знать, как происходит анализ сообщений wfpcapture.sys и что он говорит, чтобы заставить его сотрудничать и начать публиковать события. Еще один забавный факт: когда я запускаю трассировку в Message Analyzer и делаю sc query wfpcapture, он говорит мне, что служба (здесь она определяется как драйвер ядра) работает. Когда я останавливаю трассировку, запрос говорит мне, что служба остановлена. Если я вручную sc start wfpcapture и убедитесь, что служба работает, а затем запустите мой код захвата событий, я ничего не получаю. Это говорит мне анализатор сообщений должен отправлять что-то wfpcapture.sys чтобы активировать его и публиковать. Мой план, который породил все это, состоял в том, чтобы получить ручку водителю и начать посылать ему управляющие коды через DeviceIoControl чтобы получить некоторые знания о том, как это работает. Я также видел очень убедительные доказательства того, что Message Analyzer передает маски фильтров драйверу.

Я полностью теряю время здесь? Этот драйвер не предназначен для моего потребления, и тыкать и подталкивать его, чтобы узнать об этом, может быть далеко, но я уверен, что он делает именно так что мне нужно, и я никогда не писал водителя в моей жизни; пытаться сделать это кажется глупым, когда это сидит прямо здесь. Анализатор сообщений бесплатный, я не пытаюсь украсть программное обеспечение. Может ли быть какой-то DRM, связанный с драйвером, который блокирует меня? Я хотел бы услышать мысли любого, кто имеет опыт работы с драйверами Windows.

Хорошо, там много вопросов, надеюсь, это не будет помечено как слишком широкое.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]