WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig,
WdfIoQueueDispatchSequential);
//switch(bdatype.vals.tun){
// case AMC_BDA_DVBS:{
// ### There is no distinction in the instant need
ioQueueConfig.EvtIoDeviceControl = ttFilterEvtIoDeviceControl;
// break;
// }
//}
status = WdfIoQueueCreate(device,
&ioQueueConfig,
WDF_NO_OBJECT_ATTRIBUTES,
WDF_NO_HANDLE // pointer to default queue
);
switch(IoControlCode){
case 0x232004: //60 I2cRead
if(OutputBufferLength != 60){
ttFilterForwardRequest(Request, iotarget);
return;
};
byteReturn = 60;
status = WdfRequestRetrieveInputBuffer(Request, byteReturn, &pI2C, NULL);
if(NT_SUCCESS(status)) status = WdfRequestRetrieveOutputBuffer(Request, byteReturn, &pBuff, NULL);
if(NT_SUCCESS(status)) filterCallBrandFunction(I2CRead, status, filterExt, filterExt-\>bdatype.vals.brand, filterExt-\>bdatype.vals.bus, ttype, iotarget, pI2C);
if(NT_SUCCESS(status)) RtlMoveMemory(pBuff, pI2C, byteReturn);
break;
case 0x2320C0: //32 DebiSetup
//byteReturn=32;
//break;
case 0x2320C4: //32 DebiGetLastError
case 0x2320C8: //8 DebiOut8
case 0x2320CC: //8 DebiOut16 //No
case 0x2320D0: //8 DebiIn8
case 0x2320D4: //8 DebiIn16 //No
case 0x232100: //8 RegisterIRQ //No
case 0x232104: //8 UnRegisterIRQ //No
case 0x232140: //4 SetTSInputPort
status = STATUS_FAIL_CHECK;
break;
case IOCTL_KS_PROPERTY:
//###################################################################################
//KdBreakPoint();
status = WdfRequestRetrieveUnsafeUserInputBuffer(Request, 0, &pBuff, &byteReturn);
if(byteReturn \> 0) {
if(NT_SUCCESS(status)) status = WdfRequestProbeAndLockUserBufferForRead(Request, pBuff, byteReturn, &memBuff);
if(NT_SUCCESS(status)) pProp = WdfMemoryGetBuffer(memBuff, NULL);
RtlStringFromGUID(&pProp-\>Property.Set, &ucsGUID);
status = WdfRequestRetrieveUnsafeUserOutputBuffer(Request, 0, &pBuff, &byteReturn);
retProp =(long \*) &byteReturn;
if(byteReturn \> 0) {
if(NT_SUCCESS(status)) status = WdfRequestProbeAndLockUserBufferForRead(Request, pBuff, byteReturn, &memBuff);
if(NT_SUCCESS(status)) retProp = WdfMemoryGetBuffer(memBuff, NULL);
};
byteReturn=0;
KdPrint(("KSPopSet: %S, Id: %d, Flags: %d, Node: %d, Value: %d\n", ucsGUID.Buffer, pProp-\>Property.Id, pProp-\>Property.Flags, pProp-\>NodeId, \*retProp));
};
//status = WdfDeviceEnqueueRequest(device, Request);
//break;
////###################################################################################
case IOCTL_KS_ENABLE_EVENT: // Send all other knowed "KS" IOCTLs down to Device
case IOCTL_KS_DISABLE_EVENT:
case IOCTL_KS_METHOD:
case IOCTL_KS_WRITE_STREAM:
case IOCTL_KS_READ_STREAM:
case IOCTL_KS_RESET_STATE:
case IOCTL_KS_HANDSHAKE:
default:
ttFilterForwardRequest(Request, iotarget);
return;
};
if (!NT_SUCCESS(status)) {
DbgPrint("FilterEvtIoDeviceControl: %X failed with : 0x%X\n", IoControlCode, status);
WdfRequestComplete(Request, status);
return;
}
WdfRequestCompleteWithInformation(Request, status, byteReturn);
return;