Python调用win32file.ReadFile读取大内存整数错误修复咨询
解决win32file.ReadFile读取大内存时的TypeError问题
问题核心
win32file.ReadFile的第二个参数不支持直接传入超大整数(如8GB对应的字节数),该参数仅接受小整数(单次读取的合理字节数)或可写入的缓冲区对象,传入过大整数会触发类型错误。
解决方案
拆分大内存读取为小块循环执行
不要尝试一次性读取8GB内存,将读取操作拆分为固定大小的块(比如64MB/128MB),循环读取并写入输出文件:import win32file import win32api # 定义单次读取的块大小(可根据系统性能调整) CHUNK_SIZE = 64 * 1024 * 1024 # 64MB TOTAL_MEM_SIZE = 8 * 1024 * 1024 * 1024 # 目标读取的8GB内存 bytes_processed = 0 output_file = open("memory_dump.raw", "wb") try: while bytes_processed < TOTAL_MEM_SIZE: # 计算当前需要读取的块大小(最后一块可能小于CHUNK_SIZE) current_read_size = min(CHUNK_SIZE, TOTAL_MEM_SIZE - bytes_processed) # 创建对应大小的可写入缓冲区 read_buffer = win32file.AllocateReadBuffer(current_read_size) # 执行读取操作 status, read_data = win32file.ReadFile(device_handle, read_buffer, None) if status != 0: raise win32api.error(status, win32api.FormatMessage(status)) output_file.write(read_data) bytes_processed += len(read_data) finally: output_file.close()用缓冲区替代大整数参数
无论读取大小,始终使用win32file.AllocateReadBuffer创建缓冲区作为ReadFile的第二个参数,避免直接传入大整数。该函数会根据指定大小分配适配的内存块,符合ReadFile的参数要求。确认winpmem驱动的单次读取上限
winpmem驱动对单次读取的内存块大小可能存在限制,建议将拆分的块大小控制在驱动允许的范围内(通常不超过256MB),避免触发驱动层面的限制。
内容的提问来源于stack exchange,提问作者Ali Can Gönüllü
相关产品推荐
相关产品推荐

