Virtualization exists to allow incompatible applications to run correctly
inside of Windows Vista. If your application is running into virtualization,
its behavior needs to be modified.
Each user account in Vista is seperated from one another. One user account
cannot create or modify files or registry keys that can affect another
account. However, you should have read access to most system configuration
information (HKLM, Program Files [your application has no write-access to
this folder], Windows, etc).
The result is that your application can only write to folders that have been
set aside for the user account your program is running under - such as the
user's profile directory, HKCU, and a few other storage locations set aside
for program usage.
If your application is not an administrative program, it should be modified
to work under this environment.
Otherwise, if your application is an administrative application that needs
write-access to system configuration data (HKLM, Program Files, etc) or other
user's files, it should be manifested as requiring administrator or needing
the full rights of the user who is logged in.
Manifesting your application in this way will cause Windows to prompt the
user for permission to use administrator powers everytime that it starts.
If your entire app doesn't need admin permissions, only certain parts, you
should seperate those "needing-admin" chunks of your app into secondary apps
or COM components, and only manifest those apps as needing admin - this way,
your program can be run in non-administrative mode and will only ask for
admin rights when it actually needs them.
This document goes into much more detail