Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
    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)
Example #5
0
 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)
Example #6
0
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))
Example #7
0
    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')])
Example #8
0
    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)
Example #9
0
    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)
Example #10
0
    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)
Example #11
0
 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")