Искал сабж через поисковик, ничего ненашел При перехвате траффика программы столкнулся с проблемой "нехватки траффика". Тоесть я знаю что данные программа приняла, а их неувидел. Поковырявшись немного, понял что сокеты соединенные через AcceptEx обрабатываются по схеме доселе мной невиданной: Вызывается WSARecv, завершается с ошибкой WSA_IO_PENDING, далее вызывается WPUCompleteOverlappedRequest(он в свою очередь GetQueuedCompletionStatus...) Обычно после удачного завершения GetQueuedCompletionStatus вызывался ReadFile(вызов которого перехватывался) и данные у тебя в руках, но вот в данном случае не катит Через ReadFile идут только сокеты соединенные не через AcceptEx. Ну и собсно вопрос, как и откуда(буффер) программа может забирать данные в таком случае ? WSABUF, передаваемый в WSARecv неактулен ибо мембер lpBuffers->buf после завершения функции равен нулю в описанном случае. Дабы исключить лишние вопросы и ответы: У меня контролируется вызов всех функций в ws2_32.dll и ReadFileEx, ReadFile, GetQueuedCompletionStatus, CreateIoCompletionPort в kernel.dll .
Проблема решена. Помог сам майкрософт... The array of WSABUF structures pointed to by the lpBuffers parameter is transient. If this operation completes in an overlapped manner, it is the service provider's responsibility to capture these WSABUF structures before returning from this call. This enables applications to build stack-based WSABUF arrays.