Reactos

[DRIVERS] Fix misusages of the RTL_REGISTRY_OPTIONAL flag.

See https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-rtlqueryregistryvalues

The RTL_REGISTRY_OPTIONAL applies to the first parameter of the
RtlQueryRegistryValues() function, not to the Flags member of the
table entries. However, a RTL_QUERY_REGISTRY_REQUIRED flag exists
to mark values whose existence is NOT optional.

Problematic usage was introduced in the following modules:
drivers/input/i8042prt: Commit e7e959fb0 (r30000)
drivers/input/kbdclass: Commit 5a77f871d (r18911)
drivers/input/mouclass: Commit aeeab7d1f (r18906)
drivers/input/sermouse: Commit 3f348259c (r19100)
rosapps/drivers/green : Commit c8a90f769 (r21165)

+30 -30
+16 -16
drivers/input/i8042prt/registry.c
··· 55 55 Parameters[0].Flags = RTL_QUERY_REGISTRY_SUBKEY; 56 56 Parameters[0].Name = L"Parameters"; 57 57 58 - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 58 + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; 59 59 Parameters[1].Name = L"KeyboardDataQueueSize"; 60 60 Parameters[1].EntryContext = &Settings->KeyboardDataQueueSize; 61 61 Parameters[1].DefaultType = REG_DWORD; 62 62 Parameters[1].DefaultData = &DefaultKeyboardDataQueueSize; 63 63 Parameters[1].DefaultLength = sizeof(ULONG); 64 64 65 - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 65 + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; 66 66 Parameters[2].Name = L"KeyboardDeviceBaseName"; 67 67 Parameters[2].EntryContext = &Settings->KeyboardDeviceBaseName; 68 68 Parameters[2].DefaultType = REG_SZ; 69 69 Parameters[2].DefaultData = (PVOID)DefaultKeyboardDeviceBaseName; 70 70 Parameters[2].DefaultLength = 0; 71 71 72 - Parameters[3].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 72 + Parameters[3].Flags = RTL_QUERY_REGISTRY_DIRECT; 73 73 Parameters[3].Name = L"MouseDataQueueSize"; 74 74 Parameters[3].EntryContext = &Settings->MouseDataQueueSize; 75 75 Parameters[3].DefaultType = REG_DWORD; 76 76 Parameters[3].DefaultData = &DefaultMouseDataQueueSize; 77 77 Parameters[3].DefaultLength = sizeof(ULONG); 78 78 79 - Parameters[4].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 79 + Parameters[4].Flags = RTL_QUERY_REGISTRY_DIRECT; 80 80 Parameters[4].Name = L"MouseResolution"; 81 81 Parameters[4].EntryContext = &Settings->MouseResolution; 82 82 Parameters[4].DefaultType = REG_DWORD; 83 83 Parameters[4].DefaultData = &DefaultMouseResolution; 84 84 Parameters[4].DefaultLength = sizeof(ULONG); 85 85 86 - Parameters[5].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 86 + Parameters[5].Flags = RTL_QUERY_REGISTRY_DIRECT; 87 87 Parameters[5].Name = L"MouseSynchIn100ns"; 88 88 Parameters[5].EntryContext = &Settings->MouseSynchIn100ns; 89 89 Parameters[5].DefaultType = REG_DWORD; 90 90 Parameters[5].DefaultData = &DefaultMouseSynchIn100ns; 91 91 Parameters[5].DefaultLength = sizeof(ULONG); 92 92 93 - Parameters[6].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 93 + Parameters[6].Flags = RTL_QUERY_REGISTRY_DIRECT; 94 94 Parameters[6].Name = L"NumberOfButtons"; 95 95 Parameters[6].EntryContext = &Settings->NumberOfButtons; 96 96 Parameters[6].DefaultType = REG_DWORD; 97 97 Parameters[6].DefaultData = &DefaultNumberOfButtons; 98 98 Parameters[6].DefaultLength = sizeof(ULONG); 99 99 100 - Parameters[7].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 100 + Parameters[7].Flags = RTL_QUERY_REGISTRY_DIRECT; 101 101 Parameters[7].Name = L"PointerDeviceBaseName"; 102 102 Parameters[7].EntryContext = &Settings->PointerDeviceBaseName; 103 103 Parameters[7].DefaultType = REG_SZ; 104 104 Parameters[7].DefaultData = (PVOID)DefaultPointerDeviceBaseName; 105 105 Parameters[7].DefaultLength = 0; 106 106 107 - Parameters[8].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 107 + Parameters[8].Flags = RTL_QUERY_REGISTRY_DIRECT; 108 108 Parameters[8].Name = L"PollStatusIterations"; 109 109 Parameters[8].EntryContext = &Settings->PollStatusIterations; 110 110 Parameters[8].DefaultType = REG_DWORD; 111 111 Parameters[8].DefaultData = &DefaultPollStatusIterations; 112 112 Parameters[8].DefaultLength = sizeof(ULONG); 113 113 114 - Parameters[9].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 114 + Parameters[9].Flags = RTL_QUERY_REGISTRY_DIRECT; 115 115 Parameters[9].Name = L"OverrideKeyboardType"; 116 116 Parameters[9].EntryContext = &Settings->OverrideKeyboardType; 117 117 Parameters[9].DefaultType = REG_DWORD; 118 118 Parameters[9].DefaultData = &DefaultOverrideKeyboardType; 119 119 Parameters[9].DefaultLength = sizeof(ULONG); 120 120 121 - Parameters[10].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 121 + Parameters[10].Flags = RTL_QUERY_REGISTRY_DIRECT; 122 122 Parameters[10].Name = L"OverrideKeyboardSubtype"; 123 123 Parameters[10].EntryContext = &Settings->OverrideKeyboardSubtype; 124 124 Parameters[10].DefaultType = REG_DWORD; 125 125 Parameters[10].DefaultData = &DefaultOverrideKeyboardSubtype; 126 126 Parameters[10].DefaultLength = sizeof(ULONG); 127 127 128 - Parameters[11].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 128 + Parameters[11].Flags = RTL_QUERY_REGISTRY_DIRECT; 129 129 Parameters[11].Name = L"PollingIterations"; 130 130 Parameters[11].EntryContext = &Settings->PollingIterations; 131 131 Parameters[11].DefaultType = REG_DWORD; 132 132 Parameters[11].DefaultData = &DefaultPollingIterations; 133 133 Parameters[11].DefaultLength = sizeof(ULONG); 134 134 135 - Parameters[12].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 135 + Parameters[12].Flags = RTL_QUERY_REGISTRY_DIRECT; 136 136 Parameters[12].Name = L"PollingIterationsMaximum"; 137 137 Parameters[12].EntryContext = &Settings->PollingIterationsMaximum; 138 138 Parameters[12].DefaultType = REG_DWORD; 139 139 Parameters[12].DefaultData = &DefaultPollingIterationsMaximum; 140 140 Parameters[12].DefaultLength = sizeof(ULONG); 141 141 142 - Parameters[13].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 142 + Parameters[13].Flags = RTL_QUERY_REGISTRY_DIRECT; 143 143 Parameters[13].Name = L"ResendIterations"; 144 144 Parameters[13].EntryContext = &Settings->ResendIterations; 145 145 Parameters[13].DefaultType = REG_DWORD; 146 146 Parameters[13].DefaultData = &DefaultResendIterations; 147 147 Parameters[13].DefaultLength = sizeof(ULONG); 148 148 149 - Parameters[14].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 149 + Parameters[14].Flags = RTL_QUERY_REGISTRY_DIRECT; 150 150 Parameters[14].Name = L"SampleRate"; 151 151 Parameters[14].EntryContext = &Settings->SampleRate; 152 152 Parameters[14].DefaultType = REG_DWORD; 153 153 Parameters[14].DefaultData = &DefaultSampleRate; 154 154 Parameters[14].DefaultLength = sizeof(ULONG); 155 155 156 - Parameters[15].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 156 + Parameters[15].Flags = RTL_QUERY_REGISTRY_DIRECT; 157 157 Parameters[15].Name = L"CrashOnCtrlScroll"; 158 158 Parameters[15].EntryContext = &Settings->CrashOnCtrlScroll; 159 159 Parameters[15].DefaultType = REG_DWORD; ··· 161 161 Parameters[15].DefaultLength = sizeof(ULONG); 162 162 163 163 Status = RtlQueryRegistryValues( 164 - RTL_REGISTRY_ABSOLUTE, 164 + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, 165 165 RegistryPath->Buffer, 166 166 Parameters, 167 167 NULL,
+4 -4
drivers/input/kbdclass/kbdclass.c
··· 254 254 255 255 RtlZeroMemory(Parameters, sizeof(Parameters)); 256 256 257 - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 257 + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; 258 258 Parameters[0].Name = L"ConnectMultiplePorts"; 259 259 Parameters[0].EntryContext = &DriverExtension->ConnectMultiplePorts; 260 260 Parameters[0].DefaultType = REG_DWORD; 261 261 Parameters[0].DefaultData = &DefaultConnectMultiplePorts; 262 262 Parameters[0].DefaultLength = sizeof(ULONG); 263 263 264 - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 264 + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; 265 265 Parameters[1].Name = L"KeyboardDataQueueSize"; 266 266 Parameters[1].EntryContext = &DriverExtension->DataQueueSize; 267 267 Parameters[1].DefaultType = REG_DWORD; 268 268 Parameters[1].DefaultData = &DefaultDataQueueSize; 269 269 Parameters[1].DefaultLength = sizeof(ULONG); 270 270 271 - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 271 + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; 272 272 Parameters[2].Name = L"KeyboardDeviceBaseName"; 273 273 Parameters[2].EntryContext = &DriverExtension->DeviceBaseName; 274 274 Parameters[2].DefaultType = REG_SZ; ··· 276 276 Parameters[2].DefaultLength = 0; 277 277 278 278 Status = RtlQueryRegistryValues( 279 - RTL_REGISTRY_ABSOLUTE, 279 + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, 280 280 ParametersRegistryKey.Buffer, 281 281 Parameters, 282 282 NULL,
+4 -4
drivers/input/mouclass/mouclass.c
··· 221 221 222 222 RtlZeroMemory(Parameters, sizeof(Parameters)); 223 223 224 - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 224 + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; 225 225 Parameters[0].Name = L"ConnectMultiplePorts"; 226 226 Parameters[0].EntryContext = &DriverExtension->ConnectMultiplePorts; 227 227 Parameters[0].DefaultType = REG_DWORD; 228 228 Parameters[0].DefaultData = &DefaultConnectMultiplePorts; 229 229 Parameters[0].DefaultLength = sizeof(ULONG); 230 230 231 - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 231 + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; 232 232 Parameters[1].Name = L"MouseDataQueueSize"; 233 233 Parameters[1].EntryContext = &DriverExtension->DataQueueSize; 234 234 Parameters[1].DefaultType = REG_DWORD; 235 235 Parameters[1].DefaultData = &DefaultDataQueueSize; 236 236 Parameters[1].DefaultLength = sizeof(ULONG); 237 237 238 - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 238 + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; 239 239 Parameters[2].Name = L"PointerDeviceBaseName"; 240 240 Parameters[2].EntryContext = &DriverExtension->DeviceBaseName; 241 241 Parameters[2].DefaultType = REG_SZ; ··· 243 243 Parameters[2].DefaultLength = 0; 244 244 245 245 Status = RtlQueryRegistryValues( 246 - RTL_REGISTRY_ABSOLUTE, 246 + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, 247 247 ParametersRegistryKey.Buffer, 248 248 Parameters, 249 249 NULL,
+2 -2
drivers/input/sermouse/sermouse.c
··· 56 56 57 57 RtlZeroMemory(Parameters, sizeof(Parameters)); 58 58 59 - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 59 + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; 60 60 Parameters[0].Name = L"NumberOfButtons"; 61 61 Parameters[0].EntryContext = &DriverExtension->NumberOfButtons; 62 62 Parameters[0].DefaultType = REG_DWORD; ··· 64 64 Parameters[0].DefaultLength = sizeof(ULONG); 65 65 66 66 Status = RtlQueryRegistryValues( 67 - RTL_REGISTRY_ABSOLUTE, 67 + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, 68 68 ParametersRegistryKey.Buffer, 69 69 Parameters, 70 70 NULL,
+4 -4
modules/rosapps/drivers/green/misc.c
··· 85 85 86 86 RtlZeroMemory(Parameters, sizeof(Parameters)); 87 87 88 - Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT; 88 + Parameters[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED; 89 89 Parameters[0].Name = L"AttachedDevice"; 90 90 Parameters[0].EntryContext = &DriverExtension->AttachedDeviceName; 91 91 92 - Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 92 + Parameters[1].Flags = RTL_QUERY_REGISTRY_DIRECT; 93 93 Parameters[1].Name = L"DeviceReported"; 94 94 Parameters[1].EntryContext = &DriverExtension->DeviceReported; 95 95 Parameters[1].DefaultType = REG_DWORD; 96 96 Parameters[1].DefaultData = &DefaultDeviceReported; 97 97 Parameters[1].DefaultLength = sizeof(ULONG); 98 98 99 - Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_REGISTRY_OPTIONAL; 99 + Parameters[2].Flags = RTL_QUERY_REGISTRY_DIRECT; 100 100 Parameters[2].Name = L"SampleRate"; 101 101 Parameters[2].EntryContext = &DriverExtension->SampleRate; 102 102 Parameters[2].DefaultType = REG_DWORD; ··· 104 104 Parameters[2].DefaultLength = sizeof(ULONG); 105 105 106 106 Status = RtlQueryRegistryValues( 107 - RTL_REGISTRY_ABSOLUTE, 107 + RTL_REGISTRY_ABSOLUTE | RTL_REGISTRY_OPTIONAL, 108 108 ParametersRegistryKey.Buffer, 109 109 Parameters, 110 110 NULL,