| 1 | ==============================
|
| 2 | Decoding an IOCTL Magic Number
|
| 3 | ==============================
|
| 4 |
|
| 5 | To decode a hex IOCTL code:
|
| 6 |
|
| 7 | Most architectures use this generic format, but check
|
| 8 | include/ARCH/ioctl.h for specifics, e.g. powerpc
|
| 9 | uses 3 bits to encode read/write and 13 bits for size.
|
| 10 |
|
| 11 | ====== ==================================
|
| 12 | bits meaning
|
| 13 | ====== ==================================
|
| 14 | 31-30 00 - no parameters: uses _IO macro
|
| 15 | 10 - read: _IOR
|
| 16 | 01 - write: _IOW
|
| 17 | 11 - read/write: _IOWR
|
| 18 |
|
| 19 | 29-16 size of arguments
|
| 20 |
|
| 21 | 15-8 ascii character supposedly
|
| 22 | unique to each driver
|
| 23 |
|
| 24 | 7-0 function #
|
| 25 | ====== ==================================
|
| 26 |
|
| 27 |
|
| 28 | So for example 0x82187201 is a read with arg length of 0x218,
|
| 29 | character 'r' function 1. Grepping the source reveals this is::
|
| 30 |
|
| 31 | #define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2])
|