阅读:2315回复:10
我调用DeviceIoControlde的IOCTL_STORAGE_CHECK_VERIFY参数时候总是报参数错误?
我需要实时监控软驱中是否有软盘,但是现在用API的方法好像都要不停的度软盘,这样子很容易损坏软盘,我想请问一下又没有一种透明检查软盘的方法?我调用DeviceIoControlde的IOCTL_STORAGE_CHECK_VERIFY参数时候总是报参数错误,不知道何故,用谁使用过这个参数吗?
bb=DeviceIoControl( DirInfo[numDirs].hDir,// handle to device IOCTL_STORAGE_CHECK_VERIFY,// dwIoControlCode operation NULL,// lpInBuffer; must be NULL 0,// nInBufferSize; must be zero lpOutBuffer,//NULL,// lpOutBuffer; must be NULL nOutBufferSize,//0,// nOutBufferSize; must be zero lpBytesReturned,// number of bytes returned lpOverlapped// OVERLAPPED structure ); |
|
沙发#
发布于:2002-11-07 09:32
我需要实时监控软驱中是否有软盘,但是现在用API的方法好像都要不停的度软盘,这样子很容易损坏软盘,我想请问一下又没有一种透明检查软盘的方法?我调用DeviceIoControlde的IOCTL_STORAGE_CHECK_VERIFY参数时候总是报参数错误,不知道何故,用谁使用过这个参数吗? 可能是输入缓冲和输出缓冲地址或其长度设置不正确。最小是一个ULONG数据类型的长度。 |
|
|
板凳#
发布于:2002-11-07 12:56
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device of interest IOCTL_STORAGE_CHECK_VERIFY, // dwIoControlCode, control code of // operation to perform NULL, // lpInBuffer is not used; must be NULL 0, // nInBufferSize is not used; must be zero NULL, // lpOutBuffer is not used; must be NULL 0, // nOutBufferSize is not used; // must be zero (LPDWORD) lpBytesReturned, // pointer to variable to receive // output byte count (LPOVERLAPPED) lpOverlapped // pointer to OVERLAPPED structure // for asynchronous operation ); 我是严格按照MSDN上的说明写的,lpInBuffer and lpOutBuffer is not used; must be NULL;nInBufferSize and nOutBufferSize is not used; must be zero一个是NULL一个是零,应该不会是长度的问题! |
|
地板#
发布于:2002-11-07 13:18
我需要实时监控软驱中是否有软盘,但是现在用API的方法好像都要不停的度软盘,这样子很容易损坏软盘,我想请问一下又没有一种透明检查软盘的方法?我调用DeviceIoControlde的IOCTL_STORAGE_CHECK_VERIFY参数时候总是报参数错误,不知道何故,用谁使用过这个参数吗? /////////////////////////// (ULONG) IOCTL_STORAGE_CHECK_VERIFY,// dwIoControlCode 前面转换一下,不过具体是不是ULONG ,我不敢确定,或许是DWORD |
|
|
地下室#
发布于:2002-11-07 16:57
我可以肯定
IOCTL_STORAGE_CHECK_VERIFY的InputBufferLength必须>=sizeof(ULONG)! |
|
|
5楼#
发布于:2002-11-07 18:12
按照MSDN上IOCTL_STORAGE_CHECK_VERIFY的InputBufferLength必须为零!!!我用ULONG和DWORD都试过了还是报参数错误!
|
|
6楼#
发布于:2002-11-07 18:28
调用DeviceIoControl时候返回零,用Getlassterror得到错误信息为参数错,是否有办法知道第几个参数错?
|
|
7楼#
发布于:2002-11-08 09:43
Sorry,我搞错了
我重新看了DDK中相关的项,它上面说对于磁盘设备,OutputBufferLength必须>=sizeof(ULONG)。不好意思! 你再试试看? 原文: Optionally, for disk and CD-ROM devices, Parameters.DeviceIoControl.OutputBufferLength in the I/O stack location of the IRP indicates the size in bytes of a buffer, which must be >= sizeof(ULONG). This field is zero if the optional buffer is not specified. |
|
|
8楼#
发布于:2002-11-08 23:23
TO:JungleBoy
谢谢你!不过我还是试不出来!还有什么好办法吗? |
|
9楼#
发布于:2002-11-09 09:38
有一个办法就是调汇编代码
|
|
|
10楼#
发布于:2002-11-10 22:56
你想判断有无盘的话非得读一下不可
|
|