parameters: (self,
                                 context: interfaces.context.ContextInterface,
                                 potential_layers: List[str],
                                 progress_callback: constants.ProgressCallback = None)
return_statement: return valid_kernel
docstring: Runs through the identified potential kernels and verifies their
          suitability.
  
          This carries out a scan using the pdb_signature scanner on a physical layer.  It uses the
          results of the scan to determine the virtual offset of the kernel.  On early windows implementations
          there is a fixed mapping between the physical and virtual addresses of the kernel.  On more recent versions
          a search is conducted for a structure that will identify the kernel's virtual offset.
  
          Args:
              context: Context on which to operate
              potential_kernels: Dictionary containing `GUID`, `age`, `pdb_name` and `mz_offset` keys
              progress_callback: Function taking a percentage and optional description to be called during expensive computations to indicate progress
  
          Returns:
              A dictionary of valid kernels
docstring_summary: Runs through the identified potential kernels and verifies their
          suitability.
docstring_tokens: Runs through the identified potential kernels and verifies their suitability .
function: def determine_valid_kernel(self,
                                 context: interfaces.context.ContextInterface,
                                 potential_layers: List[str],
                                 progress_callback: constants.ProgressCallback = None) -> Optional[ValidKernelType]:
          """Runs through the identified potential kernels and verifies their
          suitability.
  
          This carries out a scan using the pdb_signature scanner on a physical layer.  It uses the
          results of the scan to determine the virtual offset of the kernel.  On early windows implementations
          there is a fixed mapping between the physical and virtual addresses of the kernel.  On more recent versions
          a search is conducted for a structure that will identify the kernel's virtual offset.
  
          Args:
              context: Context on which to operate
              potential_kernels: Dictionary containing `GUID`, `age`, `pdb_name` and `mz_offset` keys
              progress_callback: Function taking a percentage and optional description to be called during expensive computations to indicate progress
  
          Returns:
              A dictionary of valid kernels
          """
          valid_kernel = None  # type: Optional[ValidKernelType]
          for virtual_layer_name in potential_layers:
              vlayer = context.layers.get(virtual_layer_name, None)
              if isinstance(vlayer, layers.intel.Intel):
                  for method in self.methods:
                      valid_kernel = method(self, context, vlayer, progress_callback)
                      if valid_kernel:
                          break
          if not valid_kernel:
              vollog.info("No suitable kernels found during pdbscan")
          return valid_kernel
function_tokens: def determine_valid_kernel ( self , context : interfaces . context . ContextInterface , potential_layers : List [ str ] , progress_callback : constants . ProgressCallback = None ) -> Optional [ ValidKernelType ] : valid_kernel = None # type: Optional[ValidKernelType] for virtual_layer_name in potential_layers : vlayer = context . layers . get ( virtual_layer_name , None ) if isinstance ( vlayer , layers . intel . Intel ) : for method in self . methods : valid_kernel = method ( self , context , vlayer , progress_callback ) if valid_kernel : break if not valid_kernel : vollog . info ( "No suitable kernels found during pdbscan" ) return valid_kernel