wang_bml
驱动牛犊
驱动牛犊
  • 注册日期2004-05-27
  • 最后登录2011-12-21
  • 粉丝0
  • 关注0
  • 积分131分
  • 威望24点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1025回复:1

这样写那里错了?

楼主#
更多 发布于:2007-08-20 21:36
刚开始学驱动,写了下面一段程序,不知道错在哪儿,请高手指点下

NTSTATUS
DriverEntry(IN PDRIVER_OBJECT pDriObj,IN PUNICODE_STRING pRegPath)
{
  ...
//Attach Device
status = IoAttachDevice(g_DevObj,&DevName,&g_OldDevObj);
...
}

NTSTATUS TdiCreateAddrComplate(IN PDEVICE_OBJECT pDevObj,IN PIRP Irp,IN PVOID Context){
      PIO_STACK_LOCATION Irps = IoGetCurrentIrpStackLocation(Irp);
      PIRP QueryIrp = (PIRP)Context;
      TDI_ADDRESS_INFO *pTai = (TDI_ADDRESS_INFO *)ExAllocatePool(NonPagedPool,   \
                                                                sizeof    (TDI_ADDRESS_INFO_MAX));
      NTSTATUS status;
    
      if(pTai != NULL){
          PMDL pMdl = IoAllocateMdl(pTai,sizeof(TDI_ADDRESS_INFO_MAX),FALSE,FALSE,NULL);
          if (pMdl != NULL) {
                MmBuildMdlForNonPagedPool(pMdl);
               if (QueryIrp != NULL) {    
                        TdiBuildQueryInformation(QueryIrp,g_OldDevObj,Irps->FileObject,NULL,NULL,
                                                                               TDI_QUERY_ADDRESS_INFO,pMdl);
                       status = IoCallDriver(g_OldDevObj,QueryIrp);//调用会蓝屏
               }
         }
     }

    return status;
}

NTSTATUS TdiCreate(IN PDEVICE_OBJECT pDevObj,IN PIRP Irp){
  PIO_STACK_LOCATION Irps = IoGetCurrentIrpStackLocation(Irp);
  FILE_FULL_EA_INFORMATION *pEA =
                                    (FILE_FULL_EA_INFORMATION *)Irp->AssociatedIrp.SystemBuffer;
  PIRP QueryIrp;
  NTSTATUS status;
    
  if(pEA->EaNameLength == TDI_TRANSPORT_ADDRESS_LENGTH \
 && memcmp(pEA->EaName,TdiTransportAddress,TDI_TRANSPORT_ADDRESS_LENGTH) == 0){
            QueryIrp = TdiBuildInternalDeviceControlIrp(TDI_QUERY_ADDRESS_INFO,g_OldDevObj,\
                                                Irps->FileObject,NULL,NULL);
             IoSkipCurrentIrpStackLocation(Irp);        
             IoSetCompletionRoutine(Irp,TdiCreateAddrComplate,QueryIrp,TRUE,TRUE,TRUE);
             status = IoCallDriver(g_OldDevObj,,Irp);
}
 else{
          if(g_OldDevObj != NULL){
                IoSkipCurrentIrpStackLocation(Irp);
                status = IoCallDriver(g_OldDevObj,Irp);
          }
        else{
                status = Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
                IoCompleteRequest (Irp, IO_NO_INCREMENT);
        }
  }
    
return status;
}

最新喜欢:

wingmanwingma...
wang_bml
驱动牛犊
驱动牛犊
  • 注册日期2004-05-27
  • 最后登录2011-12-21
  • 粉丝0
  • 关注0
  • 积分131分
  • 威望24点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-23 13:42
高手们帮帮忙
游客

返回顶部