- Implement IOCTL_AFD_SET_INFO

- We currently disregard the value of BlockingMode so this causes no behavior change

svn path=/trunk/; revision=41833
This commit is contained in:
Cameron Gutman 2009-07-09 16:47:11 +00:00
parent 5571325492
commit e99d1fe3f9
3 changed files with 37 additions and 5 deletions

View file

@ -69,6 +69,35 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
return UnlockAndMaybeComplete( FCB, Status, Irp, 0 );
}
NTSTATUS NTAPI
AfdSetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp ) {
NTSTATUS Status = STATUS_SUCCESS;
PAFD_INFO InfoReq = IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext;
if (!SocketAcquireStateLock(FCB)) return LostSocket(Irp);
_SEH2_TRY {
switch (InfoReq->InformationClass) {
case AFD_INFO_BLOCKING_MODE:
AFD_DbgPrint(MID_TRACE,("Blocking mode set to %d\n", InfoReq->Information.Ulong));
FCB->BlockingMode = InfoReq->Information.Ulong;
break;
default:
AFD_DbgPrint(MIN_TRACE,("Unknown request %d\n", InfoReq->InformationClass));
break;
}
} _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {
Status = STATUS_INVALID_PARAMETER;
} _SEH2_END;
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
return UnlockAndMaybeComplete(FCB, Status, Irp, 0);
}
NTSTATUS NTAPI
AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp ) {

View file

@ -422,6 +422,9 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
case IOCTL_AFD_GET_INFO:
return AfdGetInfo( DeviceObject, Irp, IrpSp );
case IOCTL_AFD_SET_INFO:
return AfdSetInfo( DeviceObject, Irp, IrpSp );
case IOCTL_AFD_GET_CONTEXT:
return AfdGetContext( DeviceObject, Irp, IrpSp );
@ -447,10 +450,6 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
AFD_DbgPrint(MIN_TRACE, ("IOCTL_AFD_GET_TDI_HANDLES\n"));
break;
case IOCTL_AFD_SET_INFO:
AFD_DbgPrint(MIN_TRACE, ("IOCTL_AFD_SET_INFO\n"));
break;
case IOCTL_AFD_SET_CONNECT_DATA:
AFD_DbgPrint(MIN_TRACE, ("IOCTL_AFD_SET_CONNECT_DATA\n"));
break;

View file

@ -178,7 +178,7 @@ typedef struct _AFD_STORED_DATAGRAM {
typedef struct _AFD_FCB {
BOOLEAN Locked, Critical, Overread;
UINT State, Flags;
UINT State, Flags, BlockingMode;
KIRQL OldIrql;
UINT LockCount;
PVOID CurrentThread;
@ -236,6 +236,10 @@ NTSTATUS NTAPI
AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp );
NTSTATUS NTAPI
AfdSetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp );
NTSTATUS NTAPI
AfdGetSockName( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp );