阅读:1526回复:8
在客户程序上如何正确使用WriteFile函数?
我用WriteFile向驱动程序里写一些数据,我知道驱动程序里可以通过调用Irp.IrpStack.parameters.offset.Quart来取得写端口的偏移量。但我却不知道在客户层上调用WriteFile时如何设置该偏移量。
恳请高手赐教! |
|
沙发#
发布于: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 ); |
|
|
板凳#
发布于:2002-04-13 20:26
这样的调用形式没错,但是我该怎么改变写的偏移量啊。也就是说如何才能在客户层上设置Irp中的Offset值啊?
|
|
地板#
发布于:2002-04-13 20:30
我觉得这需要在驱动程序中设置,应用程序中将其作为参数在某一特定域中传给驱动程序。
|
|
|
地下室#
发布于:2002-04-13 21:02
但是在Irp栈中有offset一项啊,这是否可以说明该值在客户层上可以被设定呢?
|
|
5楼#
发布于:2002-04-13 21:03
faint!
用DeviceIoControl(),那更灵活! |
|
|
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)即可。 |
|
7楼#
发布于:2004-01-06 11:04
请贴出CreateEvent()的具体用法,谢谢!
|
|
8楼#
发布于:2004-01-07 21:42
有收获。多谢了,能给出部分程序就更好了。
|
|