|
|
/*++
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_
|