149 global PESieve_version
150 ptr_size = ctypes.sizeof(ctypes.c_voidp)
152 pesieve_dll =
"pe-sieve32.dll"
154 pesieve_dll =
"pe-sieve64.dll"
156 if 'PESIEVE_DIR' in os.environ:
157 pesieve_dir = os.environ.get(
'PESIEVE_DIR')
159 pesieve_dir = os.path.abspath(os.getcwd())
160 pesieve_path = pesieve_dir + os.path.sep + pesieve_dll
161 lib = ctypes.cdll.LoadLibrary(pesieve_path)
162 PESieve_version = ctypes.cast(lib.PESieve_version, ctypes.POINTER(ctypes.c_uint32)).contents.value
163 if (PESieve_version < PESIEVE_MIN_VER
or PESieve_version > PESIEVE_MAX_VER):
165 exception_msg = f
"Version mismatch: the PE-sieve.dll version ({dll_version_str}) doesn't match the bindings version"
166 raise Exception(exception_msg)
176 if (
not isinstance(params, t_params)):
179 params_size = ctypes.sizeof(t_params)
180 pp = ctypes.create_string_buffer(bytes(params), params_size)
181 pr = ctypes.create_string_buffer(ctypes.sizeof(t_report))
182 lib.PESieve_scan(pr, pp)
183 report = t_report.from_buffer(pr)
186def PESieve_scan_ex(params: t_params, rtype: t_report_type, buf_size: int) -> (t_report, str, int):
189 if (
not isinstance(params, t_params)):
192 pp = ctypes.create_string_buffer(bytes(params), ctypes.sizeof(t_params))
193 pr = ctypes.create_string_buffer(ctypes.sizeof(t_report))
194 out_size = ctypes.c_ulong(0)
195 json_buf = ctypes.create_string_buffer(buf_size)
196 lib.PESieve_scan_ex(pr, pp, rtype, json_buf, buf_size, ctypes.byref(out_size))
197 report = t_report.from_buffer(pr)
199 json_str = json_buf.value.decode(
'UTF-8')
202 return (report, json_str, out_size.value)