问一个AddDevice和设备符号链的问题??
UNICODE_STRING ntDeviceName;
UNICODE_STRING win32DeviceName;
RtlInitUnicodeString(&ntDeviceName, L"Twdm1");
RtlInitUnicodeString(&win32DeviceName, L"Twdm1");
DbgPrint("Starting AddDevice()/n");
//创建我们的功能设备对象,并储存到fdo中:
status = IoCreateDevice(
DriverObject, //驱动程序对象
sizeof(DEVICE_EXTENSION), //要求的设备扩展的大小
&ntDeviceName, //设备名称,这里为NULL
FILE_DEVICE_UNKNOWN, //设备的类型,在标准头文件WDM.H或NTDDK.H中列出的FILE_DEVICE_xxx值之一
0, //各种常量用OR组合在一起,指示可删除介质、只读等。
FALSE, //如果一次只有一个线程可以访问该设备,为TRUE,否则为FALSE
&fdo); //返回的设备对象
//NT_SUCCESS宏用于测试IoCreateDevice内核是否成功完成。不要忘记检查对内核的所有调用是否成功。
//NT_ERROR宏不等同于!NT_SUCCESS,最好使用!NT_SUCCESS,因为除了错误外,它还截获警告信息。
if( !NT_SUCCESS(status))
{
DbgPrint("AddDevice(): IoCreateDevice failed!");
return status;
}
else
{
DbgPrint("AddDevice(): IoCreateDevice OK!");
}
status = IoCreateSymbolicLink( &win32DeviceName, &ntDeviceName );
if (!NT_SUCCESS(status))
{
DbgPrint("TWDM: IoCreateSymbolicLink() faild ! /n");
}
else
{
DbgPrint("TWDM: IoCreateSymbolicLink() ok ! /n");
}
为什么驱动程序加载的时候显示“AddDevice(): IoCreateDevice failed!”呢?
好像是设备名字不对
改成这两句试试
RtlInitUnicodeString(&ntDeviceName, L"//Device//Twdm1");
RtlInitUnicodeString(&win32DeviceName, L"//DosDevices//Twdm1");