【发布时间】:2019-04-18 12:36:01
【问题描述】:
我正在尝试理解和使用 win32file。我需要获取 USN 期刊,并且很难理解我在网上找到的代码 sn-ps。这是我找到的代码 sn-p -
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 不会让我有任何收获
【问题讨论】:
-
volh 的创建过程是什么样的(CreateFile 调用)?
标签: python struct pywin32 deviceiocontrol