richfan
驱动牛犊
驱动牛犊
  • 注册日期2002-01-14
  • 最后登录2003-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1526回复:8

在客户程序上如何正确使用WriteFile函数?

楼主#
更多 发布于:2002-04-13 16:17
我用WriteFile向驱动程序里写一些数据,我知道驱动程序里可以通过调用Irp.IrpStack.parameters.offset.Quart来取得写端口的偏移量。但我却不知道在客户层上调用WriteFile时如何设置该偏移量。
恳请高手赐教!
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-13 17:43
BOOL WriteFile(
  HANDLE hFile,                    // handle to file
  LPCVOID lpBuffer,                // data buffer
  DWORD nNumberOfBytesToWrite,     // number of bytes to write
  LPDWORD lpNumberOfBytesWritten,  // number of bytes written
  LPOVERLAPPED lpOverlapped        // overlapped buffer
);
Tom_lyd
richfan
驱动牛犊
驱动牛犊
  • 注册日期2002-01-14
  • 最后登录2003-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-13 20:26
这样的调用形式没错,但是我该怎么改变写的偏移量啊。也就是说如何才能在客户层上设置Irp中的Offset值啊?
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-13 20:30
我觉得这需要在驱动程序中设置,应用程序中将其作为参数在某一特定域中传给驱动程序。
Tom_lyd
richfan
驱动牛犊
驱动牛犊
  • 注册日期2002-01-14
  • 最后登录2003-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-13 21:02
但是在Irp栈中有offset一项啊,这是否可以说明该值在客户层上可以被设定呢?
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-13 21:03
faint!
用DeviceIoControl(),那更灵活!
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
richfan
驱动牛犊
驱动牛犊
  • 注册日期2002-01-14
  • 最后登录2003-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-13 22:16
我成功了!
设置偏移量不能用SetFilPointer函数。
应当这样做:
创建设备: hDev = CreateFile(
DevInterface.DevicePath(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,//必须是此值
NULL
);
在读写之前生成OVERLAPPED对象(例如 ovlp),将对象ovlp的成员offset设为想要的偏移量,并为成员hEvent生成一个事件对象(use CreateEvent()),其余成员可以一律赋0。
以如下方式调用WriteFile(hDevice, buf, n, &nWritten, &ovlp)即可。
hswqs
驱动小牛
驱动小牛
  • 注册日期2001-03-27
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-06 11:04
请贴出CreateEvent()的具体用法,谢谢!
tangwise
驱动牛犊
驱动牛犊
  • 注册日期2003-11-06
  • 最后登录2007-06-12
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-07 21:42
有收获。多谢了,能给出部分程序就更好了。
游客

返回顶部