2024-03-31 11:16:22 +02:00
|
|
|
#ifndef _EVEN_IOCTL_H_
|
|
|
|
#define _EVEN_IOCTL_H_ 1
|
2024-03-30 07:28:40 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
METHOD_BUFFERED handles the copy_to_user/copy_from_user automagically for us, at the cost of some overhead
|
|
|
|
METHOD_OUT_DIRECT = no automagical copy, MDL set up for "Kernel_driver -> User_mode_app" direction
|
|
|
|
METHOD_IN_DIRECT = no automagical copy, MDL set up for "User_mode_app -> Kernel_driver" direction
|
|
|
|
METHOD_NEITHER = no automagical copy, no automagical MDL setup. Driver (ioctl code) must be guaranteed
|
|
|
|
to run in the context of the calling user-space thread and ask for the user->system
|
|
|
|
mapping itself, and its access to the buffer should be wrapped in a try/catch to handle
|
|
|
|
potential exceptions...
|
|
|
|
|
|
|
|
That's right, DIRECT IN/OUT are from the driver's point of view, relative to the user-space app!!!
|
|
|
|
Both the MSDN and the Coreproject.com article say so, the CodeProject article with added emphasis.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* CTL Codes above 0x800 are free for your custom use
|
|
|
|
Note: using METHOD_BUFFERED = we're lazy and we don't care about a bit of overhead */
|
|
|
|
|
|
|
|
#define IOCTL_CHECK_1 CTL_CODE(0xaa01, 0xe10, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_CHECK_2 CTL_CODE(0xaa01, 0xe30, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_CHECK_3 CTL_CODE(0xaa01, 0xe31, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_WRITE_PEB_1 CTL_CODE(0xaa01, 0xe20, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_WRITE_PEB_2 CTL_CODE(0xaa01, 0xe21, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define IOCTL_READ_PEB CTL_CODE(0xaa01, 0xe22, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
|
|
|
|
struct even_ioctl_in_data
|
|
|
|
{
|
|
|
|
unsigned int offset;
|
2024-03-31 11:16:22 +02:00
|
|
|
unsigned int value;
|
2024-03-30 07:28:40 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct even_ioctl_out_data
|
|
|
|
{
|
2024-03-31 11:16:22 +02:00
|
|
|
unsigned int result;
|
2024-03-30 07:28:40 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#define USE_EVEN_IOCTL_OUT_DATA(x) \
|
|
|
|
struct even_ioctl_out_data##x \
|
|
|
|
{ \
|
|
|
|
unsigned int result; \
|
2024-03-31 11:16:22 +02:00
|
|
|
unsigned char data[x * 4]; \
|
2024-03-30 07:28:40 +01:00
|
|
|
};
|
|
|
|
|
2024-03-31 11:16:22 +02:00
|
|
|
#endif /* _EVEN_IOCTL_H_ */
|
2024-03-30 07:28:40 +01:00
|
|
|
// vim: sw=4 et
|