Контрольные коды DeviceIoControl - PullRequest
0 голосов
/ 26 апреля 2020

Я использую функцию deviceIoControl в c#, и мне нужен управляющий код, чтобы определить, что произойдет. Я ищу их значения, но могу найти только их имена, например, FSCTL_FILESYSTEM_GET_STATISTICS.

Как узнать значение кода для функции decixeIoControl?

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2020

Значение, которое вы ищете, определяется в 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

...