diff --git a/scapy/layers/windows/registry.py b/scapy/layers/windows/registry.py index 640f09829cd..198806b75c6 100644 --- a/scapy/layers/windows/registry.py +++ b/scapy/layers/windows/registry.py @@ -493,6 +493,26 @@ def get_key_info( timeout=timeout, ) + if response.status != 0: + log_runtime.error( + "Got status %s while querying key info", hex(response.status) + ) + raise ValueError(response.status) + + if response.lpClassOut.Length > 2: + # There is a Class info stored. We need to + # get it by specifying the proper MaximumLength. + # By default the size is "2". + response = self.sr1_req( + BaseRegQueryInfoKey_Request( + hKey=key_handle, + lpClassIn=RPC_UNICODE_STRING( + MaximumLength=response.lpClassOut.Length + ), + ), + timeout=timeout, + ) + if response.status != 0: log_runtime.error( "Got status %s while querying key info", hex(response.status) @@ -588,7 +608,6 @@ def enum_subkeys( index += 1 results.append(response.lpNameOut.valueof("Buffer")[:-1].decode()) - return results def enum_values(