richard-chen
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2003-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1057回复:5

初级问题

楼主#
更多 发布于:2003-03-27 22:26
1。是否可以将adddevice例程中的操作(创建设备对象、建立设备扩展,符号连接)放如driverentry例程中呢?
2。完成例程IoCompleteRequest是系统自带的吗?他的源代码在哪里?
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-28 00:55
1.不可以
2.根据你驱动的需要加代码,也可以不加
richard-chen
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2003-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-28 10:02
这是我在本站帖子中下的程序,这个程序就将adddevice例程中的操作
放到driverentry例程中的一个createdevice函数中。
还有在该程序中他直接调用IoCompleteReques函数,但没有这个函数的定义。
附件名称/大小 下载次数 最后更新
2003-03-28_Driver.cpp (13KB)  0
X_ray
驱动中牛
驱动中牛
  • 注册日期2003-02-03
  • 最后登录2004-07-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-28 10:55
deviceentry用于初始化驱动,过后会从内存中删除.adddevice用于初始化设备,不会从内存中删除.有些时候感觉不到区别是因为我们的设备从开机后就没有变化.
IoCompleteRequest一般是由busdriver发出,由底向上询问栈内所有驱动是否可以结束,如果可以结束,驱动要把后面的IRP保存好,防止栈内有的驱动不能结束.只要有一个驱动不能结束,系统会发出cancelrequest,这时驱动必须能恢复.

内容实在太多,最好自己读DDK文档,上面说得很清楚.
richard-chen
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2003-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-28 11:38
就是因为我知道这些,所以才不明白他为什么这样做
extern \"C\" NTSTATUS DriverEntry (
IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
   {......
    pDriverObject->DriverUnload = DriverUnload;
   pDriverObject->MajorFunctio[IRP_MJ_CREATE]       =DispatchCreate;
    .......
  status =
CreateDevice(pDriverObject, ulDeviceNumber);--->1
   .....}
  

  NTSTATUS CreateDevice (
         IN PDRIVER_OBJECT pDriverObject,
IN ULONG ulDeviceNumber)
   {  ....
      status =
IoCreateDevice(...... );------>2
     pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDevice = pDevObj;
      .......
   status =
IoCreateSymbolicLink( &(UNICODE_STRING)symLinkName,--->
&(UNICODE_STRING)devName );
  .....
}
richard-chen
驱动牛犊
驱动牛犊
  • 注册日期2002-05-28
  • 最后登录2003-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-28 11:39
就是因为我知道这些,所以才不明白他为什么这样做
extern \"C\" NTSTATUS DriverEntry (
IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
   {......
    pDriverObject->DriverUnload = DriverUnload;
   pDriverObject->MajorFunctio[IRP_MJ_CREATE]       =DispatchCreate;
    .......
  status =
CreateDevice(pDriverObject, ulDeviceNumber);--->1
   .....}
  

  NTSTATUS CreateDevice (
         IN PDRIVER_OBJECT pDriverObject,
IN ULONG ulDeviceNumber)
   {  ....
      status =
IoCreateDevice(...... );------>2
     pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDevice = pDevObj;
      .......
   status =
IoCreateSymbolicLink( &(UNICODE_STRING)symLinkName,--->
&(UNICODE_STRING)devName );
  .....
}
没有adddevice 例程!!
游客

返回顶部