NOTE: Performance Communication driver with single process
Description idea about perfom communication driver. Dispatching 3 routines:
- IRP_MJ_CREATE
- IRP_MJ_READ
- IRP_MJ_WRITE
Dispatcher IRP_MJ_CREATE
Как косвенный признак начало работы с драйвером для передачи данных. В этом месте можно размести логику запросов на получения данных к нежестоящему драйверу. Основная задача, сформированть Н запросов и отослать нижестоящему драйверу. При завершении запроса положить в список завершенных, если не было запросов от IRP_MJ_READ, если они были то взять первый запрос и скопировать в него тело и установить запрос как завершенный
Dispatcher IRP_MJ_READ
Проверить список завершенных запросов, если не пуст, скопировать тело и установить что запрос завершен, в противном случае, отложить запрос(Mark) не устонавливая Complete.
Сложен в реализации.
Dispatcher IRP_MJ_WRITE
Формируем запрос на отправку данных, копируем из пришедшего запроса "тело". Устанавливаем пришедший запрос как завершонный. А новый запрос отправляем.
Побочный эфект может: Если отправка не удалась, то участник который отослал не узнает об этом. Так что нужно будет ему сообщить либым другим способом.