驱动层:
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
//得到输入缓冲区大小
ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;
//得到输出缓冲区大小
ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength;
//得到IOCTL码
ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;
CTL_CODE(DeviceType, Function, Method, Access) //ntddk.h
Method:
METHOD_BUFFERED //buffer mode
METHOD_IN_DIRECT or METHOD_OUT_DIRECT //直接映射地址
METHOD_NEITHER
如果为 METHOD_IN_DIRECT or METHOD_OUT_DIRECT,输入和BUFFER模式一样,但是输出就不再是输入那个地址,而是
采用MmGetSystemAddressForMdlSafe IN PMDL Mdl,