161 global PESieve_version
162 ptr_size = ctypes.sizeof(ctypes.c_voidp)
164 pesieve_dll =
"pe-sieve32.dll"
166 pesieve_dll =
"pe-sieve64.dll"
169 pesieve_path = os.path.abspath(os.getcwd()) + os.path.sep + pesieve_dll
170 lib = ctypes.cdll.LoadLibrary(pesieve_path)
171 except FileNotFoundError:
172 if 'PESIEVE_DIR' in os.environ:
173 pesieve_path = os.environ.get(
'PESIEVE_DIR') + os.path.sep + pesieve_dll
174 lib = ctypes.cdll.LoadLibrary(pesieve_path)
178 PESieve_version = ctypes.cast(lib.PESieve_version, ctypes.POINTER(ctypes.c_uint32)).contents.value
179 if (PESieve_version < PESIEVE_MIN_VER
or PESieve_version > PESIEVE_MAX_VER):
181 exception_msg = f
"Version mismatch: the PE-sieve.dll version ({dll_version_str}) doesn't match the bindings version"
182 raise Exception(exception_msg)
192 if (
not isinstance(params, t_params)):
195 params_size = ctypes.sizeof(t_params)
196 pp = ctypes.create_string_buffer(bytes(params), params_size)
197 pr = ctypes.create_string_buffer(ctypes.sizeof(t_report))
198 lib.PESieve_scan(pr, pp)
199 report = t_report.from_buffer(pr)
202def PESieve_scan_ex(params: t_params, rtype: t_report_type, buf_size: int) -> (t_report, str, int):
205 if (
not isinstance(params, t_params)):
208 pp = ctypes.create_string_buffer(bytes(params), ctypes.sizeof(t_params))
209 pr = ctypes.create_string_buffer(ctypes.sizeof(t_report))
210 out_size = ctypes.c_ulong(0)
211 json_buf = ctypes.create_string_buffer(buf_size)
212 lib.PESieve_scan_ex(pr, pp, rtype, json_buf, buf_size, ctypes.byref(out_size))
213 report = t_report.from_buffer(pr)
215 json_str = json_buf.value.decode(
'UTF-8')
218 return (report, json_str, out_size.value)