[python-win32] Python and Win 7 Registry VirtualStore

John Spitzer johned9999 at comcast.net
Sat Jun 8 19:33:40 CEST 2013


Hello team.

I've done some more testing on this I'm really hoping there is an answer 
to what I'm trying to do. Maybe there is something I'm overlooking or 
don't understand about the registry and permissions on Windows 7 and how 
the _winreg library works.

As shown below, I'm trying to retrieve a value from a registry key. The 
app that is writing the key appears to be coded so that Windows writes 
the key to the VirtualStore area of the registry. Everything I've read 
so far says application programs, if the permissions and access is coded 
correctly, should not access the VS keys directly.

As a test, I put the following two lines in my program:
-----
#        ConnKey = OpenKey(HKEY_LOCAL_MACHINE, r'SOFTWARE\Interface 
Software\ConnMgr', 0, KEY_READ)
         ConnKey = OpenKey(HKEY_CURRENT_USER, 
r'Software\Classes\VirtualStore\MACHINE\SOFTWARE\Interface 
Software\ConnMgr', 0, KEY_READ)
         ConnValue = QueryValueEx(ConnKey, "DB Path")
-----
When I execute the program with the line that access the HKCU key, the 
program retrieves the key as expected. As shown, it is accessing the key 
explicitly from the virtual store. This shows the key is where I expect 
it and I can access it.

To test the access of the key in HKLM, I manually created the 
appropriate key value in HKLM. This is where the application stored the 
key on Windows XP. I also ran this program both as an administrator and 
standard user. With KEY_READ access, I can read the key. With 
KEY_ALL_ACCESS I get the error: [Error 5] Access is denied.

How do I code this so that the access is directed to the Virtual Store, 
or am I not understanding how this is suppose to work (very possible). I 
am certain that I'm not the first to encounter this behavior.

Thanks for your help,
John

On 06/03/2013 9:51 PM, John Spitzer wrote:
>
> Hello,
>
> I've searched the python sites and help, library's and all the forums 
> I could find, but haven't seen any mention of this. This help line 
> seemed like a good place to ask this.
>
> I am on an HP laptop Intel Core 2 Duo, running Windows 7 Pro SP1 
> 32Bit. I am using Python 2.7.3.
>
> I have an application I built that ran fine on Windows XP, but now 
> fails on Windows 7. The place I'm encountering the problem is where I 
> try to read a key from the registry. I believe it's because of the 
> Virtualization of the registry on Windows 7. This key is created by 
> another app that I'm trying to co-ordinate with. On Windows XP the 
> Registry key was:
>
> [HKEY_LOCAL_MACHINE\SOFTWARE\Interface Software\ConnMgr]
> "DB Path"="C:\\Documents and Settings\\All Users\\Application 
> Data\\<path to a data file>"
>
> When this app is installed on Windows 7, the key is directed to the 
> registry Virtual Store at:
> [HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Interface 
> Software\ConnMgr]
> "DB Path"="C:\\ProgramData\\EnvisionWare\\<path to a data file>"
>
> So far that is what I think I'd expected on Windows 7 and the 
> virtualization of the registry.
>
> The code fragment that is reading the registry is:
> -----
> from _winreg import *
>
>
>         ConnKey = OpenKey(HKEY_LOCAL_MACHINE, r'SOFTWARE\Interface 
> Software\ConnMgr', 0, KEY_READ)
>         ConnValue = QueryValueEx(ConnKey, "DB Path")
>         EWDataSource = os.path.split(str(ConnValue[0]))
> ------
> The OpenKey fails with the message: WindowsError: (2, 'The system 
> cannot find the file specified"). I believe this is because the key 
> does not exist at the path [HKEY_LOCAL_MACHINE\SOFTWARE\Interface 
> Software\ConnMgr].
>
> After all this, the question is: Why isn't the OpenKey call being 
> redirected to the VirtualStore? What can I change in the program, ACLs 
> or other to make it be redirected?
>
> Any help would be appreciated.
> Thanks,
> John
>

-- 
John Spitzer
johned9999 at comcast.net
503-590-7434



More information about the python-win32 mailing list