I am trying to send io control to my driver from an C# application but strangely switch statement always fallbacks to default in DeviceIoControl event.
Here is how control codes defined in Driver
#define TD_IOCTL_FILTER_PROCESS_ADD CTL_CODE (FILE_DEVICE_UNKNOWN, (0x800), METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
#define TD_IOCTL_FILTER_PROCESS_REMOVE CTL_CODE (FILE_DEVICE_UNKNOWN, (0x801), METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
#define TD_IOCTL_FILTER_ENABLE CTL_CODE (FILE_DEVICE_UNKNOWN, (0x802), METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
#define TD_IOCTL_FILTER_DISABLE CTL_CODE (FILE_DEVICE_UNKNOWN, (0x803), METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
Here is the C# Enumeration of control codes
public enum PS_FILTER_IOCTL : int
{
TD_IOCTL_FILTER_PROCESS_ADD = 0x800,
TD_IOCTL_FILTER_PROCESS_REMOVE = 0x801,
TD_IOCTL_FILTER_ENABLE = 0x802,
TD_IOCTL_FILTER_DISABLE = 0x803,
}
And finally the switch statement in the driver
switch (IoControlCode)
{
case TD_IOCTL_FILTER_PROCESS_ADD:
break;
case TD_IOCTL_FILTER_PROCESS_REMOVE:
break;
default:
status = STATUS_INVALID_DEVICE_REQUEST;
break;
}
For some reason its always switched to default. Am i missing something?