千羽ましろさん、こんにちは。
誰も返信していないようなので、ご参考まで。。。
User Mode 側の CreateFile() でハンドルを取得したいのであれば、たぶん DefineDosDevice() API を使えば取れるんじゃないかなと思います。
たとえば、Keyboard Filter Driver 側で以下のように実装しているのであれば、
-----------------------
RtlInitUnicodeString(&filterName,L"\\Device\\kbdFilter");
status = IoCreateDevice(
IN DriverObject,
IN sizeof(C2P_DEV_EXT),
IN &filterName,
IN pTargetDeviceObject->DeviceType,
IN pTargetDeviceObject->Characteristics,
IN FALSE,
OUT &pFilterDeviceObject
);
-----------------------
User Mode 側では、
-----------------------
#define MY_DEVICE_NAME L"MykbFilter"
#define MY_TARGET_PATH L"\\Device\\kbdFilter"
....
BOOL bResult;
bResult = DefineDosDevice( DDD_RAW_TARGET_PATH, MY_DEVICE_NAME, MY_TARGET_PATH );
if ( bResult )
{
HANDLE hTargetDevice = INVALID_HANDLE_VALUE;
TCHAR tszDeviceName[MAX_PATH];
wsprintf( tszDeviceName, TEXT("\\\\.\\%s"), MY_DEVICE_NAME );
hTargetDevice = CreateFile( tszDeviceName,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );
if ( hTargetDevice != INVALID_HANDLE_VALUE )
{
// TODO:
....
....
CloseHandle( hTargetDevice );
}
bResult = DefineDosDevice( DDD_RAW_TARGET_PATH | DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, MY_DEVICE_NAME, MY_TARGET_PATH );
}
....
-----------------------
みたいな感じで、DefineDosDevice() API で自分で適当な DOS デバイス名を付けて、その名前で CreateFile() をコールすればハンドルが取得できるかも知れません。
ただ実際には自分では試したことないので、自信ないですけど。
(それとも、もう解決済みかな?)