阅读:1213回复:2
关于全局变量的实现
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 上来,发现该硬盘没有格式化。 哪为兄弟能给我提点建议。 |
|
|
沙发#
发布于:2003-07-31 12:48
HI: 应该是第一种方法,,,,第二种方法是错误的..... 当然第一种方法只是机制正确,,,,,关键所在是,,, 你的key_des是PUCHAR类型,,,, 而你的key_des没有分配任何内存..... 应该用ExAllocatePoolWithTag(...) 分配内存,,,,这是C语言的基本问题,,, 要记的用ExFreePool释放哦!!! |
|
板凳#
发布于:2003-08-01 08:56
lstart:
谢谢你的提醒! |
|
|