jry9524
驱动牛犊
驱动牛犊
  • 注册日期2002-01-10
  • 最后登录2005-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1212回复:2

关于全局变量的实现

楼主#
更多 发布于:2003-07-31 11:12
HI:
为什么我在我把key_des放到 struct _DEVICE_EXTENSION 中(PUCHAR key_des)
然后,
case IOCTL_FILE_DISK_DESKEY:
{
PUCHAR deskey=NULL;

deskey=Irp->AssociatedIrp.SystemBuffer;
RtlZeroMemory(device_extension->key_des, 8);
RtlCopyMemory(device_extension->key_des,deskey,8);
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 8;
break;
}
从应用层传递密钥后机器马上关机重新启动。我看了一下是
RtlZeroMemory(device_extension->key_des, 8);
RtlCopyMemory(device_extension->key_des,deskey,8); 导致的
如果我改成:
case IOCTL_FILE_DISK_DESKEY:
{
//PUCHAR deskey=NULL;

//deskey=Irp->AssociatedIrp.SystemBuffer;
//RtlZeroMemory(device_extension->key_des, 8);
//RtlCopyMemory(device_extension->key_des,deskey,8);

device_extension->key_des=Irp->AssociatedIrp.SystemBuffer;
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 8;
break;
}

这样机器不会关机重启了。但是这样我CREAT的硬盘不能马上格式化,格式化完了我在卸载掉,然后再MOUNT 上来,发现该硬盘没有格式化。

哪为兄弟能给我提点建议。


Beyon
lstart
驱动牛犊
驱动牛犊
  • 注册日期2001-08-14
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-31 12:48
HI:
为什么我在我把key_des放到 struct _DEVICE_EXTENSION 中(PUCHAR key_des)
然后,
case IOCTL_FILE_DISK_DESKEY:
{
PUCHAR deskey=NULL;

deskey=Irp->AssociatedIrp.SystemBuffer;
RtlZeroMemory(device_extension->key_des, 8);
RtlCopyMemory(device_extension->key_des,deskey,8);
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 8;
break;
}
从应用层传递密钥后机器马上关机重新启动。我看了一下是
RtlZeroMemory(device_extension->key_des, 8);
RtlCopyMemory(device_extension->key_des,deskey,8); 导致的
如果我改成:
case IOCTL_FILE_DISK_DESKEY:
{
//PUCHAR deskey=NULL;

//deskey=Irp->AssociatedIrp.SystemBuffer;
//RtlZeroMemory(device_extension->key_des, 8);
//RtlCopyMemory(device_extension->key_des,deskey,8);

device_extension->key_des=Irp->AssociatedIrp.SystemBuffer;
status = STATUS_SUCCESS;
Irp->IoStatus.Information = 8;
break;
}

这样机器不会关机重启了。但是这样我CREAT的硬盘不能马上格式化,格式化完了我在卸载掉,然后再MOUNT 上来,发现该硬盘没有格式化。

哪为兄弟能给我提点建议。


 


应该是第一种方法,,,,第二种方法是错误的.....
当然第一种方法只是机制正确,,,,,关键所在是,,,
你的key_des是PUCHAR类型,,,,
而你的key_des没有分配任何内存.....
应该用ExAllocatePoolWithTag(...)
分配内存,,,,这是C语言的基本问题,,,
要记的用ExFreePool释放哦!!!
jry9524
驱动牛犊
驱动牛犊
  • 注册日期2002-01-10
  • 最后登录2005-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-01 08:56
lstart:
   谢谢你的提醒!
Beyon
游客

返回顶部