阅读:1655回复:9
在WDM中应用程序传给我的数据inputbuffer[10],我怎么得到?
在WDM中应用程序传给我的数据inputbuffer[10],我怎么得到?是在DeveceControl()中吗?我怎样将数据传给应用程序?谢谢!
|
|
沙发#
发布于:2003-11-05 09:08
看看MSDN的DeveceControl说明,有详细介绍的。
|
|
|
板凳#
发布于:2003-11-05 09:08
看看MSDN的DeveceIoControl说明,有详细介绍的。
|
|
|
地板#
发布于:2003-11-05 12:46
LPBYTE ioBuffer =(LPBYTE)Irp->AssociatedIrp.SystemBuffer;
PIO_STACK_LOCATION irpStack=IoGetCurrentIrpStackLocation (Irp); ULONG inBufLen=irpStack->Parameters.DeviceIoControl.InputBufferLength; ULONG outBufLen= irpStack->Parameters.DeviceIoControl.OutputBufferLength; 这是 METHOD_BUFFERED 方式的通用处理 ioBuffer 是缓冲区地址。 处理结束后 Irp->IoStatus.Status = 返回状态 Irp->IoStatus.Information = 有效数据的长度 |
|
|
地下室#
发布于:2003-11-12 09:20
同意楼上的说法
|
|
5楼#
发布于:2003-11-12 20:17
诸位大侠:
俺是一只刚接触这行的菜鸟,SWF大侠的语句我看明白了,好像是分别把不同的值赋给不同的参数,我的问题是:驱动程序中编写者所要做的工作就是这些设置相应的值,而不用具体去操纵数据的传输,比如说 把数据从硬件传到内存,驱动程序在其间起到的作用就是把传输的地址和要传输的数据长度告诉系统,而具体的数据传输有操作系统来完成,当然,在这里是系统核心。 |
|
|
6楼#
发布于:2003-11-12 21:45
writefile也可以完成吧?
|
|
|
7楼#
发布于:2003-11-12 23:28
如果是 BUFFER IO就用Irp->AssociatedIrp.SystemBuffer
如果DIRECT IO用,Irp->MDLADDRESS 如果NIETHER,就用Irp->USERBUFFER 如果其他。。。。 我不知道,谁能说说?? |
|
|
8楼#
发布于:2003-11-13 09:43
在WDM中应用程序传给我的数据inputbuffer[10],我怎么得到?是在DeveceControl()中吗?我怎样将数据传给应用程序
如果调用CreateFile函数成功,应用程序就可以用DeviceIoControl函数与WDM进行通信了。用户模式的DeviceIoControl API函数原型如下: BOOL DeviceIoControl(Handle, Code, InputData, InputLength, OutputData, OutputLength, &Feedback, &Overlapped); Handle是一个已打开设备的句柄,在调用CreateFile函数时已获得。 InputData(PVOID)和InputLength(DWORD)参数描述了为驱动程序提供数据的缓冲区(以驱动程序的角度看,该区域为驱动程序提供输入数据)。OutputData(PVOID)和OutputLength(DWORD)参数描述了接受驱动程序输出数据的缓冲区。驱动程序会更新变量Feedback(DWORD)以指出它返回了多少字节的输出数据。 用户模式中对DeviceIoControl的调用将使I/O管理器创建一个带有IRP_MJ_DEVICE_CONTROL主功能码的IRP,并把该IRP发送到设备堆栈最上层驱动程序的派遣例程。驱动程序根据I/O控制命令来决定如何获得缓冲区地址(InputData)。I/O控制操作是用IOCTL中的功能码来为每个IOCTL指定寻址方式。有些IOCTL使用buffered方式,而有些IOCTL使用direct方式,还有些IOCTL使用neither方式。对buffered方式,系统分配一块缓冲区用于输入和输出,驱动程序通过KIrp::IoctlBuffer获得缓冲区地址,驱动程序的输出字节数赋给I.Information(),然后又I/O管理器将数据从驱动的系统缓冲区复制到应用程序的数据缓冲区。对direct方式,输出缓冲区由类KMemory对象映射,输出数据由Mdl映射到用户数据缓冲区。 |
|
|
9楼#
发布于:2003-11-22 21:20
同意theseus和swf2003
|
|