/*++ Copyright (c) 1998 Microsoft Corporation Module Name: spudproc.h Abstract: This module contains routine prototypes for SPUD. Author: John Ballard (jballard) 21-Oct-1996 Revision History: --*/ #ifndef _SPUDPROCS_H_ #define _SPUDPROCS_H_ // // Driver entrypoint. // NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ); // // Initialization routines. // NTSTATUS SpudInitializeData( VOID ); // // IRP handlers. // NTSTATUS SpudIrpCreate( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpudIrpClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpudIrpCleanup( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS SpudIrpQuery( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); // // Completion port safety. // PVOID SpudReferenceCompletionPort( VOID ); VOID SpudDereferenceCompletionPort( VOID ); // // XxxAndRecv routines. // NTSTATUS SpudAfdRecvFastReq( PFILE_OBJECT fileObject, PAFD_RECV_INFO recvInfo, PSPUD_REQ_CONTEXT reqContext ); NTSTATUS SpudAfdContinueRecv( PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context ); NTSTATUS SpudAfdCompleteRecv( PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Context ); VOID SpudCompleteRequest( PSPUD_AFD_REQ_CONTEXT SpudReqContext ); NTSTATUS SpudInitializeContextManager( VOID ); VOID SpudTerminateContextManager( VOID ); NTSTATUS SpudAllocateRequestContext( OUT PSPUD_AFD_REQ_CONTEXT *SpudReqContext, IN PSPUD_REQ_CONTEXT ReqContext, IN PAFD_RECV_INFO RecvInfo OPTIONAL, IN PIRP Irp, IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL ); VOID SpudFreeRequestContext( IN PSPUD_AFD_REQ_CONTEXT SpudReqContext ); PSPUD_AFD_REQ_CONTEXT SpudGetRequestContext( IN PSPUD_REQ_CONTEXT ReqContext ); // // Service entry/exit routines. // NTSTATUS SpudEnterService( #if DBG IN PSTR ServiceName, #endif IN BOOLEAN InitRequired ); VOID SpudLeaveService( #if DBG IN PSTR ServiceName, IN NTSTATUS Status, #endif IN BOOLEAN DerefRequired ); #if DBG #define SPUD_ENTER_SERVICE( name, init ) \ SpudEnterService( (PSTR)(name), (BOOLEAN)(init) ) #define SPUD_LEAVE_SERVICE( name, status, deref ) \ SpudLeaveService( (PSTR)(name), (NTSTATUS)(status), (BOOLEAN)(deref) ) #else #define SPUD_ENTER_SERVICE( name, init ) \ SpudEnterService( (BOOLEAN)(init) ) #define SPUD_LEAVE_SERVICE( name, status, deref ) \ SpudLeaveService( (BOOLEAN)(deref) ) #endif // // Miscellaneous helper routines. // NTSTATUS SpudGetAfdDeviceObject( IN PFILE_OBJECT AfdFileObject ); // // Macros stolen from NTOS\IO\IOP.H. // //+ // // VOID // IopDequeueThreadIrp( // IN PIRP Irp // ) // // Routine Description: // // This routine dequeues the specified I/O Request Packet (IRP) from the // thread IRP queue which it is currently queued. // // Arguments: // // Irp - Specifies the IRP that is dequeued. // // Return Value: // // None. // //- #define IopDequeueThreadIrp( Irp ) { RemoveEntryList( &Irp->ThreadListEntry ); } //+ // VOID // IopQueueThreadIrp( // IN PIRP Irp // ) // // Routine Description: // // This routine queues the specified I/O Request Packet (IRP) to the thread // whose TCB address is stored in the packet. // // Arguments: // // Irp - Supplies the IRP to be queued for the specified thread. // // Return Value: // // None. // //- #define IopQueueThreadIrp( Irp ) { \ KIRQL irql; \ KeRaiseIrql( APC_LEVEL, &irql ); \ InsertHeadList( &Irp->Tail.Overlay.Thread->IrpList, \ &Irp->ThreadListEntry ); \ KeLowerIrql( irql ); \ } #endif // _SPUDPROCS_H_