The West Indies, missing 10 leading players due to a contracts dispute with the cricket board, upset the hosts with an inspiring bowling and fielding display.
Sri Lanka, set a modest 227-run target on a flat batting pitch after half centuries from captain Shivnarine Chanderpaul [ Images ] (57) and Slyvester Joseph (58), suffered a top order collapse, slumping to 107-6 in the 30th over.
Russel Arnold [ Images ] marshalled a lower order fight-back, scoring 59 from 88 balls, but ran out of partners as Sri Lanka were bowled out for 193 in 47 overs.
Off spinner Omari Banks played well in his first game of the tournament, chipping in with 33 useful runs and then taking 2-24 with the ball from his 10 overs.
Tight and disciplined bowling was backed up with some spectacular catching, including two magnificent diving efforts from Xavier Marshall.
West Indies' surprise victory means that they can now qualify for the final on August 9 if they beat India [ Images ] on Sunday.