首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

关于DeviceIoControl的调用解决方案

2012-03-23 
关于DeviceIoControl的调用我要实现对U盘的某个特定的扇区进行读写。FUNCTION Long DeviceIoControl(Long h

关于DeviceIoControl的调用
我要实现对U盘的某个特定的扇区进行读写。

FUNCTION Long DeviceIoControl(Long hDevice, Long dwIoControlCode, Blob lpInBuffer, Long nInBufferSize, REF DISK_GEOMETRY lpOutBuffer, Long nOutBufferSize, REF Long lpBytesReturned, Long lpOverlapped) LIBRARY "kernel32" 

FUNCTION Long CreateFile(String lpFileName, Long dwDesiredAccess, Long dwShareMode, Long lpSecurityAttributes, Long dwCreationDisposition, Long dwFlagsAndAttributes, Long hTemplateFile) LIBRARY "kernel32" ALIAS FOR "CreateFileA" 


CONSTANT Long FSCTL_LOCK_VOLUME = 589848 
CONSTANT Long GENERIC_WRITE = 1073741824

首先: createfile:
  ll_hDevice = CreateFile("\\.\PHYSICALDRIVE" + String(3), GENERIC_WRITE, 2 , 0, 4, 0, 0)

再下面 锁卷DeviceIoControl( ll_hDevice, FSCTL_LOCK_VOLUME, 0, 0, 0, 0, ll_BytesReturned,0) 保存程序时,
  报错: C0052: Bad argument for function: devieciocontrol。

大家帮忙看看什么问题呀, 或者有没有例程给我参考一下。






[解决办法]
第3个参数是Blob lpInBuffer
第5个参数是REF DISK_GEOMETRY lpOutBuffer //这是一个结构体,你要先定义的,同时它是ref类型的,必须使用变量为参数,不能使用常量

这两个参数你都写错了类型
[解决办法]
第5个参数是REF DISK_GEOMETRY lpOutBuffer
由于是ref的,所以调用时参数必须一致

热点排行