r2766: Test OpenKey, QueryInfoKey, EnumKey, CloseKey functions.
authorTim Potter <tpot@samba.org>
Fri, 1 Oct 2004 07:37:37 +0000 (07:37 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:31 +0000 (12:59 -0500)
The IDL for EnumValue is wrong - can't figure it out right now.
(This used to be commit 37af942d08da9ba9dcf351853f9064b5d179d5e4)

source4/scripting/swig/torture/winreg.py

index 4f3b592065a0736eb43f8057eef11ecab354d87c..abc9fa2245201de3a526b01cdfa4b4aa8bb214ed 100755 (executable)
 #!/usr/bin/python
 
-import dcerpc
+import sys, dcerpc
 
 def test_OpenHKLM(pipe):
 
     r = {}
     r['unknown'] = {}
-    r['unknown']['unknown0'] = 0x84e0
-    r['unknown']['unknown1'] = 0
+    r['unknown']['unknown0'] = 0x9038
+    r['unknown']['unknown1'] = 0x0000
     r['access_required'] = 0x02000000
 
-    dcerpc.winreg_OpenHKLM(pipe, r)
+    result = dcerpc.winreg_OpenHKLM(pipe, r)
+
+    return result['handle']
+
+def test_QueryInfoKey(pipe, handle):
+
+    r = {}
+    r['handle'] = handle
+    r['class'] = {}
+    r['class']['name'] = None
+
+    return dcerpc.winreg_QueryInfoKey(pipe, r)
+
+def test_CloseKey(pipe, handle):
+
+    r = {}
+    r['handle'] = handle
+
+    dcerpc.winreg_CloseKey(pipe, r)
+
+def test_Enum(pipe, handle, depth = 0):
+
+    if depth > 2:
+        return
+
+    keyinfo = test_QueryInfoKey(pipe, handle)
+
+    # Enumerate keys
+
+    r = {}
+    r['handle'] = handle
+    r['key_name_len'] = 0
+    r['unknown'] = 0x0414
+    r['in_name'] = {}
+    r['in_name']['unknown'] = 0x20a
+    r['in_name']['key_name'] = {}
+    r['in_name']['key_name']['name'] = None
+    r['class'] = {}
+    r['class']['name'] = None
+    r['last_changed_time'] = {}
+    r['last_changed_time']['low'] = 0
+    r['last_changed_time']['high'] = 0
+
+    for i in range(0, keyinfo['num_subkeys']):
+
+        r['enum_index'] = i
+
+        subkey = dcerpc.winreg_EnumKey(pipe, r)
+
+        s = {}
+        s['handle'] = handle
+        s['keyname'] = {}
+        s['keyname']['name'] = subkey['out_name']['name']
+        s['unknown'] = 0
+        s['access_mask'] = 0x02000000
+
+        result = dcerpc.winreg_OpenKey(pipe, s)
+
+        test_Enum(pipe, result['handle'], depth + 1)
+
+        test_CloseKey(pipe, result['handle'])
+
+    # Enumerate values
+
+    return
+
+    r = {}
+    r['handle'] = handle
+    r['name'] = {}
+    r['name']['len'] = 0
+    r['name']['max_len'] = 0
+    r['name']['name'] = {}
+    r['name']['name']['max_len'] = 0
+    r['name']['name']['offset'] = 0
+    r['name']['name']['len'] = 0
+    r['name']['name']['buffer'] = None
+    r['type'] = 0
+    r['value'] = {}
+    r['value']['max_len'] = 0
+    r['value']['offset'] = 0
+    r['value']['len'] = 0
+    r['value']['buffer'] = []
+    r['returned_len'] = 0
+    
+    for i in range(0, keyinfo['num_values']):
+
+        r['enum_index'] = i
+        
+        print dcerpc.winreg_EnumValue(pipe, r)
+
+        sys.exit(1)        
+
+def test_Key(pipe, handle):
+
+    test_Enum(pipe, handle)        
 
 def runtests(binding, domain, username, password):
     
@@ -20,4 +114,7 @@ def runtests(binding, domain, username, password):
             dcerpc.DCERPC_WINREG_UUID, dcerpc.DCERPC_WINREG_VERSION,
             domain, username, password)
 
-    test_OpenHKLM(pipe)
+    handle = test_OpenHKLM(pipe)
+
+    test_Key(pipe, handle)
+