Это касается некоторых уже отвеченных вопросов, так что не стесняйтесь дублировать, но есть вероятность, что я их уже прочитал и не удовлетворен.
В моей системе 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.
Хорошо, там много вопросов, надеюсь, это не будет помечено как слишком широкое.
Задача ещё не решена.