【发布时间】:2018-02-08 00:11:05
【问题描述】:
我找不到任何关于这个调用的解释:
DeviceIoControl( aHANDLE,
IOCTL_STORAGE_QUERY_PROPERTY,
& aSTORAGE_PROPERTY_QUERY,
... etc.)
应该在aSTORAGE_PROPERTY_QUERY.QueryType 时工作
设置为PropertyExistsQuery。
这应该以某种方式告诉我财产是否,
由aSTORAGE_PROPERTY_QUERY.PropertyId 指定,
可从aHANDLE 寻址的对象获得。
此外,它特别不返回输出缓冲区中的任何信息(当QueryType 时返回信息
设置为PropertyStandardQuery)。
我通过反复试验发现DeviceIoControl() 的返回值仍然表示函数调用的成功/失败,并不表示该属性的可用性。
那么,这是如何工作的呢?
【问题讨论】:
-
之所以断定
DeviceIoControl()的返回值不是我正在寻找的状态,是因为我从查询中获得了非零返回(输出缓冲区长度为零)然后,当使用QueryType=PropertyStandardQuery询问该数据时,我得到错误和GetLastError() == ERROR_INVALID_FUNCTION(1)。当针对同一属性处理其他类似设备时,我同样从查询中获得非零返回,但随后成功获取属性数据。所以......我想我必须得出结论,有些东西没有按应有的方式工作(?)。 -
对于它的价值,我刚刚了解到:“在用户模式下,STATUS_NOT_IMPLEMENTED 或 STATUS_INVALID_DEVICE_REQUEST 将映射到 ERROR_INVALID_FUNCTION。”我认为这意味着这两个映射到相同的值。