For key range locking SQL Server must use an index to satisfy the range condition so regarding your last query you would need an index on col3
(and possibly query hints to force its use if the plan does not use it)
Also it does not just lock the specific range in your WHERE
clause. It locks keys. A range lock on a key protects the range from that key downwards to the next key so the exact range that will be blocked depends upon what keys exist in the index.
More details/links are in my answer here