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

    Rss & SiteMap

    曙海教育集團(tuán)論壇 http://www.bjzhda.cn

    曙海教育集團(tuán)論壇
    共1 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]
    [瀏覽完整版]

    標(biāo)題:驅(qū)動(dòng)加入code_seg("INIT")出現(xiàn)藍(lán)屏,

    1樓
    wangxinxin 發(fā)表于:2010-12-17 11:59:04
    DeviceExtension:
    8207fea8  8207fdf0 00280026 f8a77150 001a0018
    8207feb8  f8a77130 00000000 0000000d 8207fdf0

    DriverEntry結(jié)束后8207feb8空間被釋放,驅(qū)動(dòng)卸載時(shí)調(diào)用IoDeleteSymbolicLink函數(shù)藍(lán)屏,如果將code_seg("INIT")去掉可正常,啟動(dòng)/停止。

    驅(qū)動(dòng)源碼來(lái)自《windows驅(qū)動(dòng)開發(fā)技術(shù)詳解》,詫異的是在網(wǎng)上查詢沒找到該問題的答案然道都能正常運(yùn)行?

    源碼如下:

    代碼:
    /************************************************************************
    * 文件名稱:Driver.cpp                                                 
    * 作    者:張帆
    * 完成日期:2007-11-1
    *************************************************************************/
    
    #include "Driver.h"
    
    /************************************************************************
    * 函數(shù)名稱:DriverEntry
    * 功能描述:初始化驅(qū)動(dòng)程序,定位和申請(qǐng)硬件資源,創(chuàng)建內(nèi)核對(duì)象
    * 參數(shù)列表:
          pDriverObject:從I/O管理器中傳進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
          pRegistryPath:驅(qū)動(dòng)程序在注冊(cè)表的中的路徑
    * 返回 值:返回初始化驅(qū)動(dòng)狀態(tài)
    *************************************************************************/
    #pragma INITCODE
    extern "C" NTSTATUS DriverEntry (
          IN PDRIVER_OBJECT pDriverObject,
          IN PUNICODE_STRING pRegistryPath  ) 
    {
      NTSTATUS status;
      KdPrint(("Enter DriverEntry\n"));
    
      //注冊(cè)其他驅(qū)動(dòng)調(diào)用函數(shù)入口
      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;
      
      //創(chuàng)建驅(qū)動(dòng)設(shè)備對(duì)象
      status = CreateDevice(pDriverObject);
    
      KdPrint(("DriverEntry end\n"));
      return status;
    }
    
    /************************************************************************
    * 函數(shù)名稱:CreateDevice
    * 功能描述:初始化設(shè)備對(duì)象
    * 參數(shù)列表:
          pDriverObject:從I/O管理器中傳進(jìn)來(lái)的驅(qū)動(dòng)對(duì)象
    * 返回 值:返回初始化狀態(tài)
    *************************************************************************/
    #pragma INITCODE
    extern "C" NTSTATUS CreateDevice (
        IN PDRIVER_OBJECT  pDriverObject) 
    {
      NTSTATUS status;
      PDEVICE_OBJECT pDevObj;
      PDEVICE_EXTENSION pDevExt;
      
      //創(chuàng)建設(shè)備名稱
      UNICODE_STRING devName;
      RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
      
      //創(chuàng)建設(shè)備
      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;
      //創(chuàng)建符號(hào)鏈接
      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;
    }
    
    /************************************************************************
    * 函數(shù)名稱:HelloDDKUnload
    * 功能描述:負(fù)責(zé)驅(qū)動(dòng)程序的卸載操作
    * 參數(shù)列表:
          pDriverObject:驅(qū)動(dòng)對(duì)象
    * 返回 值:返回狀態(tài)
    *************************************************************************/
    #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;
    
        //刪除符號(hào)鏈接
        UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
        IoDeleteSymbolicLink(&pLinkName);
        pNextObj = pNextObj->NextDevice;
        IoDeleteDevice( pDevExt->pDevice );
      }
    }
    
    /************************************************************************
    * 函數(shù)名稱:HelloDDKDispatchRoutine
    * 功能描述:對(duì)讀IRP進(jìn)行處理
    * 參數(shù)列表:
          pDevObj:功能設(shè)備對(duì)象
          pIrp:從IO請(qǐng)求包
    * 返回 值:返回狀態(tài)
    *************************************************************************/
    #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;  //設(shè)備名稱
      UNICODE_STRING ustrSymLinkName;  //符號(hào)鏈接名
    } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
    
    // 函數(shù)聲明
    
    extern "C" NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);
    VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject);
    NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
                     IN PIRP pIrp);
    
    共1 條記錄, 每頁(yè)顯示 10 條, 頁(yè)簽: [1]

    Copyright © 2000 - 2009 曙海教育集團(tuán)
    Powered By 曙海教育集團(tuán) Version 2.2
    Processed in .01758 s, 2 queries.
    主站蜘蛛池模板: 国产一区二区三区不卡在线观看 | 久久人妻少妇嫩草AV蜜桃| 泳衣男漫画臀篇佳门サエコcc| 国产成人理在线观看视频| qvod小说区图片区亚洲| 日日AV拍夜夜添久久免费| 亚洲欧美日韩中文字幕在线| 粗大的内捧猛烈进出在线视频| 国产精品久久久久久久久齐齐| 三上悠亚在线网站| 日本强好片久久久久久AAA| 亚洲综合一区二区| 稚嫩娇小哭叫粗大撑破h| 国产在线91精品入口| 97欧美精品激情在线观看最新| 学校触犯×ofthedead| 久久精品国内一区二区三区| 欧美波霸影院在线观看| 午夜寂寞在线一级观看免费| 被公连续侵犯中文字幕| 国产精彩视频在线观看免费蜜芽 | 久久久久久亚洲精品不卡| 晓青老师的丝袜系列txt下载| 亚洲综合色婷婷| 疯狂奶水freeseⅹ| 国产一级黄色片子| 青青草原亚洲视频| 国产精品jizz在线观看网站| a一级爱做片免费| 女仆的味道hd中字在线观看| 久久久久久久人妻无码中文字幕爆 | 天天色天天色天天色| 国产福利电影在线观看| xxxxx亚洲| 成人免费一区二区三区在线观看| 久久精品无码一区二区日韩av| 欧美AAAAAA级午夜福利视频| 免费看一级特黄a大片| 精品无码久久久久久久动漫| 国产又粗又猛又黄又爽无遮挡| 80yy私人午夜a级国产|