Re: _winreg error on open key (64bit) - proper usage of _winreg.DisableReflectionKey

2009-11-18 Thread Brian Curtin
On Tue, Nov 17, 2009 at 19:59, Mark Hammond skippy.hamm...@gmail.comwrote:

 On 18/11/2009 6:29 AM, Randall Walls wrote:

 I don't believe so, but it seems like I'm in a catch 22, where I need to
 _winreg.OpenKey the key first before I can pass it to
 _winreg.DisableReflectionKey, but it doesn't exist, so I can't open it.

 I did find out that I can open the key using:
 hKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,
 rSOFTWARE\ODBC\ODBC.INI\
 DRSQL2000_mu0100\\, 0, _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)

 The 'trick' was adding _winreg.KEY_WOW64_64KEY, which apparently tells
 the system to look in the 64bit key area, and not under the Wow6432Node.
 That brings up problem #2, though... I can't seem to CREATE a key in the
 above path, and _winreg.CreateKey doesn't accept _winreg.KEY_WOW64_64KEY
 (in fact it doesn't accept any options other than key, sub_key).
 _winreg.CreateKey does work, it just puts the key in
 SOFTWARE\Wow6432Node\ODBC\ODBC.INI. So I'm in a quandry... I'd like to
 use one or the other, and not have to account for both.


 It looks like _winreg needs to be enhanced to make the RegCreateKeyEx API
 function available.  It can be called via the win32api module of pywin32, or
 could also be called via ctypes.

 HTH,

 Mark


Created http://bugs.python.org/issue7347 and added a patch which I think
will solve the problem moving forward.
-- 
http://mail.python.org/mailman/listinfo/python-list


_winreg error on open key (64bit) - proper usage of _winreg.DisableReflectionKey

2009-11-17 Thread Randall Walls
Greetings,

I'm writing a python script to automate creating ODBC connections on a
Windows2008 Server (64bit) platform. I created an ODBC manually (using the
GUI), for the purposes of fleshing out the 'check for existing' section of
the script.

Problem: though I can see the key in regedit
(HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DRSQL2000_mu), calling an
_winreg.OpenKey returns 'WindowsError: [Error 2] The system cannot find the
file specified'. Googling the error brought up the possibility that this key
is being impacted by registry redirection (
http://mail.python.org/pipermail/python-win32/2009-February/008862.html),
and thus the need to use _winreg.DisableReflectionKey to correct this.

I'm new to using _winreg (but not new to python), and though it sounds
simple, I can't figure out how to properly use _winreg.DisableReflectionKey
to make the _winreg.OpenKey work properly, and there is nearly 0
documentation on how to use _winreg.DisableReflectionKey (though I would be
happy to write something up if I could figure the damned thing out).

any help is appreciated. Has anyone else run into this before? I realize
that Server 2008 is new and that _winreg.DisableReflectionKey was just
added, but I'm still hoping SOMEBODY has run into this before.

Many thanks,

-- 
Randall Walls
Tyler Technologies, Inc
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: _winreg error on open key (64bit) - proper usage of _winreg.DisableReflectionKey

2009-11-17 Thread Nick Stinemates
From _winreg.c:

Disables registry reflection for 32-bit processes running on a 64-bit 
OperatingSystem. Will generally raise NotImplemented if executed on a 32-bit 
Operating System. If the key is not on the reflection list, the function 
succeeds but has noeffect. Disabling reflection for a key does not affect 
reflection of any subkeys.

Are there any subkeys which you also need to disable? Parent keys?


On Tue, Nov 17, 2009 at 01:51:12PM -0500, Randall Walls wrote:
 Greetings,
 
 I'm writing a python script to automate creating ODBC connections on a
 Windows2008 Server (64bit) platform. I created an ODBC manually (using the
 GUI), for the purposes of fleshing out the 'check for existing' section of
 the script.
 
 Problem: though I can see the key in regedit
 (HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DRSQL2000_mu), calling an
 _winreg.OpenKey returns 'WindowsError: [Error 2] The system cannot find the
 file specified'. Googling the error brought up the possibility that this key
 is being impacted by registry redirection (
 http://mail.python.org/pipermail/python-win32/2009-February/008862.html),
 and thus the need to use _winreg.DisableReflectionKey to correct this.
 
 I'm new to using _winreg (but not new to python), and though it sounds
 simple, I can't figure out how to properly use _winreg.DisableReflectionKey
 to make the _winreg.OpenKey work properly, and there is nearly 0
 documentation on how to use _winreg.DisableReflectionKey (though I would be
 happy to write something up if I could figure the damned thing out).
 
 any help is appreciated. Has anyone else run into this before? I realize
 that Server 2008 is new and that _winreg.DisableReflectionKey was just
 added, but I'm still hoping SOMEBODY has run into this before.
 
 Many thanks,
 
 -- 
 Randall Walls
 Tyler Technologies, Inc

 -- 
 http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: _winreg error on open key (64bit) - proper usage of _winreg.DisableReflectionKey

2009-11-17 Thread Randall Walls
I don't believe so, but it seems like I'm in a catch 22, where I need to
_winreg.OpenKey the key first before I can pass it to
_winreg.DisableReflectionKey, but it doesn't exist, so I can't open it.

I did find out that I can open the key using:
hKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, rSOFTWARE\ODBC\ODBC.INI\
DRSQL2000_mu0100\\, 0, _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)

The 'trick' was adding _winreg.KEY_WOW64_64KEY, which apparently tells the
system to look in the 64bit key area, and not under the Wow6432Node. That
brings up problem #2, though... I can't seem to CREATE a key in the above
path, and _winreg.CreateKey doesn't accept _winreg.KEY_WOW64_64KEY (in fact
it doesn't accept any options other than key, sub_key). _winreg.CreateKey
does work, it just puts the key in SOFTWARE\Wow6432Node\ODBC\ODBC.INI. So
I'm in a quandry... I'd like to use one or the other, and not have to
account for both.

much obliged

On Tue, Nov 17, 2009 at 2:18 PM, Nick Stinemates n...@stinemates.orgwrote:

 From _winreg.c:

 Disables registry reflection for 32-bit processes running on a 64-bit
 OperatingSystem. Will generally raise NotImplemented if executed on a 32-bit
 Operating System. If the key is not on the reflection list, the function
 succeeds but has noeffect. Disabling reflection for a key does not affect
 reflection of any subkeys.

 Are there any subkeys which you also need to disable? Parent keys?


 On Tue, Nov 17, 2009 at 01:51:12PM -0500, Randall Walls wrote:
  Greetings,
 
  I'm writing a python script to automate creating ODBC connections on a
  Windows2008 Server (64bit) platform. I created an ODBC manually (using
 the
  GUI), for the purposes of fleshing out the 'check for existing' section
 of
  the script.
 
  Problem: though I can see the key in regedit
  (HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DRSQL2000_mu), calling an
  _winreg.OpenKey returns 'WindowsError: [Error 2] The system cannot find
 the
  file specified'. Googling the error brought up the possibility that this
 key
  is being impacted by registry redirection (
  http://mail.python.org/pipermail/python-win32/2009-February/008862.html
 ),
  and thus the need to use _winreg.DisableReflectionKey to correct this.
 
  I'm new to using _winreg (but not new to python), and though it sounds
  simple, I can't figure out how to properly use
 _winreg.DisableReflectionKey
  to make the _winreg.OpenKey work properly, and there is nearly 0
  documentation on how to use _winreg.DisableReflectionKey (though I would
 be
  happy to write something up if I could figure the damned thing out).
 
  any help is appreciated. Has anyone else run into this before? I realize
  that Server 2008 is new and that _winreg.DisableReflectionKey was just
  added, but I'm still hoping SOMEBODY has run into this before.
 
  Many thanks,
 
  --
  Randall Walls
  Tyler Technologies, Inc

  --
  http://mail.python.org/mailman/listinfo/python-list




-- 
Randall
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: _winreg error on open key (64bit) - proper usage of _winreg.DisableReflectionKey

2009-11-17 Thread Mark Hammond

On 18/11/2009 6:29 AM, Randall Walls wrote:

I don't believe so, but it seems like I'm in a catch 22, where I need to
_winreg.OpenKey the key first before I can pass it to
_winreg.DisableReflectionKey, but it doesn't exist, so I can't open it.

I did find out that I can open the key using:
hKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, rSOFTWARE\ODBC\ODBC.INI\
DRSQL2000_mu0100\\, 0, _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)

The 'trick' was adding _winreg.KEY_WOW64_64KEY, which apparently tells
the system to look in the 64bit key area, and not under the Wow6432Node.
That brings up problem #2, though... I can't seem to CREATE a key in the
above path, and _winreg.CreateKey doesn't accept _winreg.KEY_WOW64_64KEY
(in fact it doesn't accept any options other than key, sub_key).
_winreg.CreateKey does work, it just puts the key in
SOFTWARE\Wow6432Node\ODBC\ODBC.INI. So I'm in a quandry... I'd like to
use one or the other, and not have to account for both.


It looks like _winreg needs to be enhanced to make the RegCreateKeyEx 
API function available.  It can be called via the win32api module of 
pywin32, or could also be called via ctypes.


HTH,

Mark
--
http://mail.python.org/mailman/listinfo/python-list