【发布时间】:2017-06-27 23:39:22
【问题描述】:
我正在尝试将以下 C 代码行转换为 ctypes。这是我要翻译的 C 程序的 sn-p:
pIfRow = (MIB_IF_ROW2 *) malloc(sizeof(MIB_IF_ROW2));
SecureZeroMemory((PVOID)pIfRow, sizeof(MIB_IF_ROW2));
(注意MIB_IF_ROW2是一个结构体,在Netioapi.h中定义)
无论如何,我可以在 ctypes 中很好地翻译第一行,假设 MIB_IF_ROW2 已经被定义为 ctypes 结构:
from ctypes import *
# Translate first line of C Code
buff = create_string_buffer(sizeof(MIB_IF_ROW2))
p_if_row = cast(buff, POINTER(MIB_IF_ROW2))
# Second Line... ?
但是当我到达第二行时,我被卡住了。我在文档或在线中找不到与该函数等效的 ctypes 的任何内容。解决此问题的最佳方法是什么?
【问题讨论】:
-
在这种情况下,您似乎不太可能特别需要
SecureZeroMemory函数。ctypes.memset应该也可以。 -
[Rtl]SecureZeroMemory是在 winnt.h 中定义的内联函数。它不是由系统 DLL 导出的。您不需要它,因为 ctypes 会将它分配的内存归零。此外,这是一个固定大小的结构,因此无需将缓冲区转换为指针。只需将其实例化为if_row = MIB_IF_ROW2()和p_if_row = ctypes.pointer(if_row)。
标签: python windows ctypes securezeromemory