NeroMan, можно создать свой IO_CTL код. Из приложения открываешь устройство созданное в твоем драйвере (CreateFile(..., ////MyDevice,...)) не забудь в драйвере создать это имя доступное для использования. Я с этим уже накалывался
Потом DeviceIoControl с полученным хендлом и IO_CTL кодом, который ты создал.
В твой драйвер передается тогда IRP пакет, который обрабатывается IoControlDispatchRoutine. У этого пакета есть входной и выходной буфер, туда можно пихать любую информацию, как со стороны приложения так и со стороны драйвера.
Почитай в общем DDK насчет DeviceIoControl, там все более-менее понятно
Вот только пользовательское приложение также можно отследить как и хук