RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
   RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

basically open mysite.com than the redirect me on www.mysite.com. this really is ok. but when i open mysite.com/admin than the redirect me on www.mysite.com rather than www.mysite.com/admin

how do i repair it?

RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

Should have the desired effect. Make use of the parentheses () to complement a pattern a $1 backreference to restore it in to the new URL.

Edit, considering it, similarly you can just alter the ^ character (the match on clause) to some . inside your original pattern that ought to do just like above.

RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
RewriteRule . http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]