@@ -940,4 +940,106 @@ void test_http_server_api(HANDLE hRequestQueue) {
940940 sink (certInfo.pCertEncoded );
941941 sink (*certInfo.pCertEncoded ); // $ ir
942942 }
943+ }
944+
945+ using HKEY = void *;
946+ using BYTE = unsigned char ;
947+ using LPBYTE = BYTE *;
948+ using PLONG = LONG *;
949+
950+ typedef struct value_entA {
951+ LPSTR ve_valuename;
952+ DWORD ve_valuelen;
953+ DWORD_PTR ve_valueptr;
954+ DWORD ve_type;
955+ } VALENTA , *PVALENTA ;
956+
957+ typedef struct value_entW {
958+ LPWSTR ve_valuename;
959+ DWORD ve_valuelen;
960+ DWORD_PTR ve_valueptr;
961+ DWORD ve_type;
962+ } VALENTW , *PVALENTW ;
963+
964+ LONG RegQueryValueA (HKEY hKey, LPCSTR lpSubKey, LPSTR lpData, PLONG lpcbData);
965+ LONG RegQueryValueW (HKEY hKey, LPCWSTR lpSubKey, LPWSTR lpData, PLONG lpcbData);
966+
967+ LONG RegQueryValueExA (
968+ HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData,
969+ LPDWORD lpcbData
970+ );
971+
972+ LONG RegQueryValueExW (
973+ HKEY hKey, LPCWSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData,
974+ LPDWORD lpcbData
975+ );
976+
977+ LONG RegGetValueA (
978+ HKEY hKey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD flags, LPDWORD lpType, PVOID lpData,
979+ LPDWORD lpcbData
980+ );
981+
982+ LONG RegQueryMultipleValuesA (
983+ HKEY hKey, PVALENTA valList, DWORD numVals, LPSTR valueBuffer, LPDWORD totalSize
984+ );
985+
986+ LONG RegQueryMultipleValuesW (
987+ HKEY hKey, PVALENTW valList, DWORD numVals, LPWSTR valueBuffer, LPDWORD totalSize
988+ );
989+
990+ void test_registry_queries (HKEY hKey) {
991+ {
992+ char data[256 ];
993+ LONG dataSize = sizeof (data);
994+ RegQueryValueA (hKey, " value" , data, &dataSize);
995+ sink (data); // clean
996+ sink (*data); // $ ir
997+ }
998+ {
999+ wchar_t data[256 ];
1000+ LONG dataSize = sizeof (data);
1001+ RegQueryValueW (hKey, L" value" , data, &dataSize);
1002+ sink (data); // clean
1003+ sink (*data); // $ ir
1004+ }
1005+ {
1006+ BYTE data[256 ];
1007+ DWORD dataSize = sizeof (data);
1008+ DWORD type;
1009+ RegQueryValueExA (hKey, " value" , nullptr , &type, data, &dataSize);
1010+ sink (data); // clean
1011+ sink (*data); // $ ir
1012+ }
1013+ {
1014+ BYTE data[256 ];
1015+ DWORD dataSize = sizeof (data);
1016+ DWORD type;
1017+ RegQueryValueExW (hKey, L" value" , nullptr , &type, data, &dataSize);
1018+ sink (data); // clean
1019+ sink (*data); // $ ir
1020+ }
1021+ {
1022+ VALENTA values[1 ];
1023+ char data[256 ];
1024+ DWORD dataSize = sizeof (data);
1025+ RegQueryMultipleValuesA (hKey, values, 1 , data, &dataSize);
1026+ sink (data); // clean
1027+ sink (*data); // $ ir
1028+ }
1029+ {
1030+ VALENTW values[1 ];
1031+ wchar_t data[256 ];
1032+ DWORD dataSize = sizeof (data);
1033+ RegQueryMultipleValuesW (hKey, values, 1 , data, &dataSize);
1034+ sink (data); // clean
1035+ sink (*data); // $ ir
1036+ }
1037+ {
1038+ BYTE data[256 ];
1039+ DWORD dataSize = sizeof (data);
1040+ DWORD type;
1041+ RegGetValueA (hKey, " subkey" , " value" , 0 , &type, data, &dataSize);
1042+ sink (data); // clean
1043+ sink (*data); // $ ir
1044+ }
9431045}
0 commit comments