Registry API and Functionality Test (Compact 7)
3/12/2014
The Registry Build Verification Test uncovers common API and functionality problems with the registry and the file system.
The test suite covers the following registry methods:
* RegCreateKeyEx
* RegDeleteKey
* RegEnumKeyEx
* RegEnumVal
* RegOpenKeyEx
* RegSetValueEx
* RegDeleteValue
* RegQueryInfoKey
* RegQueryValueEx
You may want to run this test each time you make a custom build, to uncover any registry-related issues caused by regressions.
Test Prerequisites
Your device must meet the following requirements before you run this test.
There are no hardware requirements for the Registry API and Functionality Test.
The following table shows the software requirements for the Registry API and Functionality Test.
Requirement | Description |
---|---|
Tux.exe |
Test harness, required for executing the test. |
Kato.dll |
Logging engine, required for logging test data. |
Regtst.dll |
Test library. |
NoteThere must be at least 10 megabytes (MB) of free space in the root directory of the target device. If there is not sufficient space in the root directory of the target device, the test cannot run properly.
Subtests
The table below lists the subtests included in this test.
SubTest ID | Description |
---|---|
1001 |
Tests RegCreateKeyEx API. Tests creating keys and sub-keys to the depth limit (16 levels). Tests boundary conditions (tries to exceed the depth limit). |
1002 |
Tests the RegCreateKeyEx API. Tests creating keys with various naming schemes (different length, contents, and path). |
1003 |
Tests the RegCreateKeyEx API with invalid parameters. The function call should not succeed. |
1004 |
Stress tests the RegCreateKeyEx API. Creates and deletes 2000 keys on the following registry roots: * HKEY_LOCAL_MACHINE * HKEY_CURRENT_USER * HKEY_CLASSES_ROOT * HKEY_USERS |
2001 |
Tests the RegDeleteKey API. Creates and deletes various registry trees. |
2002 |
Tests the RegDeleteKey API. Tests deleting various subkeys (valid and invalid schemes). Tries to delete a registry root, non-existent key, etc. |
2003 |
Tests the RegDeleteKey API with invalid parameters. The function call should not succeed. |
2004 |
Miscellaneous tests for the RegDeleteKey API. |
2005 |
Test to verify deleting invalid subkey that is open. |
3001 |
Tests the RegEnumKeyEx API. Create 30 keys and enumerates through all created keys. |
3002 |
Tests the RegEnumKeyEx API. Tests enumerating the registry roots and enumerating using invalid handles. |
3003 |
Test RegEnumKeyEx API. Test enumerating registry keys, varying the index parameter. |
3004 |
Test RegEnumKeyEx API. Tests various naming schemes for keys, classes and sizes (valid and invalid schemes). Some tests will generate exceptions in the file system level (this is expected). |
3005 |
Miscellaneous tests for the RegEnumKeyEx API, such as out of range index, non existent subkeys, etc. |
4001 |
Tests the RegEnumValue API. Tests enumerating values on the roots, regular keys and invalid keys. |
4002 |
Tests the RegEnumValue API. Tests enumerating values with various indexes. Tests enumerating a large amount of values (4096) on each registry root. "Note": On some hive-based systems with a small amount of memory, this test case might fail the first time it runs. The system needs to grow the system and user hive registry files dynamically. On a limited memory environment, the system might not grow it fast enough. When this happens, you could either try to re-run the test case or increase the default system and user hive file sizes. |
4003 |
Tests the RegEnumValue API with invalid parameters. The function call should not succeed. |
4004 |
Tests the RegEnumValue API with various registry types (string, DWORD, binary, etc.) |
4005 |
Tests the RegEnumValue API with various buffer byte counts. |
5001 |
Tests the RegOpenKeyEx API. Create registry keys and tests opening them (valid and invalid cases). |
5002 |
Tests the RegOpenKeyEx API with various parameters (valid and invalid schemes). |
6001 |
Tests the RegQueryInfoKey API with various class lengths. |
6002 |
Tests the RegQueryInfoKey API on various sub-keys. |
6003 |
Tests boundary conditions (size) of the RegQueryInfoKey API. |
6004 |
Tests the RegQueryInfoKey API with various value names and sizes. |
6005 |
Retrieves registry key information and verifies it. |
6006 |
verifies the error handling functionality of the CeRegGetInfo API. |
7001 |
Tests the RegSetValueEx API with various registry types, naming schemes, and different lengths. |
7002 |
Tests the RegSetValueEx API. Tests case-insensitivity, various value types/names. |
7003 |
Tests the RegSetValueEx API. Tests setting, getting, and deleting a large number of registry values (4096). |
7004 |
Tests the RegSetValueEx API with non-null terminated strings, multi-strings, and unaligned multi-strings |
7005 |
Tests the RegSetValueEx API with invalid parameters. The function call should not succeed. |
8001 |
Tests the RegDeleteValue API. Tests basic registry-delete functionality. |
8002 |
Tests the RegDeleteValue API with various naming schemes. |
8003 |
Stress tests the RegDeleteValue API. Tests deleting many registry values. This test case will print out the memory information before and after the process. You can find out if there is any indication of memory leaks in the system by inspecting the logs on this test case. |
8004 |
Tests the RegDeleteValue API with invalid parameters. The function call should not succeed. |
9001 |
Tests the RegQueryValueEx API with valid and invalid key handles. |
9002 |
Tests the RegQueryValueEx API on a non-existent value, NULL value, empty value, and non-null terminated value. |
9003 |
Tests the RegQueryValueEx API on various registry types (string, DWORD, binary, etc.) |
9004 |
Tests the RegQueryValueEx API with buffers with various count bytes. Tests a buffer overflow situation. |
Setting Up the Test
This test has no additional requirements, beyond the standard test environment setup.
Running the Test
COMMAND LINE PARAMETERS
The Registry Build Verification Test executes the tux -o -d regtst command line on default execution.
The following table shows the optional command line parameters for the Registry API and Functionality Test.
Command Line Parameter | Description |
---|---|
-volatile |
Runs test in volatile mode. Test cases 4002 and 7003 should not be run using this flag due to volatile registry space limitations. |
Verifying the Test
When the test completes running, verify that "PASS" appears in the test log for all sub-tests.
Troubleshooting the Test
On some hive-based systems with a small amount of memory, test case 4002 might fail the first time it runs. The system needs to grow the system and user hive registry files dynamically. On a limited memory environment, the system might not grow it fast enough. When this happens, you could either try to re-run the test case or increase the default system and user hive file sizes.
For additional platform specific issues, consult the CTK articles on the TechNet wiki.