AddDevice异常,导致系统重起

AddDevice错误,导致系统重起
步之什么原因,我照着书本上抄的代码,一安装驱动系统就重起。跟别的教材比对也没发现有哪些地方写的不对,真是郁闷。
小弟分不多,望高手指点!!


typedef   struct   _DEVICE_EXTENSION
{
PDEVICE_OBJECT   DeviceObject;
PDEVICE_OBJECT   NextStackDevice;
PDEVICE_OBJECT   pdo;
PDEVICE_OBJECT   fdo;
UNICODE_STRING   ifname;
UNICODE_STRING   ifSymLinkName;
WMILIB_CONTEXT   WmiLibInfo;
} DEVICE_EXTENSION,   *PDEVICE_EXTENSION;


//     AddDevice
NTSTATUS   AddDevice(IN   PDRIVER_OBJECT   DriverObject,   IN   PDEVICE_OBJECT   pdo)
{
DbgPrint( "AddDevice   Called.\n ");

NTSTATUS   status;
PDEVICE_OBJECT   fdo;
status   =   IoCreateDevice(DriverObject,  
sizeof(DEVICE_EXTENSION),
NULL,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
if(NT_ERROR(status))
return   status;
// 将fdo记录在设备扩展中
PDEVICE_EXTENSION   pdx   =   (PDEVICE_EXTENSION)fdo-> DeviceExtension;
pdx-> pdo   =   pdo;
pdx-> fdo   =   fdo;
DbgPrint( "FDO   is   %x ",   fdo);

//     可能有问题代码   begin
// 注册设备
status   =   IoRegisterDeviceInterface(pdo,   &GUID_WDM,   NULL,
&pdx-> ifSymLinkName);
if(NT_ERROR(status))
{
IoDeleteDevice(fdo);
return   status;
}

//   使前面注册的设备接口类有效或无效
IoSetDeviceInterfaceState(&pdx-> ifSymLinkName,   TRUE);
DbgPrint( "Symbolic   Link   Name   is   %T ",   &pdx-> ifSymLinkName);

// 把设备对象放到设备堆栈上
pdx-> NextStackDevice   =   IoAttachDeviceToDeviceStack(fdo,   pdo);

//     可能有问题代码   end
if(!pdx-> NextStackDevice)
{
IoDeleteDevice(fdo);
return   STATUS_DEVICE_REMOVED;
}
// 设置设备标志

fdo-> Flags   &=   ~DO_DEVICE_INITIALIZING;
fdo-> Flags   |=   DO_BUFFERED_IO;

return   STATUS_SUCCESS;
}

------解决方案--------------------
if(NT_ERROR(status))

这些有问题,不要用NT_ERROR,要用NT_SUCCESS