我正在尝试理解和使用 win32file。我需要获取 USN 期刊,并且很难理解我在网上找到的代码片段。这是我找到的代码片段 -
format = 'qqqqqLLLLqqqqq'
length = struct.calcsize(format)
out_buffer = win32file.DeviceIoControl(volh, winioctlcon.FSCTL_GET_NTFS_VOLUME_DATA, None, length)
data = struct.unpack(format, out_buffer)
现在,当谈到 C 和它的结构时,我真的很生疏。我现在所理解的format
是 96 字节缓冲区,它将从DeviceIoControl
所以我试图改变格式来'QQQQQQQQQQQQQQQQQQQ'
看看会发生什么(看看是因为我对实际发生的事情一无所知),结果out_buffer
这次我得到了更大的结果。所以我想打开它-
struct.unpack(format, out_buffer)
令我惊讶的是,我得到了——
struct.error: unpack requires a string argument of length 152
所以我添加了另一个“Q”来增加大小并得到相同的结果。我不明白为什么“qqqqqLLLLqqqqq”有效而“QQQQQQQQQQQQQQQQQQQ”无效。所以我的问题是——
我的理解是,如果缓冲区大于输出,我们可以解包,那么为什么解包不起作用?
每次我想从 DeviceIoControl 中获取一些东西时,我是否必须记住这些格式?
向我指出资源也是一个额外的好处,因为我需要在代码的基础上阅读 USN 期刊,而且我认为 hit-and-try 不会让我到任何地方