BOOL DeviceIoControl(
HANDLE hDevice, // handle to device
DWORD dwIoControlCode, // operation
LPVOID lpInBuffer, // input data buffer
DWORD nInBufferSize, // size of input data buffer
LPVOID lpOutBuffer, // output data buffer
DWORD nOutBufferSize, // size of output data buffer
LPDWORD lpBytesReturned, // byte count
LPOVERLAPPED lpOverlapped // overlapped information
);
hDevice 用CreateFile打开的设备句柄
HANDLE hDevice =
CreateFile("////.//HelloDDK",
GENERIC_READ | GENERIC_WRITE,
0, // share mode none
NULL, // no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
dwIoControlCode IO控制码
#define in_code CTL_CODE(FILE_DEVICE_UNKNOWN, 0x891, METHOD_BUFFERED,FILE_ANY_ACCESS)
CTL_CODE宏完成
lpInBuffer .输入的缓冲
size 缓冲大小
lpOutBuffer 由DeviceControl例程返回的缓冲
size 也是大小
lpBytesreturned 缓冲实际返回大小
LPOVERLAPPED 信息结构
---------------------------------------------------
关于返回值的问题,
一个由于缓冲区不够大的可以用GetLastError()获取,
详细查看msdn
二,驱动接收到Buffer 但是EXE接收到的大小为0
把程序对比了下发现...驱动详解的DeviceIoControlRoutine下
pIrp->IoStatus.Information=0,所以一直返回0,所以
pIrp->IoStatus.Information这个要设定返回的大小...