/*++ Copyright (c) 1998 Microsoft Corporation Module Name: uspud.h Abstract: Contains structures and declarations for SPUD. SPUD stands for the Special Purpose Utility Driver. This driver enhances the performance of IIS. Author: John Ballard (jballard) 21-Oct-1996 Revision History: Keith Moore (keithmo) 02-Feb-1998 Merged with private\inc\spud.h. --*/ #ifndef _USPUD_H_ #define _USPUD_H_ #ifdef __cplusplus extern "C" { #endif // // The current SPUD interface version number. This number is passed by // the user-mode code into SPUDInitialize() and *must* match the number // expected by the driver. // // IIS4 (aka K2, NTOP 4.0, etc) shipped with version 0x00010000 // // NT5 will ship with 0x00020000 // #define SPUD_VERSION 0x00020000 // // Oplock break notification types. This is a bad attempt to make the // standard NTIO notification types more readable. // // SPUD_OPLOCK_BREAK_OPEN is issued after an oplock has been successfully // acquired and a subsequent open is issued on the target file. This is // our clue to close the file as soon as practicable. (The thread that issued // the subsequent open will remain blocked until our file handle is closed, // thus we must be expeditious in closing the handle.) // // SPUD_OPLOCK_BREAK_CLOSE is issued after an oplock has been successfully // acquired and the target file handle is closed. Think of this as // STATUS_CANCELLED for oplock IRPs. // #define SPUD_OPLOCK_BREAK_OPEN FILE_OPLOCK_BROKEN_TO_LEVEL_2 #define SPUD_OPLOCK_BREAK_CLOSE FILE_OPLOCK_BROKEN_TO_NONE // // Request type & context, used for batched (XxxAndRecv) APIs. // typedef enum { TransmitFileAndRecv, SendAndRecv } REQ_TYPE, *PREQ_TYPE; typedef struct _SPUD_REQ_CONTEXT { REQ_TYPE ReqType; IO_STATUS_BLOCK IoStatus1; IO_STATUS_BLOCK IoStatus2; PVOID KernelReqInfo; } SPUD_REQ_CONTEXT, *PSPUD_REQ_CONTEXT; // // File information returned by SPUDCreateFile(). // typedef struct _SPUD_FILE_INFORMATION { FILE_BASIC_INFORMATION BasicInformation; FILE_STANDARD_INFORMATION StandardInformation; } SPUD_FILE_INFORMATION, *PSPUD_FILE_INFORMATION; // // Activity counters. // typedef struct _SPUD_COUNTERS { ULONG CtrTransmitfileAndRecv; ULONG CtrTransRecvFastTrans; ULONG CtrTransRecvFastRecv; ULONG CtrTransRecvSlowTrans; ULONG CtrTransRecvSlowRecv; ULONG CtrSendAndRecv; ULONG CtrSendRecvFastSend; ULONG CtrSendRecvFastRecv; ULONG CtrSendRecvSlowSend; ULONG CtrSendRecvSlowRecv; } SPUD_COUNTERS, *PSPUD_COUNTERS; // // Exported APIs. // NTSTATUS NTAPI SPUDInitialize( IN ULONG Version, IN HANDLE hPort ); NTSTATUS NTAPI SPUDTerminate( VOID ); NTSTATUS NTAPI SPUDTransmitFileAndRecv( IN HANDLE hSocket, IN struct _AFD_TRANSMIT_FILE_INFO *transmitInfo, IN struct _AFD_RECV_INFO *recvInfo, IN PSPUD_REQ_CONTEXT reqContext ); NTSTATUS NTAPI SPUDSendAndRecv( IN HANDLE hSocket, IN struct _AFD_SEND_INFO *sendInfo, IN struct _AFD_RECV_INFO *recvInfo, IN PSPUD_REQ_CONTEXT reqContext ); NTSTATUS NTAPI SPUDCancel( IN PSPUD_REQ_CONTEXT reqContext ); NTSTATUS NTAPI SPUDGetCounts( OUT PSPUD_COUNTERS SpudCounts ); NTSTATUS NTAPI SPUDCreateFile( OUT PHANDLE FileHandle, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateOptions, IN SECURITY_INFORMATION SecurityInformation, OUT PSECURITY_DESCRIPTOR SecDescBuffer, IN ULONG SecDescLength, OUT PULONG SecDescLengthNeeded, IN PVOID OplockContext, IN LARGE_INTEGER OplockMaxFileSize, OUT PBOOLEAN OplockGranted, OUT PSPUD_FILE_INFORMATION FileInfo ); #ifdef __cplusplus } #endif #endif // _USPUD_H_