Необходимо передавать в приложение сообщения переменного размера... Как это реализовать? При этом не используя всякие там пайпы, LPC, shared memory и т.п., т.е. желательно именно через IOCTL. Пока надумал два метода, оба из них мне кажутся очень убогими: 1. Посылать из пользовательского приложения два IOCTL запроса на каждое сообщение, т.е. сначала что-то вроде IOCTL_GET_MESSAGE_SIZE для того, чтобы получить размер сообщения, а потом IOCTL_GET_MESSAGE. 2. Установить фиксированный размер сообщения и большие сообщения дробить на более мелкие фиксированного размера. 3. Выделять память в пользовательском пространстве через ZwAllocateVirtualMemory. Ну это уже совсем изврат. Оба способа не нравятся. Был бы рад, если кто подсказал вариант получше.
1 IOCTL, если не хватает ресурсов, тогда возвращать статус, что буфер слишком мал. Приложение перевыделяет и вновь запрашивает данные.
1 IOCTL, просто async completion: 1) IoMarkIrpPending(irp); 2) IoCompleteRequest(irp, IO_NO_INCREMENT);