square690410
驱动牛犊
驱动牛犊
  • 注册日期2007-01-31
  • 最后登录2007-07-09
  • 粉丝0
  • 关注0
  • 积分190分
  • 威望20点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:1190回复:0

在AddDevice出现BSOD了....

楼主#
更多 发布于:2007-02-09 13:16
  小弟主要是想送ACPI Command,由BIOS用ASL Code定义一个PnP Device

然后再去驱动去,由Device Stack把ACPI command送给pdo

但装完我的Driver后,开机就会有BSOD(XP SP2 DDK June 2006)了....Error Code 19-->BAD_POOL_HEADER

AddDevice的code如下,请各位大大救救我...,也有试过自订DeviceName不过之前的Driver

移除后,在Obj Manager里还是看得到之前建的Device,第二次执行就会出现名称冲突了...

请各位大大救救我

NTSTATUS status = STATUS_SUCCESS;
    PDEVICE_OBJECT fdo;
    PACPI_DEVICE_EXTENSION pdx;
    UNICODE_STRING DeviceName, DosDeviceName;

    PAGED_CODE();

    KdPrint(("AddDevice Called \r\n"));

    status = IoCreateDevice(pDriverObject,sizeof(ACPI_DEVICE_EXTENSION),NULL,FILE_DEVICE_UNKNOWN,FILE_DEVICE_SECURE_OPEN,FALSE,&fdo);

    if(!NT_SUCCESS(status))
    {
        KdPrint(("Create Device Fail ,Status is %x\r\n",status));
        return status;
    }

    KdPrint(("Create Device Success \r\n"));

    pdx = (PACPI_DEVICE_EXTENSION) fdo->DeviceExtension;    

    IoInitializeRemoveLock(&pdx->RemoveLock,DEVICE_POOL_TAG,0,0);

    status = IoRegisterDeviceInterface(pdo,&ACPI_CONTACTOR_GUID,NULL,&pdx->ifname);

    if(!NT_SUCCESS(status))
    {
        KdPrint(("Register Interface Fail \r\n"));

        IoDeleteDevice(fdo);
        return status;
    }

    KdPrint(("Register Interface Success \r\n"));

    IoSetDeviceInterfaceState(&pdx->ifname,TRUE);
        
    pdx->DeviceObject = fdo;
    pdx->LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo,pdo);
    pdx->pdo = pdo;        
    pdx->devpower = PowerDeviceD0;
    pdx->syspower = PowerSystemWorking;

    fdo->Flags |= DO_BUFFERED_IO;
    
    fdo->Flags &= (~DO_DEVICE_INITIALIZING);
                
    return status;
游客

返回顶部