IO通信

DeviceIoControl  发送控制代码到指定设备驱动程序
参数解释:
hDevice Long,设备句柄
dwIoControlCode Long,应用程序调用驱动程序的控制命令,就是IOCTL_XXX IOCTLs。
lpInBuffer Any,应用程序传递给驱动程序的数据缓冲区地址。
nInBufferSize Long,应用程序传递给驱动程序的数据缓冲区大小,字节数。
lpOutBuffer Any,驱动程序返回给应用程序的数据缓冲区地址。
nOutBufferSize Long,驱动程序返回给应用程序的数据缓冲区大小,字节数。
lpBytesReturned Long,驱动程序实际返回给应用程序的数据字节数地址。
lpOverlapped OVERLAPPED,这个结构用于重叠操作。针对同步操作,请用ByVal As Long传递零值。

通知消息宏定义方法:
CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成:

DeviceType(设备类型,高16位(16-31位)),

Access(访问限制,14-15位),

Function(功能2-13 位),

Method(I/O访问内存使用方式)。

DeviceType 
定义为给定的设备IOCTL的类型。
微软使用的值的范围是0-0X7FFF;值0X800-0XFFF是由程序员自己定义。
下面的设备类型由系统定义的:

Method I/O访问内存使用方式

METHOD_BUFFERED   使用缓冲区方式操作
METHOD_IN_DIRECT  使用直接写方式操作
METHOD_OUT_DIRECT 使用直接读方式操作
METHOD_NEITHER    使用其他方式操作


Access 访问权限
下表显示了此参数的可能标志。该FILE_ACCESS_ANY通常是正确的值。

FILE_ANY_ACCESS Request all access. 
FILE_READ_ACCESS Request read access. Can be used with FILE_WRITE_ACCESS. 
FILE_WRITE_ACCESS Request write access. Can be used with FILE_READ_ACCESS.

Return Values(返回值)
None.

Remarks(备注)
宏可以被用来定义IOCTL和FSCTL功能控制代码。所有的IOCTL必须以这种方式定义,以确保由微软,OEM厂商,和IHV使用的值不重叠。
原文地址:https://www.cnblogs.com/IMyLife/p/4826170.html