junshen56
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2315回复:10

我调用DeviceIoControlde的IOCTL_STORAGE_CHECK_VERIFY参数时候总是报参数错误?

楼主#
更多 发布于:2002-11-07 00:09
我需要实时监控软驱中是否有软盘,但是现在用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
);
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-07 09:32
我需要实时监控软驱中是否有软盘,但是现在用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
);
 

可能是输入缓冲和输出缓冲地址或其长度设置不正确。最小是一个ULONG数据类型的长度。
Tom_lyd
junshen56
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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一个是零,应该不会是长度的问题!
  
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-07 13:18
我需要实时监控软驱中是否有软盘,但是现在用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
);
 


///////////////////////////
(ULONG) IOCTL_STORAGE_CHECK_VERIFY,// dwIoControlCode
前面转换一下,不过具体是不是ULONG ,我不敢确定,或许是DWORD
生命驱动,活力无限!
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-07 16:57
我可以肯定
IOCTL_STORAGE_CHECK_VERIFY的InputBufferLength必须>=sizeof(ULONG)!
I'm upgrading……
junshen56
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-07 18:12
按照MSDN上IOCTL_STORAGE_CHECK_VERIFY的InputBufferLength必须为零!!!我用ULONG和DWORD都试过了还是报参数错误!
junshen56
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-07 18:28
调用DeviceIoControl时候返回零,用Getlassterror得到错误信息为参数错,是否有办法知道第几个参数错?
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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.
I'm upgrading……
junshen56
驱动牛犊
驱动牛犊
  • 注册日期2002-10-29
  • 最后登录2004-05-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-08 23:23
TO:JungleBoy
 谢谢你!不过我还是试不出来!还有什么好办法吗?
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-09 09:38
有一个办法就是调汇编代码
Tom_lyd
snk12
驱动牛犊
驱动牛犊
  • 注册日期2001-10-25
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望4点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2002-11-10 22:56
你想判断有无盘的话非得读一下不可
游客

返回顶部