1. по поводу PKEVENT - читайте документацию пожалуйста: 
http://msdn.microsoft.com/en-us/library/ms802942.aspx2. а по ошибке - не включен заголовочный файл. какой - см документацию.  видимо это один из файлов Wdm.h, Ntddk.h, Ntifs.h
в остальном идея правильная. 
исправьте ошибку с PKEVENT
"Object 
Pointerto a variable that receives a pointer to the object's body. The following table contains the pointer types.".
1. по поводу PKEVENT - читайте документацию пожалуйста: 
http://msdn.microsoft.com/en-us/library/ms802942.aspx2. а по ошибке - не включен заголовочный файл. какой - см документацию.  видимо это один из файлов Wdm.h, Ntddk.h, Ntifs.h
в остальном идея правильная. 
исправьте ошибку с PKEVENT
"Object 
Pointerto a variable that receives a pointer to the object's body. The following table contains the pointer types.".
я исправил эти обшибки, это Unicode characters совмещает вместе с ANSI  Когда я скопировал переменые. Переделал и все нормально.
Ну у меня опять новая проблема: 
 Хотел передать массив через DeviceIoControl parameter в Драйвер. Но как получить этот массив в Драйвер.
 Я делал так: 
 Создая массив в драйвере и присвоить Associated.SystemBuffer к этому массиву.
 Нпр: g_kEnTable=(KENTABLE) pIrp->AssociatedIrp.SystemBuffer
 где:g_kEnTable - это массив типа KENTABLE c 51 элементов, а pIrp->AssociatedIrp.SystemBuffer - как указно - PVOID. 
 - Полученны обшибки: error C2440: 'type cast' : cannot convert from 'PVOID' to KENTABLE. 
 Как можно перевести тип для соглосования 

?