0

我在 c# 中使用 deviceIoControl 函数,我需要一个控制代码来定义会发生什么。我正在寻找它们的值,但我只能找到它们的名称,例如 FSCTL_FILESYSTEM_GET_STATISTICS。

如何知道 decixeIoControl 函数的代码值?

谢谢!

4

1 回答 1

1

您要查找的值在 winioctl.h 中定义

#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,24,METHOD_BUFFERED,FILE_ANY_ACCESS)

CTL_CODE 定义如下:

#define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))

所以; 观察以下常量的值:(全部在 winioctl.h 中)

DeviceType: #define FILE_DEVICE_FILE_SYSTEM 0x00000009
Function: 24 (Passed in as constant)
Method: #define METHOD_BUFFERED 0
Access: #define FILE_ANY_ACCESS 0

计算结果为:

(((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))

= (9 << 16) | (0 << 14) | (24 << 2) | (0)

= 0x00090060 (hexadecimal)

或者,

= 589920 (decimal)

您可以通过这种方式计算任何其他控制代码,也请查看以下链接:

https://docs.microsoft.com/tr-tr/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol#remarks

于 2020-04-26T13:49:05.023 回答