Hi Tim,
Thanks for your reply.I certainly accept this that i am a kid
before you expert people in this area .Please dont mind.
here is the code from driver part
//declaration
typedef ULONG (*PCALLBACK_ROUTINE)(UHORT,USHORT);
typedef struct _JIN_SD_DESIGNER_FDO_DATA
{
ULONG CallbackAddress;
PCALLBACK_ROUTINE KernelCallback;
}JIN_SD_DESIGNER_FDO_DATA, *PJIN_SD_DESIGNER_FDO_DATA;
NTSTATUS JinSdDesignerDispatchIoctl(IN PDEVICE_OBJECT pDeviceObject,IN
PIRP pIrp)
{
PIO_STACK_LOCATION pIrpStack;
NTSTATUS ntStatus= STATUS_SUCCESS;
PJIN_SD_DESIGNER_FDO_DATA pFdoData;
pFdoData = (PJIN_SD_DESIGNER_FDO_DATA) pDeviceObject->DeviceExtension;
pIrpStack = IoGetCurrentIrpStackLocation (pIrp);
switch(pIrpStack->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_SET_EVENT_HANDLE:
DbgPrint (“\nJinSdDesigner:\t IOCTL_SET_EVENT_HANDLE \n”);
pFdoData->CallbackAddress = ((ULONG*)
pIrpStack->Parameters.DeviceIoControl.Type3InputBuffer)[0];
pFdoData->KernelCallback = NULL;
pFdoData->KernelCallback = (PCALLBACK_ROUTINE) pFdoData->CallbackAddress;
if(pFdoData->KernelCallback == NULL)
{
DbgPrint (“\nJinSdDesigner:\t Invalid Function Pointer \n”);
DbgPrint(“\nJinSdDesigner:\t Error at File:- %s,\n Line:-( %d): \n”,
FILE, LINE);
pIrp->IoStatus.Information = 0;
ntStatus = STATUS_INVALID_USER_BUFFER;
goto EXIT;
}
DbgPrint(“\nJinSdDesigner:\t Valid Function Pointer\n”);
pIrp->IoStatus.Information = ntStatus;
break;
default:
ntStatus = STATUS_INVALID_DEVICE_REQUEST;
DbgPrint (“\nJinSdDesigner:\t Inside default case\n”);
}
EXIT:
pIrp->IoStatus.Status = ntStatus;
IoCompleteRequest (pIrp, IO_NO_INCREMENT);
DbgPrint (“\nJinSdDesigner:\t <— %s \n”,FUNCTION);
return ntStatus;
}
BOOLEAN JinSdDesignerInterruptHandler(IN PKINTERRUPT pkInterupt,IN PVOID
pVoidServiceContext)
{
PJIN_SD_DESIGNER_FDO_DATA pFdoData;
BOOLEAN bInterruptRecognized = FALSE;
pFdoData = (PJIN_SD_DESIGNER_FDO_DATA) pVoidServiceContext;
DbgPrint (“\nJinSdDesigner:\t %s—> \n”,FUNCTION);
if(bInterruptRecognized = JinSdDesignerAcknowledgeInterrupt(pFdoData))
IoRequestDpc(pFdoData->Self, NULL, pFdoData);
DbgPrint (“\nJinSdDesigner:\t <— %s \n”,FUNCTION);
return bInterruptRecognized;
}
VOID JinSdDesignerDpcForIsr(IN PKDPC pkDpc,IN PDEVICE_OBJECT
pDeviceObject,IN PIRP pIrpSystemArgument1,IN PVOID pVoidSystemArgument2)
{
PJIN_SD_DESIGNER_FDO_DATA pFdoData;
KIRQL CurIrql;
ULONG RetVal=0;
pFdoData = (PJIN_SD_DESIGNER_FDO_DATA) pDeviceObject->DeviceExtension;
DbgPrint (“\nJinSdDesigner:\t %s—> \n”,FUNCTION);
RetVal = 777;
DbgPrint(“\nJinSdDesigner:\t Before calling call back function\n”);
DbgPrint (“\nJinSdDesigner:\tCallback Function Return
value:-(%u)\n”,RetVal);
CurIrql = KeGetCurrentIrql();
KeLowerIrql(PASSIVE_LEVEL);
RetVal =
pFdoData->KernelCallback(pFdoData->usNormalInterruptRegisterData,pFdoData->usErrorInterruptRegisterData);
KeRaiseIrql(CurIrql,&CurIrql);
DbgPrint(“\nJinSdDesigner:\t After calling call back function\n”);
DbgPrint (“\nJinSdDesigner:\tCallback Function Return
value:-(%u)\n”,RetVal);
DbgPrint (“\nJinSdDesigner:\t <— %s \n”,FUNCTION);
}
if u need some more clarification please let me know.
i am very much keen to know the reason why i am getting BSOD for the second
time.
Best Regards
Nayan
MSN cricket features ‘Cricketer of the Month’
http://content.msn.co.in/Sports/Cricket/Default.aspx