<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>

    曙海教育集團論壇Windows驅動開發專題Windows驅動開發 → 驅動加入code_seg("INIT")出現藍屏,


      共有4783人關注過本帖樹形打印

    主題:驅動加入code_seg("INIT")出現藍屏,

    美女呀,離線,留言給我吧!
    wangxinxin
      1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


    加好友 發短信
    等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
    驅動加入code_seg("INIT")出現藍屏,  發帖心情 Post By:2010-12-17 11:59:04

    DeviceExtension:
    8207fea8  8207fdf0 00280026 f8a77150 001a0018
    8207feb8  f8a77130 00000000 0000000d 8207fdf0

    DriverEntry結束后8207feb8空間被釋放,驅動卸載時調用IoDeleteSymbolicLink函數藍屏,如果將code_seg("INIT")去掉可正常,啟動/停止。

    驅動源碼來自《windows驅動開發技術詳解》,詫異的是在網上查詢沒找到該問題的答案然道都能正常運行?

    源碼如下:

    代碼:
    /************************************************************************
    * 文件名稱:Driver.cpp                                                 
    * 作    者:張帆
    * 完成日期:2007-11-1
    *************************************************************************/
    
    #include "Driver.h"
    
    /************************************************************************
    * 函數名稱:DriverEntry
    * 功能描述:初始化驅動程序,定位和申請硬件資源,創建內核對象
    * 參數列表:
          pDriverObject:從I/O管理器中傳進來的驅動對象
          pRegistryPath:驅動程序在注冊表的中的路徑
    * 返回 值:返回初始化驅動狀態
    *************************************************************************/
    #pragma INITCODE
    extern "C" NTSTATUS DriverEntry (
          IN PDRIVER_OBJECT pDriverObject,
          IN PUNICODE_STRING pRegistryPath  ) 
    {
      NTSTATUS status;
      KdPrint(("Enter DriverEntry\n"));
    
      //注冊其他驅動調用函數入口
      pDriverObject->DriverUnload = HelloDDKUnload;
      pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;
      pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine;
      pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine;
      pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKDispatchRoutine;
      
      //創建驅動設備對象
      status = CreateDevice(pDriverObject);
    
      KdPrint(("DriverEntry end\n"));
      return status;
    }
    
    /************************************************************************
    * 函數名稱:CreateDevice
    * 功能描述:初始化設備對象
    * 參數列表:
          pDriverObject:從I/O管理器中傳進來的驅動對象
    * 返回 值:返回初始化狀態
    *************************************************************************/
    #pragma INITCODE
    extern "C" NTSTATUS CreateDevice (
        IN PDRIVER_OBJECT  pDriverObject) 
    {
      NTSTATUS status;
      PDEVICE_OBJECT pDevObj;
      PDEVICE_EXTENSION pDevExt;
      
      //創建設備名稱
      UNICODE_STRING devName;
      RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
      
      //創建設備
      status = IoCreateDevice( pDriverObject,
                sizeof(DEVICE_EXTENSION),
                &(UNICODE_STRING)devName,
                FILE_DEVICE_UNKNOWN,
                0, TRUE,
                &pDevObj );
      if (!NT_SUCCESS(status))
        return status;
    
      pDevObj->Flags |= DO_BUFFERED_IO;
      pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
      pDevExt->pDevice = pDevObj;
      pDevExt->ustrDeviceName = devName;
      //創建符號鏈接
      UNICODE_STRING symLinkName;
      RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
      pDevExt->ustrSymLinkName = symLinkName;
      status = IoCreateSymbolicLink( &symLinkName,&devName );
      if (!NT_SUCCESS(status)) 
      {
        IoDeleteDevice( pDevObj );
        return status;
      }
      return STATUS_SUCCESS;
    }
    
    /************************************************************************
    * 函數名稱:HelloDDKUnload
    * 功能描述:負責驅動程序的卸載操作
    * 參數列表:
          pDriverObject:驅動對象
    * 返回 值:返回狀態
    *************************************************************************/
    #pragma PAGEDCODE
    VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
    {
      PDEVICE_OBJECT  pNextObj;
      KdPrint(("Enter DriverUnload\n"));
      pNextObj = pDriverObject->DeviceObject;
      while (pNextObj != NULL) 
      {
        PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
          pNextObj->DeviceExtension;
    
        //刪除符號鏈接
        UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
        IoDeleteSymbolicLink(&pLinkName);
        pNextObj = pNextObj->NextDevice;
        IoDeleteDevice( pDevExt->pDevice );
      }
    }
    
    /************************************************************************
    * 函數名稱:HelloDDKDispatchRoutine
    * 功能描述:對讀IRP進行處理
    * 參數列表:
          pDevObj:功能設備對象
          pIrp:從IO請求包
    * 返回 值:返回狀態
    *************************************************************************/
    #pragma PAGEDCODE
    NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
                     IN PIRP pIrp) 
    {
      KdPrint(("Enter HelloDDKDispatchRoutine\n"));
      NTSTATUS status = STATUS_SUCCESS;
      // 完成IRP
      pIrp->IoStatus.Status = status;
      pIrp->IoStatus.Information = 0;  // bytes xfered
      IoCompleteRequest( pIrp, IO_NO_INCREMENT );
      KdPrint(("Leave HelloDDKDispatchRoutine\n"));
      return status;
    }
    

    代碼:
    /************************************************************************
    * 文件名稱:Driver.h                                                 
    * 作    者:張帆
    * 完成日期:2007-11-1
    *************************************************************************/
    #pragma once
    
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    #include <NTDDK.h>
    #ifdef __cplusplus
    }
    #endif 
    
    #define PAGEDCODE code_seg("PAGE")
    #define LOCKEDCODE code_seg()
    #define INITCODE code_seg("INIT")
    
    #define PAGEDDATA data_seg("PAGE")
    #define LOCKEDDATA data_seg()
    #define INITDATA data_seg("INIT")
    
    #define arraysize(p) (sizeof(p)/sizeof((p)[0]))
    
    typedef struct _DEVICE_EXTENSION {
      PDEVICE_OBJECT pDevice;
      UNICODE_STRING ustrDeviceName;  //設備名稱
      UNICODE_STRING ustrSymLinkName;  //符號鏈接名
    } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
    
    // 函數聲明
    
    extern "C" NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);
    VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject);
    NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
                     IN PIRP pIrp);
    

    支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

    返回版面帖子列表

    驅動加入code_seg("INIT")出現藍屏,








    簽名
    主站蜘蛛池模板: 嗯啊公交车上被群j| 特级aaaaaaaaa毛片免费视频| 日本55丰满熟妇厨房伦| 伊人狠狠色丁香综合尤物| 西西人体高清444rt·wang| 国内精品久久久久久无码不卡| 久久99久久99精品免观看| 最新国产精品亚洲| 人人妻人人玩人人澡人人爽| 美女视频黄A视频全免费| 国产精品一区二区三区久久 | 国产精品色内内在线播放| 亚洲av永久无码| 污视频软件大全| 国产91精品久久久久久| 高h全肉动漫在线观看免费| 国产超碰人人做人人爽av| 两只大乳奶充满奶汁| 日日夜夜天天操| 亚洲av永久无码精品天堂久久| 欧美黄成人免费网站大全| 哦┅┅快┅┅用力啊┅┅动态图| 青草国产精品久久久久久| 国产精品欧美一区二区三区| 一二三四视频社区在线| 成人黄色免费网址| 久久精品综合电影| 波多野结衣一区二区三区高清av | 曰批免费视频试看天天视频下| 亚洲黄色在线观看| 看欧美黄色大片| 国产精品19p| 99精品国产在热久久婷婷| 女人18毛片黄| 中韩高清无专码区2021曰| 日本免费人成视频播放| 亚洲国产成人久久一区二区三区| 欧美日韩国产综合视频在线看| 午夜在线观看福利| 精品福利一区3d动漫| 国产人妖视频一区在线观看|