+++ /dev/null
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: drivers/net/afd/afd/context.c
- * PURPOSE: Ancillary functions driver
- * PROGRAMMER: Art Yerkes (ayerkes@speakeasy.net)
- * UPDATE HISTORY:
- * 20040708 Created
- */
-
-#include "afd.h"
-
-NTSTATUS NTAPI
-AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp ) {
- NTSTATUS Status = STATUS_INVALID_PARAMETER;
- PFILE_OBJECT FileObject = IrpSp->FileObject;
- PAFD_FCB FCB = FileObject->FsContext;
- UINT ContextSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
-
- if( FCB->ContextSize < ContextSize ) ContextSize = FCB->ContextSize;
-
- if( FCB->Context ) {
- RtlCopyMemory( Irp->UserBuffer,
- FCB->Context,
- ContextSize );
- Status = STATUS_SUCCESS;
- }
-
- AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
-
- return UnlockAndMaybeComplete( FCB, Status, Irp, ContextSize );
-}
-
-NTSTATUS NTAPI
-AfdGetContextSize( PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp )
-{
- PFILE_OBJECT FileObject = IrpSp->FileObject;
- PAFD_FCB FCB = FileObject->FsContext;
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
-
- if (IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
- {
- AFD_DbgPrint(MIN_TRACE,("Buffer too small\n"));
- return UnlockAndMaybeComplete(FCB, STATUS_BUFFER_TOO_SMALL, Irp, sizeof(ULONG));
- }
-
- RtlCopyMemory(Irp->UserBuffer,
- &FCB->ContextSize,
- sizeof(ULONG));
-
- return UnlockAndMaybeComplete(FCB, STATUS_SUCCESS, Irp, sizeof(ULONG));
-}
-
-NTSTATUS NTAPI
-AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
- PIO_STACK_LOCATION IrpSp ) {
- PFILE_OBJECT FileObject = IrpSp->FileObject;
- PAFD_FCB FCB = FileObject->FsContext;
- PVOID Context = LockRequest(Irp, IrpSp, FALSE, NULL);
-
- UNREFERENCED_PARAMETER(DeviceObject);
-
- if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp );
-
- if (!Context)
- return UnlockAndMaybeComplete(FCB, STATUS_NO_MEMORY, Irp, 0);
-
- if( FCB->Context ) {
- ExFreePool( FCB->Context );
- FCB->ContextSize = 0;
- }
-
- FCB->Context = ExAllocatePool( PagedPool,
- IrpSp->Parameters.DeviceIoControl.InputBufferLength );
-
- if( !FCB->Context ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0 );
-
- FCB->ContextSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
-
- RtlCopyMemory( FCB->Context,
- Context,
- FCB->ContextSize );
-
- return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, 0 );
-}