def test_enumerate_associated_instances_CIM_ProcessExecutable_Dependent(self): wmi_executor = lib_wmi.WmiSparqlExecutor() wmi_path = lib_client.create_instance_path("CIM_Process", Handle=CurrentPid) dict_key_values = wmi_executor.enumerate_associated_instances( wmi_path, "CIM_ProcessExecutable", "CIM_Process", "Dependent") print("dict_key_values=", dict_key_values)
def test_enumerate_associated_instances_Win32_SubDirectory_PartComponent(self): wmi_executor = lib_wmi.WmiSparqlExecutor() wmi_path = lib_client.create_instance_path("Win32_Directory", Name=always_present_dir) dict_key_values = wmi_executor.enumerate_associated_instances( wmi_path, "Win32_SubDirectory", "Win32_Directory", "PartComponent") print("dict_key_values=", dict_key_values)
def test_enumerate_associated_instances_CIM_DirectoryContainsFile_GroupComponent(self): wmi_executor = lib_wmi.WmiSparqlExecutor() wmi_path = lib_client.create_instance_path("CIM_Directory", Name=always_present_dir) dict_key_values = wmi_executor.enumerate_associated_instances( wmi_path, "CIM_DirectoryContainsFile", "CIM_Directory", "GroupComponent") print("dict_key_values=", dict_key_values)
def test_BidirectionalAssociatorsFromObject_dir_to_file(self): wmi_executor = lib_wmi.WmiSparqlExecutor() file_name = always_present_file.replace("\\", "/").lower() directory_name = always_present_dir.replace("\\", "/").lower() print("file_name=", file_name) print("os.getcwd()=", os.getcwd()) # WMI needs parameters enclosed in double-quotes. wmi_path_directory = 'CIM_Directory.Name="%s"' % directory_name # CIM_DirectoryContainsFile.GroupComponent or CIM_DirectoryContainsFile.PartComponent iter_results = wmi_executor.SelectBidirectionalAssociatorsFromObject( "CIM_DataFile", "CIM_DirectoryContainsFile", wmi_path_directory, 1) list_results = list(iter_results) paths_list = [] for object_path, dict_key_values in list_results: actual_filename_clean = self._object_path_to_path(object_path).lower() paths_list.append(actual_filename_clean) print("paths_list=", paths_list) print("file_name=", file_name) expected_file_path = 'CIM_DataFile.Name="%s"' % file_name print("expected_file_path=", expected_file_path) self.assertTrue(expected_file_path.lower() in paths_list)
def test_enumerate_associated_instances_CIM_ProcessExecutable_Antecedent(self): wmi_executor = lib_wmi.WmiSparqlExecutor() wmi_path = lib_client.create_instance_path("CIM_DataFile", Name=sys.executable) dict_key_values = wmi_executor.enumerate_associated_instances( wmi_path, "CIM_ProcessExecutable", "CIM_DataFile", "Antecedent") print("dict_key_values=", dict_key_values)
def add_associated_instances(grph, root_node, entity_type, entity_id, associator_attribute): assert root_node.find("__associator_attribute__") < 0 logging.debug("This is implemented for WMI only, yet.") logging.debug("entity_type=%s entity_id=%s associator_attribute=%s", entity_type, entity_id, associator_attribute) #result_class, result_role = lib_ontology_tools.get_associated_attribute( # "wmi", lib_wmi.extract_specific_ontology_wmi, associator_attribute) result_class, result_role = lib_ontology_tools.get_associated_class_role( "wmi", lib_wmi.extract_specific_ontology_wmi, associator_attribute) associator_name, _, input_role = associator_attribute.partition(".") if not input_role: raise Exception("associator_attribute %s is invalid" % associator_attribute) # This path will eventually be reformatted for WMI needs. wmi_path = entity_type + "." + entity_id iter_objects = lib_wmi.WmiSparqlExecutor().enumerate_associated_instances( wmi_path, associator_name, result_class, result_role) # WMI returns the attributes of each associated instances, only for the keys. # However, it is needed to iterated on the key-value pairs to trnsform them into strings. # So, an extra check is done, to be sure that the simplified ontology of survol # (List of keys per class) matches WMI class definition. Survol ontology of classes is much simpler # and is just the list of keys, but must be the same as WMI class description. result_class_keys = lib_util.OntologyClassKeys(result_class) for associated_dict_key_values in iter_objects: #logging.debug("associated_dict_key_values=%s", associated_dict_key_values) # This key-values dictionary contains all the attributes of each associated instance, # at least for the keys converted_key_value_dict = {} for property_key_node, property_value_node in associated_dict_key_values.items( ): property_key_name = lib_properties.PropToQName(property_key_node) property_value = str(property_value_node) if property_key_name in result_class_keys: converted_key_value_dict[property_key_name] = property_value logging.debug(" key=%s value=%s", property_key_name, property_value) else: logging.debug("Class %s, key %s is not in the ontology", result_class, property_key_name) script_node = lib_uris.LocalBox().node_from_dict( result_class, converted_key_value_dict) property_node = lib_properties.MakeProp(result_role) logging.debug("script_node=%s", script_node) grph.add((root_node, property_node, script_node))
def test_associator_keys(self): wmi_executor = lib_wmi.WmiSparqlExecutor() lst_CIM_ProcessExecutable = wmi_executor.associator_keys("CIM_ProcessExecutable") print("lst_CIM_ProcessExecutable=", lst_CIM_ProcessExecutable) self.assertTrue(lst_CIM_ProcessExecutable == [('CIM_DataFile', 'Antecedent'), ('CIM_Process', 'Dependent')]) lst_CIM_DirectoryContainsFile = wmi_executor.associator_keys("CIM_DirectoryContainsFile") print("lst_CIM_DirectoryContainsFile=", lst_CIM_DirectoryContainsFile) self.assertTrue(lst_CIM_DirectoryContainsFile == [('CIM_Directory', 'GroupComponent'), ('CIM_DataFile', 'PartComponent')]) lst_Win32_SubDirectory = wmi_executor.associator_keys("Win32_SubDirectory") print("lst_Win32_SubDirectory=", lst_Win32_SubDirectory) self.assertTrue(lst_Win32_SubDirectory == [('Win32_Directory', 'GroupComponent'), ('Win32_Directory', 'PartComponent')])
def test_BidirectionalAssociatorsFromObject_file_to_dir(self): wmi_executor = lib_wmi.WmiSparqlExecutor() file_name = always_present_file.replace("\\", "/").lower() wmi_path_file = 'CIM_DataFile.Name="%s"' % file_name directory_name = always_present_dir.replace("\\", "/").lower() iter_results = wmi_executor.SelectBidirectionalAssociatorsFromObject( "CIM_Directory", "CIM_DirectoryContainsFile", wmi_path_file, 0) list_results = list(iter_results) directory_path = 'Win32_Directory.Name="%s"' % directory_name for object_path, dict_key_values in list_results: print("object_path=", object_path) actual_filename_clean = self._object_path_to_path(object_path) print("actual_filename_clean=", actual_filename_clean) print("directory_path=", directory_path) self.assertTrue(actual_filename_clean==directory_path)
def test_BidirectionalAssociatorsFromObject_subdir_to_dir(self): wmi_executor = lib_wmi.WmiSparqlExecutor() sub_dir_name = always_present_sub_dir.replace("\\", "/").lower() directory_name = always_present_dir.replace("\\", "/").lower() wmi_path_sub_dir = 'CIM_Directory.Name="%s"' % sub_dir_name iter_results = wmi_executor.SelectBidirectionalAssociatorsFromObject( "Win32_Directory", "Win32_SubDirectory", wmi_path_sub_dir, 0) list_results = list(iter_results) paths_list = [] for object_path, dict_key_values in list_results: actual_dir_clean = self._object_path_to_path(object_path) paths_list.append(actual_dir_clean) print("paths_list=", paths_list) print("sub_dir_name=", sub_dir_name) expected_dir_path = 'Win32_Directory.Name="%s"' % directory_name print("expected_dir_path=", expected_dir_path) self.assertTrue(expected_dir_path in paths_list)
def test_BidirectionalAssociatorsFromObject_dir_to_subdir(self): wmi_executor = lib_wmi.WmiSparqlExecutor() sub_dir_name = always_present_sub_dir.replace("\\", "/").lower() directory_name = always_present_dir.replace("\\", "/").lower() # WMI needs parameters enclosed in double-quotes. wmi_path_directory = 'CIM_Directory.Name="%s"' % directory_name iter_results = wmi_executor.SelectBidirectionalAssociatorsFromObject( "Win32_Directory", "Win32_SubDirectory", wmi_path_directory, 1) list_results = list(iter_results) paths_list = [] for object_path, dict_key_values in list_results: # Filenames are converted to lowercase because of different behaviour wrt Windows version. actual_sub_dir_clean = self._object_path_to_path(object_path).lower() paths_list.append(actual_sub_dir_clean) print("paths_list=", paths_list) print("sub_dir_name=", sub_dir_name) expected_subdir_path = 'Win32_Directory.Name="%s"' % sub_dir_name print("expected_subdir_path=", expected_subdir_path) self.assertTrue(expected_subdir_path.lower() in paths_list)
def test_enumerate_associated_instances_CIM_DirectoryContainsFile_PartComponent(self): wmi_executor = lib_wmi.WmiSparqlExecutor() wmi_path = lib_client.create_instance_path("CIM_DataFile", Name=always_present_file) dict_key_values = wmi_executor.enumerate_associated_instances( wmi_path, "CIM_DirectoryContainsFile", "CIM_DataFile", "PartComponent")