以文本方式查看主題

-  曙海教育集團論壇  (http://www.scb-ycwb.com/bbs/index.asp)
--  Windows驅(qū)動開發(fā)  (http://www.scb-ycwb.com/bbs/list.asp?boardid=75)
----  驅(qū)動加入code_seg("INIT")出現(xiàn)藍屏,  (http://www.scb-ycwb.com/bbs/dispbbs.asp?boardid=75&id=2720)

--  作者:wangxinxin
--  發(fā)布時間:2010-12-17 11:59:04
--  驅(qū)動加入code_seg("INIT")出現(xiàn)藍屏,
DeviceExtension:
8207fea8  8207fdf0 00280026 f8a77150 001a0018
8207feb8  f8a77130 00000000 0000000d 8207fdf0

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

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

源碼如下:

代碼:
/************************************************************************
* 文件名稱:Driver.cpp                                                 
* 作    者:張帆
* 完成日期:2007-11-1
*************************************************************************/

#include "Driver.h"

/************************************************************************
* 函數(shù)名稱:DriverEntry
* 功能描述:初始化驅(qū)動程序,定位和申請硬件資源,創(chuàng)建內(nèi)核對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進來的驅(qū)動對象
      pRegistryPath:驅(qū)動程序在注冊表的中的路徑
* 返回 值:返回初始化驅(qū)動狀態(tài)
*************************************************************************/
#pragma INITCODE
extern "C" NTSTATUS DriverEntry (
      IN PDRIVER_OBJECT pDriverObject,
      IN PUNICODE_STRING pRegistryPath  ) 
{
  NTSTATUS status;
  KdPrint(("Enter DriverEntry\\n"));

  //注冊其他驅(qū)動調(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ū)動設(shè)備對象
  status = CreateDevice(pDriverObject);

  KdPrint(("DriverEntry end\\n"));
  return status;
}

/************************************************************************
* 函數(shù)名稱:CreateDevice
* 功能描述:初始化設(shè)備對象
* 參數(shù)列表:
      pDriverObject:從I/O管理器中傳進來的驅(qū)動對象
* 返回 值:返回初始化狀態(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)建符號鏈接
  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
* 功能描述:負責(zé)驅(qū)動程序的卸載操作
* 參數(shù)列表:
      pDriverObject:驅(qū)動對象
* 返回 值:返回狀態(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;

    //刪除符號鏈接
    UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
    IoDeleteSymbolicLink(&pLinkName);
    pNextObj = pNextObj->NextDevice;
    IoDeleteDevice( pDevExt->pDevice );
  }
}

/************************************************************************
* 函數(shù)名稱:HelloDDKDispatchRoutine
* 功能描述:對讀IRP進行處理
* 參數(shù)列表:
      pDevObj:功能設(shè)備對象
      pIrp:從IO請求包
* 返回 值:返回狀態(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;  //符號鏈接名
} 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);

主站蜘蛛池模板: 国产精品美女一区二区视频| 啊…别了在线观看免费下载| 国产一国产一级毛片视频在线| 亚洲伦理中文字幕| youjizz亚洲| 美女扒开尿口给男人桶视频免费| 日本高清不卡在线观看| 国产午夜激无码av毛片| 久久国产精品99精品国产| 香港三级日本三级三级韩级2| 日韩精品一区二区亚洲av观看| 国产成人aaa在线视频免费观看| 久久综合桃花网| 青青热久免费精品视频在线观看| 日本在线视频www色| 国产99re在线观看只有精品| 中文在线最新版天堂| 一个色综合高清在线观看| 精品卡2卡3卡4卡免费| 欧美一区二区三区久久综合| 国产精品一卡二卡三卡| 亚洲av无码国产一区二区三区| 成人在线手机视频| 日本高清免费不卡在线播放| 国产AV一区二区三区传媒| 一级毛片免费不卡直观看| 男人把女人桶爽30分钟应用| 在线观看中文字幕码2023| 亚洲欧美日韩综合在线播放| 69pao精品视频在线观看| 日本高清无卡码一区二区久久| 喝茶影视喝茶影院最新电影电视剧 | 一区二区三区欧美| 火影忍者narutofootjob| 国产精品线在线精品国语| 久草视频福利资源站| 老师你的兔子好软水好多的车视频 | 成人私人影院在线版| 免费a级毛片无码免费视频| 91成人在线免费视频| 最近免费中文字幕大全|