Praesenti veritate - момент истины (латинский). Кстати вопрос - какой язык из современных ближе к латинскому?
Все что связано с сокетами и TCP ищем в примерах WinDDK7
Итак - наша идея в драйвер засунуть слушающий tcp поток.
Ищем глобально по всем файлам C:\WinDDK\7600.16385.1\
У сервера и у клиента должно быть что-то типа:
WSAStartup(...
У сервера должно быть :
socket(...
bind(...
listen(...
Ws2_32.lib
Результаты не очень обнадеживающие:
Сервер TCP похоже представлено только в C:\WinDDK\7600.16385.1\src\general\echo\umdfSocketEcho\Exe и это обычное консольное приложение, значит нам не подходит.
Ищем далее (ищем только в драйверах, обычные приложения не рассматриваем):
CreateThread(...
Тут что-то насчет сервиса C:\WinDDK\7600.16385.1\src\wpd\WpdServiceSampleDriver
находим Ура ! C:\WinDDK\7600.16385.1\src\general\echo\umdf - тут есть пример потока реализованного в драйвере.
Драйвер всегда реализует какие-то стандартные интерфейсы, всегда можно увидеть что-то типа :
class CMyDevice :
public CUnknown,
public IPnpCallbackSelfManagedIo
Внимание привлекают IPnp..., например IPnpCallbackSelfManagedIo .
Ищем class CMyDevice :
там встречаются:
IPnpCallbackHardware
IImpersonateCallback
IPnpCallback
IUsbTargetPipeContinuousReaderCallbackReadersFailed
IUsbTargetPipeContinuousReaderCallbackReadComplete
IFileCallbackCleanup
IObjectCleanup
IPnpCallbackRemoteInterfaceNotification
IPnpCallbackSelfManagedIo
HANDLE WINAPI CreateThread(
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINE lpStartAddress,
_In_opt_ LPVOID lpParameter,
_In_ DWORD dwCreationFlags,
_Out_opt_ LPDWORD lpThreadId
);