当PC得知有新设备插入时,总线驱动会创建相应的物理驱动PDO,然后提示有新设备插入,这时候调用相应Driver的AddDevice方法创建功能驱动FDO

下面是一个典型的AddDevice方法

#pragma PAGEDCODE
NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject)
{
PAGED_CODE();
KdPrint(("Enter HelloWDMAddDevice\n")); NTSTATUS status;
PDEVICE_OBJECT fdo;
UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\MyWDMDevice");
status = IoCreateDevice(
DriverObject,
sizeof(DEVICE_EXTENSION),
&(UNICODE_STRING)devName,
FILE_DEVICE_UNKNOWN,
,
FALSE,
&fdo);
if( !NT_SUCCESS(status))
return status;
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)fdo->DeviceExtension;
pdx->fdo = fdo;
pdx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject);
UNICODE_STRING symLinkName;
RtlInitUnicodeString(&symLinkName,L"\\DosDevices\\HelloWDM"); pdx->ustrDeviceName = devName;
pdx->ustrSymLinkName = symLinkName;
status = IoCreateSymbolicLink(&(UNICODE_STRING)symLinkName,&(UNICODE_STRING)devName); if( !NT_SUCCESS(status))
{
IoDeleteSymbolicLink(&pdx->ustrSymLinkName);
status = IoCreateSymbolicLink(&symLinkName,&devName);
if( !NT_SUCCESS(status))
{
return status;
}
} fdo->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;
fdo->Flags &= ~DO_DEVICE_INITIALIZING; KdPrint(("Leave HelloWDMAddDevice\n"));
return STATUS_SUCCESS;
}

细心的人也许会觉得这个方法的第二个参数PhysicalDeviceObject,即PDO,来的有些莫名其妙,没有交代类型等

这个对象在inf可以指定它的类型,比如

ServiceType=1

最新文章

  1. px、dp和sp,这些单位有什么区别?
  2. socket编程
  3. javascript的实践
  4. 网络之OSI&&TCP/IP比较
  5. 第 6 章 贴近servlet
  6. 第一章 CLR的执行模型
  7. Android 改变标题栏的背景色
  8. .net平台是什么?.net平台的组成,.net平台的好处
  9. C++sort函数使用总结
  10. 让你的字ScrollView、ListView充分伸展
  11. 转接口IC GM7150BN/ GM7150BC:CVBS转BT656芯片 低功耗NTSC/PAL 视频解码器
  12. Ubuntu热键控制spotify播放和音量调节
  13. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'user'
  14. ffmpeg 获得视频的时间长度, 仅仅学习一下
  15. node.js 从入门到。。。
  16. (C/C++)区别:数组与指针,指针与引用
  17. loadrunner基础学习笔记二
  18. 如何用C#动态编译、执行代码
  19. PostgreSQL 自动输入密码
  20. 13.纯 CSS 创作一个冒着热气的咖啡杯

热门文章

  1. ModPagespeed for Apache安装配置
  2. mysqli操作数据库
  3. [BI项目记]-BUG创建
  4. 第五篇:在SOUI中使用XML布局属性指引(pos, offset, pos2type)
  5. UWP学习记录9-设计和UI之控件和模式6
  6. [转载] SSH入门学习基础教程
  7. WebRTC音频预处理单元APM的整体编译及使用
  8. js三种方法添加image
  9. 【字符串匹配】KMP算法和next数组的c/c++实现
  10. ListView总结