ActivePoll -> Timer, Dpc, Handles FCB -> Polls Involved In ... What poll needs to do: Accumulate: for each fcb If error is set, check error condition on fcb on entry If writable is set, check fcb on entry for zero send content If readable is set, check fcb has nonzero read content If any handle was not valid, complete fail If any of the above checks were true, complete success Otherwise: make an active poll object for each fcb, make a poll entry chain the poll entry to the fcb set summary bits in fcb state for polling (what must be polled) chain the active poll object to the device ext set timer and dpc pending complete select: for each fcb find the poll entry in the fcb and unchain it rescan poll bits for this fcb get irp from poll object, and deallocate poll object complete irp select timeout: Find the poll object in the device ext chain and unchain it complete select with timeout fcb send complete and connect complete: if no more send irps and send bit set in summary find each poll entry with send bit set and complete select with (1) on it fcb recv complete: if fcb has recv data and recv bit set in summary find each poll entry with recv bit set and complete select with (1) on it