请教这个API函数的用法:DeviceIoControl

Allblus 2006-08-02 09:05:24
DELPHI帮助里面是这样说的:
BOOL DeviceIoControl(
HANDLE hDevice, // handle to device of interest
DWORD dwIoControlCode, // control code of operation to perform
LPVOID lpInBuffer, // pointer to buffer to supply input data
DWORD nInBufferSize, // size of input buffer
LPVOID lpOutBuffer, // pointer to buffer to receive output data
DWORD nOutBufferSize, // size of output buffer
LPDWORD lpBytesReturned, // pointer to variable to receive output byte count
LPOVERLAPPED lpOverlapped // pointer to overlapped structure for asynchronous operation
);
我要用这个函数实现卸载U盘的功能:
调用如下:
DeviceIoControl(usbhandle,IOCTL_STORAGE_EJECT_MEDIA,NULL,0,NULL,0,&dwOutBytes,(LPOVERLAPPED)NULL);
但我不知道这里面的参数要怎样设定?尤其是第一个参数,帮助里面说Call the CreateFile function to obtain a device handle,我要卸载U盘怎么要创建文件呢?
...全文
266 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allblus 2006-08-02
  • 打赏
  • 举报
回复
nInBufferSize,nOutBufferSize这两个参数怎样设置?
Allblus 2006-08-02
  • 打赏
  • 举报
回复
用VWIN32_DIOC_DOS_INT13也是一样的提示
Allblus 2006-08-02
  • 打赏
  • 举报
回复
A := CreateFile('\\.\h:', // 设备路径
GENERIC_READ, // 读写方式
FILE_SHARE_READ, // 共享方式
nil, // 默认的安全描述符
OPEN_EXISTING, // 创建方式
FILE_ATTRIBUTE_NORMAL, // 文件属性
0);
U盘盘符是h:\上面获取文件句柄
DeviceIoControl(A,
IOCTL_STORAGE_EJECT_MEDIA,0,0,0,0,&dwOutBytes,0);
IOCTL_STORAGE_EJECT_MEDIA参数Ejects media from a SCSI device.
但在程式运行时提示说IOCTL_STORAGE_EJECT_MEDIA是未声明的标志符!

这是什么回事呢?
天涯倦客 2006-08-02
  • 打赏
  • 举报
回复
--转载大富翁的.
DeviceIoControl(hDevice:THandle; dwIoControlCode:DWORD; lpInBuffer:Byte; nInBufferSize:DWORD;
lpOutBuffer:Byte; nOutBufferSize:DWORD; lpBytesReturned:DWORD; lpOverlapped:PChar;)

hDevice 是从CreateFile返回的VxD句柄。
dwIoControlCode 是用来制定VxD将要进行的操作。
lpInBuffer 是包含了VxD完成dwIoControlCode所制定操作的数据的缓冲区地址。
如果这个操作不需要数据,可以传为NIL。
nInBufferSize 是由lpInBuffer所指向的缓冲区的地址的大小(byte)。
lpOutBuffer 是VxD程序在操作成功之后要将输出数据输出到的缓冲区。
如果这个操作没有任何返回值,这个值为NIL。
nOutBufferSize 是lpOutBuffer所指向的缓冲区的大小(byte)。
lpBytesReturned 是一个dword型变量的地址。这个变量用来接收VxD在lpOutBuffer中写入数据的大小。
lpOverlapped 是一个指针。如果你要一直等到操作完成,这个值应该赋为NIL。

例如:
var
A : THandle;
B : Byte;
C : DWORD;
DeviceIOControl (A, VWIN32_DIOC_DOS_INT13, @B, SizeOf (B), @B, SizeOf (B), C, nil) ;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧