Esempio n. 1
0
    def list_process_names():
        """
        Returns a list of the names of running processes

        :return:
            A list of unicode strings
        """

        process_id_array_size = 1024
        entries = 0

        while entries == 0 or process_id_array_size == entries:
            dword_array = (wintypes.DWORD * process_id_array_size)

            process_ids = dword_array()
            bytes_used = wintypes.DWORD(0)

            res = psapi.EnumProcesses(cast(process_ids, wintypes.PDWORD),
                                      sizeof(process_ids), byref(bytes_used))
            if not res:
                return []

            entries = int(bytes_used.value / sizeof(wintypes.DWORD))
            process_id_array_size += 512

        output = []
        index = 0
        while index < entries:
            process_id = process_ids[index]
            process_handle = kernel32.OpenProcess(
                PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, False, process_id)
            if process_handle:
                module = wintypes.HANDLE()
                needed_bytes = wintypes.LPDWORD()
                module_res = psapi.EnumProcessModules(process_handle,
                                                      byref(module),
                                                      sizeof(module),
                                                      byref(needed_bytes))
                if module_res:
                    length = 260
                    buffer = ctypes.create_unicode_buffer(length)
                    output_size = wintypes.DWORD(length)
                    name_res = psapi.GetModuleBaseNameW(
                        process_handle, module, buffer, length)
                    name = buffer.value
                    output.append(name)
            kernel32.CloseHandle(process_handle)
            index += 1

        return output
Esempio n. 2
0
        def get_ppname():
            process_id_array_size = 1024
            entries = 0

            while entries == 0 or process_id_array_size == entries:
                dword_array = (wintypes.DWORD * process_id_array_size)

                process_ids = dword_array()
                bytes_used = wintypes.DWORD(0)

                res = WINAPI._EnumProcesses(cast(process_ids, wintypes.PDWORD),
                                            sizeof(process_ids),
                                            byref(bytes_used))
                if not res:
                    return []

                entries = int(bytes_used.value / sizeof(wintypes.DWORD))
                process_id_array_size += 512

            name = None
            index = 0
            ppid = os.getppid()
            while index < entries:
                process_id = process_ids[index]
                if ppid != process_id:
                    index += 1
                    continue

                process_handle = WINAPI._OpenProcess(
                    WINAPI._PROCESS_QUERY_INFORMATION
                    | WINAPI._PROCESS_VM_READ, False, process_id)
                if process_handle:
                    module = wintypes.HANDLE()
                    needed_bytes = wintypes.LPDWORD()
                    module_res = WINAPI._EnumProcessModules(
                        process_handle, byref(module), sizeof(module),
                        byref(needed_bytes))
                    if module_res:
                        length = 260
                        buffer = ctypes.create_unicode_buffer(length)
                        WINAPI._GetModuleBaseNameW(process_handle, module,
                                                   buffer, length)
                        name = buffer.value
                WINAPI._CloseHandle(process_handle)
                break

            return name