16 if (
FCB->ReceiveIrp.InFlightRequest)
return;
19 if (
FCB->TdiReceiveClosed)
return;
22 if (
FCB->Recv.Content ==
FCB->Recv.Size)
25 if (
FCB->Recv.BytesUsed != 0)
29 FCB->Recv.Window +
FCB->Recv.BytesUsed,
30 FCB->Recv.Content -
FCB->Recv.BytesUsed);
32 FCB->Recv.Content -=
FCB->Recv.BytesUsed;
33 FCB->Recv.BytesUsed = 0;
45 FCB->Connection.Object,
47 FCB->Recv.Window +
FCB->Recv.Content,
48 FCB->Recv.Size -
FCB->Recv.Content,
58 if (
FCB->TdiReceiveClosed)
89 UINT BytesAvailable =
FCB->Recv.Content -
FCB->Recv.BytesUsed;
91 return !BytesAvailable &&
FCB->TdiReceiveClosed;
96 PUINT TotalBytesCopied ) {
99 FCB->Recv.Content -
FCB->Recv.BytesUsed;
101 *TotalBytesCopied = 0;
127 Map[
i].BufferAddress,
131 FCB->Recv.Window + FcbBytesCopied,
156 UINT TotalBytesCopied = 0;
188 NextIrp->IoStatus.Status =
Status;
189 NextIrp->IoStatus.Information = 0;
214 (
FCB, RecvReq, &TotalBytesCopied );
219 &NextIrp->Tail.Overlay.ListEntry);
226 NextIrp->IoStatus.Status =
Status;
227 NextIrp->IoStatus.Information = TotalBytesCopied;
228 if( NextIrp ==
Irp ) {
238 if(
FCB->Recv.Content -
FCB->Recv.BytesUsed &&
287 FCB->ReceiveIrp.InFlightRequest =
NULL;
297 NextIrp->IoStatus.Information = 0;
323 PUINT TotalBytesCopied ) {
343 if( ExtraBuffers && Map[1].Mdl && Map[2].Mdl ) {
349 (
"Wierd address count %d\n",
374 *((
PINT)Map[2].BufferAddress) = AddrLen;
384 Map[0].BufferAddress,
396 if (*TotalBytesCopied == DatagramRecv->
Len)
407 Irp->IoStatus.Information = *TotalBytesCopied;
411 FCB->Recv.Content -= DatagramRecv->
Len;
428 UINT TotalBytesCopied = 0;
512 Irp->IoStatus.Information = 0;
515 &
Irp->Tail.Overlay.ListEntry );
526 TotalBytesCopied = 0;
566 FCB->ReceiveIrp.InFlightRequest =
NULL;
576 NextIrp->IoStatus.Information = 0;
598 return Irp->IoStatus.Status;
601 if (
FCB->TdiReceiveClosed)
612 DatagramRecv->
Len =
Irp->IoStatus.Information;
616 FCB->AddressFrom->RemoteAddress));
634 FCB->Recv.Content += DatagramRecv->
Len;
652 RecvReq, DatagramRecv));
656 (
FCB, NextIrp, DatagramRecv,
657 (
PUINT)&NextIrp->IoStatus.Information );
671 NextIrp->IoStatus.Status =
Status;
687 ( &
FCB->ReceiveIrp.InFlightRequest,
688 FCB->AddressFile.Object,
728 if (
FCB->TdiReceiveClosed)
VOID SocketStateUnlock(PAFD_FCB FCB)
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
VOID PollReeval(PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
NTSTATUS NTAPI AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
#define UNREFERENCED_PARAMETER(P)
#define STATUS_INVALID_PARAMETER
#define AFD_EVENT_DISCONNECT
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
PAFD_WSABUF LockBuffers(PAFD_WSABUF Buf, UINT Count, PVOID AddressBuf, PINT AddressLen, BOOLEAN Write, BOOLEAN LockAddress, KPROCESSOR_MODE LockMode)
PVOID LockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Output, KPROCESSOR_MODE *LockMode)
#define TAG_AFD_TRANSPORT_ADDRESS
BOOLEAN SocketAcquireStateLock(PAFD_FCB FCB)
static NTSTATUS TryToSatisfyRecvRequestFromBuffer(PAFD_FCB FCB, PAFD_RECV_INFO RecvReq, PUINT TotalBytesCopied)
NTSTATUS NTAPI UnlockAndMaybeComplete(PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information)
#define InsertTailList(ListHead, Entry)
IoSetCancelRoutine(Irp, CancelRoutine)
#define EXTRA_LOCK_BUFFERS
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
PVOID NTAPI MmMapLockedPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode)
_In_ UINT _In_ UINT BytesToCopy
#define RtlMoveMemory(Destination, Source, Length)
static BOOLEAN CantReadMore(PAFD_FCB FCB)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define TDI_RECEIVE_NORMAL
#define AFD_ENDPOINT_CONNECTIONLESS
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static NTSTATUS ReceiveActivity(PAFD_FCB FCB, PIRP Irp)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSTATUS TdiReceive(PIRP *Irp, PFILE_OBJECT TransportObject, USHORT Flags, PCHAR Buffer, UINT BufferLength, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
VOID NTAPI MmUnmapLockedPages(IN PVOID BaseAddress, IN PMDL Mdl)
#define AFD_DbgPrint(_t_, _x_)
#define AFD_EVENT_RECEIVE
#define IoCompleteRequest
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
static VOID RefillSocketBuffer(PAFD_FCB FCB)
_Inout_ PFILE_OBJECT FileObject
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
#define IO_NETWORK_INCREMENT
NTSTATUS NTAPI ReceiveComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
struct _AFD_FCB * PAFD_FCB
NTSTATUS LeaveIrpUntilLater(PAFD_FCB FCB, PIRP Irp, UINT Function)
#define NT_SUCCESS(StatCode)
VOID UnlockRequest(PIRP Irp, PIO_STACK_LOCATION IrpSp)
#define SOCKET_STATE_CONNECTED
VOID UnlockBuffers(PAFD_WSABUF Buf, UINT Count, BOOL Address)
struct _AFD_MAPBUF * PAFD_MAPBUF
PVOID GetLockedData(PIRP Irp, PIO_STACK_LOCATION IrpSp)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define ExAllocatePoolWithTag(hernya, size, tag)
NTSTATUS TdiReceiveDatagram(PIRP *Irp, PFILE_OBJECT TransportObject, USHORT Flags, PCHAR Buffer, UINT BufferLength, PTDI_CONNECTION_INFORMATION Addr, PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext)
static VOID HandleReceiveComplete(PAFD_FCB FCB, NTSTATUS Status, ULONG_PTR Information)
NTSTATUS NTAPI PacketSocketRecvComplete(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context)
IN PDEVICE_OBJECT DeviceObject
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
PTRANSPORT_ADDRESS Address
#define STATUS_BUFFER_OVERFLOW
#define STATUS_ACCESS_VIOLATION
NTSTATUS LostSocket(PIRP Irp)
_In_ PIO_STACK_LOCATION IrpSp
static NTSTATUS NTAPI SatisfyPacketRecvRequest(PAFD_FCB FCB, PIRP Irp, PAFD_STORED_DATAGRAM DatagramRecv, PUINT TotalBytesCopied)
#define SOCKET_STATE_LISTENING
#define SOCKET_STATE_BOUND
struct tagContext Context
#define SOCKET_STATE_CONNECTING
#define SOCKET_STATE_CLOSED
PTRANSPORT_ADDRESS TaCopyTransportAddress(PTRANSPORT_ADDRESS OtherAddress)
#define TAG_AFD_STORED_DATAGRAM
#define ExFreePoolWithTag(_P, _T)
BOOLEAN CheckUnlockExtraBuffers(PAFD_FCB FCB, PIO_STACK_LOCATION IrpSp)
struct _AFD_STORED_DATAGRAM AFD_STORED_DATAGRAM
NTSTATUS NTAPI AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN Short)
DRIVER_CANCEL AfdCancelHandler
#define STATUS_FILE_CLOSED