windows-nt/Source/XPSP1/NT/inetsrv/iis/inc/uspud.h
2020-09-26 16:20:57 +08:00

187 lines
3.8 KiB
C

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