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盘怎么要创建文件呢?

解决方案 »

  1.   

    --转载大富翁的.
    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) ;
      

  2.   

    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是未声明的标志符!这是什么回事呢?
      

  3.   

    用VWIN32_DIOC_DOS_INT13也是一样的提示
      

  4.   

    nInBufferSize,nOutBufferSize这两个参数怎样设置?