阅读:1279回复:6
scsi大虾看过来
我写的虚拟网络硬盘在电脑启动时不能以"本地磁盘"显示出来,只能进入到“磁盘管理器”中重新媒举后才可以,所以我想如果在scsi启动起来后向操作系统发送总线枚举命令,重新查找磁盘,请问这个方案可行吗?我该怎么做呢
|
|
沙发#
发布于:2004-06-08 12:06
IOCTL_SCSI_RESCAN_BUS
|
|
板凳#
发布于:2004-06-08 16:33
to slwqw老大:
有没有办法在scsi驱动中的得到自身设备对象指针呢,我现在使用这个方法,但无法知道自身设备,请问这个办法可行吗? VOID CVRamDisk::SendIrp(PIRP pIrp,IN PDEVICE_OBJECT pTargetDevObj) { PIRP pFIrp=NULL; KEVENT keIoctlComplete; IO_STATUS_BLOCK ioSb; NTSTATUS status; char buffer[20]="i love you!"; int ilen=20; KeInitializeEvent(&keIoctlComplete,NotificationEvent,FALSE); pFIrp=IoBuildDeviceIoControlRequest( IOCTL_SCSI_RESCAN_BUS, pTargetDevObj, buffer, ilen, buffer, ilen, FALSE, &keIoctlComplete, &ioSb); // PrintIRP(pFIrp); // PrintDevObj(pTargetDevObj); DbgPrint("kangzh:pFIrp=%x\n",pFIrp); if(pFIrp) { status=IoCallDriver(pTargetDevObj,pFIrp); if (status == STATUS_PENDING) { KeWaitForSingleObject(&keIoctlComplete,Executive,KernelMode,TRUE,NULL); } status = pFIrp->IoStatus.Status; DbgPrint("Send Success,return status=%x\n",status); } else { DbgPrint("kangzh:Create pIrp error~\n"); } } |
|
地板#
发布于:2004-06-08 20:34
你在干嘛?哪有这样在SCSI Miniport驱动中发出IOCTL_SCSI_RESCAN_BUS请求的。要这样做:
HANDLE hDevice; hDevice = CreateFile("ScsiX:",...); // X = 0,1,2,3.... DeviceIoControl(hDevice,IOCTL_SCSI_RESCAN_BUS,...); |
|
地下室#
发布于:2004-06-09 08:51
呵呵,我昨天这么做了,是可以扫描,但我希望在驱动中完成这件事情,当然我也可以在另外一个驱动中去做,但一定是在驱动中去完成的,但我不知道scsi的虚拟硬盘的设备名称(通过softice的符号链接查看器看到的设备名称好像每次重装之后就会发生变化)和符号联接,我可以在scsi驱动中再次通过IoCreateDevice的方式创建设备吗?谢谢
|
|
5楼#
发布于:2004-06-09 09:30
呵呵,你希望过痛苦的生活,你就慢慢过吧,没有人愿意跟你一起过。:D:D:D
祝你好运! |
|
6楼#
发布于:2004-06-09 10:30
呵呵,早上过来就已经搞定,谢谢你的帮忙!希望以后多多指教亚
|
|