647 lines
20 KiB
C
647 lines
20 KiB
C
/*++ BUILD Version: 0001 // Increment this if a change has global effects
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
srvfsctl.h
|
|
|
|
Abstract:
|
|
|
|
This module defines I/O control codes and structures for the File
|
|
System Driver of the LAN Manager server.
|
|
|
|
Author:
|
|
|
|
David Treadwell (davidtr) 22-May-1990
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _SRVFSCTL_
|
|
#define _SRVFSCTL_
|
|
|
|
|
|
//
|
|
// The name of the server device.
|
|
//
|
|
|
|
#define SERVER_DEVICE_NAME TEXT("\\Device\\LanmanServer")
|
|
|
|
//
|
|
// IRP control codes used to send requests to the server. These are
|
|
// used as parameters to NtFsControlFile, and may be found in
|
|
// Irp->Parameters.FsControl.FsControlCode in the server dispatch
|
|
// routine.
|
|
//
|
|
// Note that the low two bits of this code indicate the "method" in
|
|
// which the IO system uses the buffers passed by the user to
|
|
// NtFsControlFile. We use method 0--normal, buffered output (not
|
|
// DMA)--for non-API requests, and method 3--"neither" IO--for API
|
|
// requests that get processed in the server FSD. For the APIs
|
|
// that are processed in the server FSP, use method 0.
|
|
//
|
|
// !!! Add more as necessary.
|
|
|
|
#define FSCTL_SRV_BASE FILE_DEVICE_NETWORK
|
|
#define FSCTL_SRV_API 1 << 11
|
|
|
|
#define _SRV_CONTROL_CODE(request,method) \
|
|
((FSCTL_SRV_BASE)<<12 | (request<<2) | method)
|
|
|
|
#define _SRV_API_CONTROL_CODE(request) \
|
|
((FSCTL_SRV_BASE)<<12 | FSCTL_SRV_API | (request<<2) | METHOD_NEITHER )
|
|
|
|
#define SRV_API_INDEX(code) \
|
|
((code & ~(0xFFFFF000 | FSCTL_SRV_API)) >> 2)
|
|
|
|
//
|
|
// Standard FSCTLs.
|
|
//
|
|
|
|
#define FSCTL_SRV_STARTUP _SRV_CONTROL_CODE( 0, METHOD_NEITHER )
|
|
#define FSCTL_SRV_SHUTDOWN _SRV_CONTROL_CODE( 1, METHOD_NEITHER )
|
|
#define FSCTL_SRV_CLEAR_STATISTICS _SRV_CONTROL_CODE( 2, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_GET_STATISTICS _SRV_CONTROL_CODE( 3, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_SET_DEBUG _SRV_CONTROL_CODE( 4, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_XACTSRV_CONNECT _SRV_CONTROL_CODE( 5, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_SEND_DATAGRAM _SRV_CONTROL_CODE( 6, METHOD_NEITHER )
|
|
#define FSCTL_SRV_SET_PASSWORD_SERVER _SRV_CONTROL_CODE( 7, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_START_SMBTRACE _SRV_CONTROL_CODE( 8, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_SMBTRACE_FREE_SMB _SRV_CONTROL_CODE( 9, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_END_SMBTRACE _SRV_CONTROL_CODE( 10, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_QUERY_CONNECTIONS _SRV_CONTROL_CODE( 11, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_PAUSE _SRV_CONTROL_CODE( 12, METHOD_NEITHER )
|
|
#define FSCTL_SRV_CONTINUE _SRV_CONTROL_CODE( 13, METHOD_NEITHER )
|
|
#define FSCTL_SRV_GET_CHALLENGE _SRV_CONTROL_CODE( 14, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_GET_DEBUG_STATISTICS _SRV_CONTROL_CODE( 15, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_XACTSRV_DISCONNECT _SRV_CONTROL_CODE( 16, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_REGISTRY_CHANGE _SRV_CONTROL_CODE( 17, METHOD_NEITHER )
|
|
#define FSCTL_SRV_GET_QUEUE_STATISTICS _SRV_CONTROL_CODE( 18, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_SHARE_STATE_CHANGE _SRV_CONTROL_CODE( 19, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_BEGIN_PNP_NOTIFICATIONS _SRV_CONTROL_CODE(20, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_CHANGE_DOMAIN_NAME _SRV_CONTROL_CODE( 21, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_INTERNAL_TEST_REAUTH _SRV_CONTROL_CODE( 22, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_CHANGE_DNS_DOMAIN_NAME _SRV_CONTROL_CODE( 23, METHOD_BUFFERED )
|
|
#define FSCTL_SRV_ENUMERATE_SNAPSHOTS _SRV_CONTROL_CODE( 24, METHOD_BUFFERED )
|
|
|
|
//
|
|
// The following FSCTL can be issued by a kernel driver to hook into the server
|
|
// for accelerated direct host IPX performance. A pointer to an SRV_IPX_SMART_CARD
|
|
// structure is given for the START fsctl as the InputBuffer.
|
|
|
|
#define FSCTL_SRV_IPX_SMART_CARD_START _SRV_CONTROL_CODE( 21, METHOD_NEITHER )
|
|
|
|
//
|
|
// API FSCTLs.
|
|
//
|
|
// *** The order of these must match the order of API processors in
|
|
// the SrvApiDispatchTable jump table defined in ntos\srv\srvdata.c!
|
|
|
|
#define FSCTL_SRV_NET_CONNECTION_ENUM _SRV_API_CONTROL_CODE( 0 )
|
|
#define FSCTL_SRV_NET_FILE_CLOSE _SRV_API_CONTROL_CODE( 1 )
|
|
#define FSCTL_SRV_NET_FILE_ENUM _SRV_API_CONTROL_CODE( 2 )
|
|
#define FSCTL_SRV_NET_SERVER_DISK_ENUM _SRV_API_CONTROL_CODE( 3 )
|
|
#define FSCTL_SRV_NET_SERVER_SET_INFO _SRV_API_CONTROL_CODE( 4 )
|
|
#define FSCTL_SRV_NET_SERVER_XPORT_ADD _SRV_API_CONTROL_CODE( 5 )
|
|
#define FSCTL_SRV_NET_SERVER_XPORT_DEL _SRV_API_CONTROL_CODE( 6 )
|
|
#define FSCTL_SRV_NET_SERVER_XPORT_ENUM _SRV_API_CONTROL_CODE( 7 )
|
|
#define FSCTL_SRV_NET_SESSION_DEL _SRV_API_CONTROL_CODE( 8 )
|
|
#define FSCTL_SRV_NET_SESSION_ENUM _SRV_API_CONTROL_CODE( 9 )
|
|
#define FSCTL_SRV_NET_SHARE_ADD _SRV_API_CONTROL_CODE( 10 )
|
|
#define FSCTL_SRV_NET_SHARE_DEL _SRV_API_CONTROL_CODE( 11 )
|
|
#define FSCTL_SRV_NET_SHARE_ENUM _SRV_API_CONTROL_CODE( 12 )
|
|
#define FSCTL_SRV_NET_SHARE_SET_INFO _SRV_API_CONTROL_CODE( 13 )
|
|
#define FSCTL_SRV_NET_STATISTICS_GET _SRV_API_CONTROL_CODE( 14 )
|
|
#define FSCTL_SRV_MAX_API_CODE FSCTL_SRV_NET_STATISTICS_GET
|
|
|
|
//
|
|
// Startup information level
|
|
//
|
|
|
|
#define SS_STARTUP_LEVEL -1L
|
|
|
|
#ifdef INCLUDE_SRV_IPX_SMART_CARD_INTERFACE
|
|
|
|
//
|
|
// Structure passed to the srv via the FSCTL_SRV_IPX_SMART_CARD_START call by an
|
|
// intelligent direct host IPX card. The Smart card fills in its own
|
|
// Open, Close, Read, and DeRegister entry points - which the server
|
|
// calls at the appropriate times. The server fills in its own
|
|
// ReadComplete entry point which the smart card calls when it is done
|
|
// transferring the data to the client.
|
|
//
|
|
typedef struct {
|
|
//
|
|
// This routine is called by the server when it is opening a file on
|
|
// behalf of a direct host IPX client. It gives the smart card a chance
|
|
// to decide it it wants to help with file access. If the smart card is
|
|
// interested, it should return TRUE and set SmartCardContext to a
|
|
// non-zero value of its choice.
|
|
//
|
|
BOOLEAN (* Open)(
|
|
IN PVOID SmbHeader, // Points to request PNT_SMB_HEADER
|
|
IN PFILE_OBJECT FileObject, // FileObject opened by the client
|
|
IN PUNICODE_STRING FileName, // Name of the file opened by the client
|
|
IN PTDI_ADDRESS_IPX IpxAddress, // Address of the client
|
|
IN ULONG Flags, // FO_CACHE_SUPPORTED (for now)
|
|
OUT PVOID *SmartCardContext // Context value returned by this routine
|
|
);
|
|
|
|
//
|
|
// This is called by the server when the file is being closed. The context
|
|
// value received at Open time is passed to this routine.
|
|
//
|
|
VOID ( * Close )(
|
|
IN PVOID SmartCardContext // Same context returned by Open() above
|
|
);
|
|
|
|
//
|
|
// This is called by the server to see if the smart card wishes to handle the
|
|
// client's read request. If the card is handling the read, it should return
|
|
// TRUE and the server will discontinue processing the read. When the card is
|
|
// finished handling the read, it must call ReadComplete (below) to inform the
|
|
// server. If Read returns FALSE, the server handles the read as usual.
|
|
//
|
|
BOOLEAN ( * Read )(
|
|
IN PVOID SmbHeader, // Points to request PNT_SMB_HEADER
|
|
IN PVOID SmartCardContext, // Same context returned by Open() above
|
|
IN ULONG Key, // Key value needed to read through locks
|
|
IN PVOID SrvContext // Opaque value provided by the server
|
|
);
|
|
|
|
//
|
|
// This is the server's entry point which the smart card must call when it is
|
|
// finished handling the Read request (above).
|
|
//
|
|
VOID ( * ReadComplete )(
|
|
IN PVOID SrvContext, // Same as SrvContext in Read() above
|
|
IN PFILE_OBJECT FileObject, // Client FileObject to which this applies
|
|
IN PMDL Mdl OPTIONAL, // Mdl smart card is now finished with
|
|
IN ULONG Length // Length of data indicated by the MDL
|
|
);
|
|
|
|
//
|
|
// This is called by the server when the server wishes to disconnect from the
|
|
// card. Once this returns, the card should not call back into the server.
|
|
//
|
|
VOID ( *DeRegister )(
|
|
VOID
|
|
);
|
|
|
|
|
|
} SRV_IPX_SMART_CARD, *PSRV_IPX_SMART_CARD;
|
|
|
|
#endif
|
|
|
|
//
|
|
// SMB_STATISTICS holds the count of SMBs and total turn around for a
|
|
// class of SMBs. For example, a single SMB_STATISTIC structure could
|
|
// hold information about all read SMBs: Read, ReadAndX, ReadRaw,
|
|
// and ReadMultiplexed.
|
|
//
|
|
|
|
typedef struct _SMB_STATISTICS {
|
|
LARGE_INTEGER TotalTurnaroundTime;
|
|
ULONG SmbCount;
|
|
} SMB_STATISTICS, *PSMB_STATISTICS;
|
|
|
|
//
|
|
// Used to record the number of times something happened and some
|
|
// pertinent time measure.
|
|
//
|
|
|
|
typedef struct _SRV_TIMED_COUNTER {
|
|
LARGE_INTEGER Time;
|
|
ULONG Count;
|
|
} SRV_TIMED_COUNTER, *PSRV_TIMED_COUNTER;
|
|
|
|
//
|
|
// SRV_POOL_STATISTICS is used for tracking server pool usage, paged and
|
|
// nonpaged. It is only enabled with SRVDBG2 and is controlled in the
|
|
// server module heapmgr.c.
|
|
//
|
|
|
|
typedef struct _SRV_POOL_STATISTICS {
|
|
ULONG TotalBlocksAllocated;
|
|
ULONG TotalBytesAllocated;
|
|
ULONG TotalBlocksFreed;
|
|
ULONG TotalBytesFreed;
|
|
ULONG BlocksInUse;
|
|
ULONG BytesInUse;
|
|
ULONG MaxBlocksInUse;
|
|
ULONG MaxBytesInUse;
|
|
} SRV_POOL_STATISTICS, *PSRV_POOL_STATISTICS;
|
|
|
|
//
|
|
// BLOCK_COUNTS is used to maintain statistics on server block types
|
|
//
|
|
|
|
typedef struct _BLOCK_COUNTS {
|
|
ULONG Allocations;
|
|
ULONG Closes;
|
|
ULONG Frees;
|
|
} BLOCK_COUNTS, *PBLOCK_COUNTS;
|
|
|
|
#define MAX_NON_TRANS_SMB 0x84
|
|
|
|
#ifndef TRANS2_MAX_FUNCTION
|
|
#define TRANS2_MAX_FUNCTION 0x11
|
|
#endif
|
|
|
|
#define MAX_STATISTICS_SMB MAX_NON_TRANS_SMB + TRANS2_MAX_FUNCTION + 1
|
|
|
|
//
|
|
// SRV_STATISTICS is the structure returned to the FSCTL_GET_STATISTICS
|
|
// fsctl.
|
|
//
|
|
|
|
typedef struct _SRV_STATISTICS {
|
|
|
|
//
|
|
// The time at which statistics gathering began (or stats were last
|
|
// cleared).
|
|
//
|
|
|
|
TIME StatisticsStartTime;
|
|
|
|
//
|
|
// Large integer counts of bytes received and sent
|
|
//
|
|
|
|
LARGE_INTEGER TotalBytesReceived;
|
|
LARGE_INTEGER TotalBytesSent;
|
|
|
|
//
|
|
// Causes of session termination
|
|
//
|
|
|
|
ULONG SessionLogonAttempts;
|
|
ULONG SessionsTimedOut;
|
|
ULONG SessionsErroredOut;
|
|
ULONG SessionsLoggedOff;
|
|
ULONG SessionsForcedLogOff;
|
|
|
|
//
|
|
// Misc. Errors
|
|
//
|
|
|
|
ULONG LogonErrors;
|
|
ULONG AccessPermissionErrors;
|
|
ULONG GrantedAccessErrors;
|
|
ULONG SystemErrors;
|
|
ULONG BlockingSmbsRejected;
|
|
ULONG WorkItemShortages;
|
|
|
|
//
|
|
// Cumulative counts of various statistics. Note that when stats are
|
|
// cleared, those "Total" fields which have a "Current" equivalent
|
|
// are set to the "Current" value to avoid situations where the
|
|
// current count is greater than the total.
|
|
//
|
|
|
|
ULONG TotalFilesOpened;
|
|
|
|
ULONG CurrentNumberOfOpenFiles;
|
|
ULONG CurrentNumberOfSessions;
|
|
ULONG CurrentNumberOfOpenSearches;
|
|
|
|
//
|
|
// Memory usage stats we want to xport
|
|
//
|
|
|
|
ULONG CurrentNonPagedPoolUsage;
|
|
ULONG NonPagedPoolFailures;
|
|
ULONG PeakNonPagedPoolUsage;
|
|
|
|
ULONG CurrentPagedPoolUsage;
|
|
ULONG PagedPoolFailures;
|
|
ULONG PeakPagedPoolUsage;
|
|
|
|
|
|
//
|
|
// Used to record the number of times work context blocks were placed
|
|
// on the server's FSP queue and the total amount of time they spent
|
|
// there.
|
|
//
|
|
|
|
SRV_TIMED_COUNTER TotalWorkContextBlocksQueued;
|
|
|
|
ULONG CompressedReads;
|
|
ULONG CompressedReadsRejected;
|
|
ULONG CompressedReadsFailed;
|
|
|
|
ULONG CompressedWrites;
|
|
ULONG CompressedWritesRejected;
|
|
ULONG CompressedWritesFailed;
|
|
ULONG CompressedWritesExpanded;
|
|
|
|
} SRV_STATISTICS, *PSRV_STATISTICS;
|
|
|
|
//
|
|
// Per work-queue statistics for the server. There is a workqueue for each
|
|
// processor in the system for nonblocking work, and a single workqueue for
|
|
// blocking work.
|
|
//
|
|
// These statistics are retrieved via FSCTL_SRV_GET_QUEUE_STATISTICS to the
|
|
// server driver. For an N-processor system, the first N structs are per-processor,
|
|
// the N+1'th struct is for the blocking work queue.
|
|
//
|
|
typedef struct _SRV_QUEUE_STATISTICS {
|
|
ULONG QueueLength; // current length of the workitem queue
|
|
ULONG ActiveThreads; // # of threads currently servicing requests
|
|
ULONG AvailableThreads; // # of threads waiting for work
|
|
ULONG FreeWorkItems; // # of free work items
|
|
ULONG StolenWorkItems; // # of work items taken from this free list
|
|
// by another queue
|
|
ULONG NeedWorkItem; // # of work items we are currently short for this queue
|
|
ULONG CurrentClients; // # of clients being serviced by this queue
|
|
LARGE_INTEGER BytesReceived; // # of bytes in from the network to clients on this queue
|
|
LARGE_INTEGER BytesSent; // # of bytes sent to the network from clients on this queue
|
|
LARGE_INTEGER ReadOperations; // # file read operations by clients on this queue
|
|
LARGE_INTEGER BytesRead; // # of data bytes read from files by clients on this queue
|
|
LARGE_INTEGER WriteOperations; // # of file write ops by clients on this queue
|
|
LARGE_INTEGER BytesWritten; // # of data bytes written to files by clients on this queue
|
|
SRV_TIMED_COUNTER TotalWorkContextBlocksQueued; // as above, but per-queue
|
|
|
|
} SRV_QUEUE_STATISTICS, *PSRV_QUEUE_STATISTICS;
|
|
|
|
//
|
|
// SRV_STATISTICS_DEBUG is the structure used for the
|
|
// FSCTL_SRV_GET_DEBUG_STATISTICS fsctl. This structure is valid
|
|
// only when SRVDBG3 is set.
|
|
//
|
|
|
|
typedef struct _SRV_STATISTICS_DEBUG {
|
|
|
|
//
|
|
// Large integer counts of bytes read and written.
|
|
//
|
|
|
|
LARGE_INTEGER TotalBytesRead;
|
|
LARGE_INTEGER TotalBytesWritten;
|
|
|
|
//
|
|
// Raw reads and writes statistics
|
|
//
|
|
|
|
ULONG RawWritesAttempted;
|
|
ULONG RawWritesRejected;
|
|
ULONG RawReadsAttempted;
|
|
ULONG RawReadsRejected;
|
|
|
|
//
|
|
// Cumulative count of time spent opening files and closing handles.
|
|
//
|
|
|
|
LARGE_INTEGER TotalIoCreateFileTime;
|
|
LARGE_INTEGER TotalNtCloseTime;
|
|
|
|
ULONG TotalHandlesClosed;
|
|
ULONG TotalOpenAttempts;
|
|
ULONG TotalOpensForPathOperations;
|
|
ULONG TotalOplocksGranted;
|
|
ULONG TotalOplocksDenied;
|
|
ULONG TotalOplocksBroken;
|
|
ULONG OpensSatisfiedWithCachedRfcb;
|
|
|
|
ULONG FastLocksAttempted;
|
|
ULONG FastLocksFailed;
|
|
ULONG FastReadsAttempted;
|
|
ULONG FastReadsFailed;
|
|
ULONG FastUnlocksAttempted;
|
|
ULONG FastUnlocksFailed;
|
|
ULONG FastWritesAttempted;
|
|
ULONG FastWritesFailed;
|
|
|
|
ULONG DirectSendsAttempted;
|
|
|
|
ULONG LockViolations;
|
|
ULONG LockDelays;
|
|
|
|
ULONG CoreSearches;
|
|
ULONG CompleteCoreSearches;
|
|
|
|
//
|
|
// information about block types
|
|
//
|
|
|
|
BLOCK_COUNTS ConnectionInfo;
|
|
BLOCK_COUNTS EndpointInfo;
|
|
BLOCK_COUNTS LfcbInfo;
|
|
BLOCK_COUNTS MfcbInfo;
|
|
BLOCK_COUNTS RfcbInfo;
|
|
BLOCK_COUNTS SearchInfo;
|
|
BLOCK_COUNTS SessionInfo;
|
|
BLOCK_COUNTS ShareInfo;
|
|
BLOCK_COUNTS TransactionInfo;
|
|
BLOCK_COUNTS TreeConnectInfo;
|
|
BLOCK_COUNTS WorkContextInfo;
|
|
BLOCK_COUNTS WaitForOplockBreakInfo;
|
|
|
|
//
|
|
// Statistics for different read and write sizes. Each element of
|
|
// the array corresponds to a range of IO sizes; see srv\smbsupp.c
|
|
// for exact correspondences.
|
|
//
|
|
|
|
SMB_STATISTICS ReadSize[17];
|
|
SMB_STATISTICS WriteSize[17];
|
|
|
|
//
|
|
// Statistics for each SMB type by command code.
|
|
//
|
|
|
|
SMB_STATISTICS Smb[MAX_STATISTICS_SMB+2+TRANS2_MAX_FUNCTION+1];
|
|
|
|
struct {
|
|
ULONG Depth;
|
|
ULONG Threads;
|
|
ULONG ItemsQueued;
|
|
ULONG MaximumDepth;
|
|
} QueueStatistics[3];
|
|
|
|
} SRV_STATISTICS_DEBUG, *PSRV_STATISTICS_DEBUG;
|
|
|
|
//
|
|
// SET DEBUG input and output structure. Contains off/on masks for SrvDebug
|
|
// and SmbDebug. The off mask is applied first, then the on mask is
|
|
// applied. To set the entire mask to a specific value, set the off
|
|
// mask to all ones, and set the on mask to the desired value. To leave
|
|
// a mask unchanged, set both masks to 0. SET DEBUG is also used
|
|
// to modify other server heuristics. HeuristicsChangeMask is used to
|
|
// indicate which heuristics are being changed.
|
|
//
|
|
// On output, the structure is presented in such a way as to allow the
|
|
// original values to be restored easily. The output data is simply
|
|
// passed back as input data.
|
|
//
|
|
|
|
typedef struct _FSCTL_SRV_SET_DEBUG_IN_OUT {
|
|
ULONG SrvDebugOff;
|
|
ULONG SrvDebugOn;
|
|
ULONG SmbDebugOff;
|
|
ULONG SmbDebugOn;
|
|
ULONG CcDebugOff;
|
|
ULONG CcDebugOn;
|
|
ULONG PbDebugOff;
|
|
ULONG PbDebugOn;
|
|
ULONG FatDebugOff;
|
|
ULONG FatDebugOn;
|
|
ULONG HeuristicsChangeMask;
|
|
ULONG MaxCopyReadLength;
|
|
ULONG MaxCopyWriteLength;
|
|
ULONG DumpVerbosity;
|
|
ULONG DumpRawLength;
|
|
BOOLEAN EnableOplocks;
|
|
BOOLEAN EnableFcbOpens;
|
|
BOOLEAN EnableSoftCompatibility;
|
|
BOOLEAN EnableRawMode;
|
|
BOOLEAN EnableDpcLevelProcessing;
|
|
BOOLEAN EnableMdlIo;
|
|
BOOLEAN EnableFastIo;
|
|
BOOLEAN DumpRequests;
|
|
BOOLEAN DumpResponses;
|
|
} FSCTL_SRV_SET_DEBUG_IN_OUT, *PFSCTL_SRV_SET_DEBUG_IN_OUT;
|
|
|
|
//
|
|
// Bit assignments for server heuristics change mask. The first group
|
|
// contains those that are values, while the second group contains those
|
|
// that are booleans.
|
|
//
|
|
|
|
#define SRV_HEUR_MAX_COPY_READ 0x00000001
|
|
#define SRV_HEUR_MAX_COPY_WRITE 0x00000002
|
|
#define SRV_HEUR_DUMP_VERBOSITY 0x00000004
|
|
#define SRV_HEUR_DUMP_RAW_LENGTH 0x00000008
|
|
|
|
#define SRV_HEUR_OPLOCKS 0x00010000
|
|
#define SRV_HEUR_FCB_OPENS 0x00020000
|
|
#define SRV_HEUR_SOFT_COMPATIBILITY 0x00040000
|
|
#define SRV_HEUR_RAW_MODE 0x00080000
|
|
#define SRV_HEUR_DPC_LEVEL_PROCESSING 0x00100000
|
|
#define SRV_HEUR_MDL_IO 0x00200000
|
|
#define SRV_HEUR_FAST_IO 0x00400000
|
|
#define SRV_HEUR_DUMP_REQUESTS 0x00800000
|
|
#define SRV_HEUR_DUMP_RESPONSES 0x01000000
|
|
|
|
//
|
|
// Structure returned in response to FSCTL_SRV_QUERY_CONNECTIONS.
|
|
//
|
|
|
|
typedef struct _BLOCK_INFORMATION {
|
|
PVOID Block;
|
|
ULONG BlockType;
|
|
ULONG BlockState;
|
|
ULONG ReferenceCount;
|
|
} BLOCK_INFORMATION, *PBLOCK_INFORMATION;
|
|
|
|
//
|
|
// Structure for communication between the file server and the server
|
|
// service.
|
|
//
|
|
|
|
typedef struct _SERVER_REQUEST_PACKET {
|
|
|
|
UNICODE_STRING Name1;
|
|
UNICODE_STRING Name2;
|
|
ULONG Level;
|
|
ULONG ErrorCode;
|
|
ULONG Flags;
|
|
|
|
union {
|
|
|
|
struct {
|
|
|
|
ULONG EntriesRead;
|
|
ULONG TotalEntries;
|
|
ULONG TotalBytesNeeded;
|
|
ULONG ResumeHandle;
|
|
|
|
} Get;
|
|
|
|
struct {
|
|
|
|
ULONG ErrorParameter;
|
|
|
|
union {
|
|
|
|
struct {
|
|
ULONG MaxUses;
|
|
} ShareInfo;
|
|
|
|
} Api;
|
|
|
|
} Set;
|
|
|
|
} Parameters;
|
|
|
|
} SERVER_REQUEST_PACKET, *PSERVER_REQUEST_PACKET;
|
|
|
|
//
|
|
// Flags for the Flags field of the server request packet.
|
|
//
|
|
|
|
#define SRP_RETURN_SINGLE_ENTRY 0x01
|
|
#define SRP_CLEAR_STATISTICS 0x02
|
|
#define SRP_SET_SHARE_IN_DFS 0x04
|
|
#define SRP_CLEAR_SHARE_IN_DFS 0x08
|
|
|
|
//
|
|
// Flags used in the XPORT_ADD function
|
|
//
|
|
|
|
#define SRP_XADD_PRIMARY_MACHINE 0x1 // this is the primary machine name
|
|
#define SRP_XADD_REMAP_PIPE_NAMES 0x2 // remap pipe names to separate dir
|
|
|
|
//
|
|
// The valid set of flags for the XPORT_ADD function
|
|
//
|
|
#define SRP_XADD_FLAGS (SRP_XADD_PRIMARY_MACHINE | SRP_XADD_REMAP_PIPE_NAMES)
|
|
|
|
//
|
|
// #defines for the share GENERIC_MAPPING structure, which must be available
|
|
// to both the server and the server service.
|
|
//
|
|
|
|
#define SRVSVC_SHARE_CONNECT 0x0001
|
|
#define SRVSVC_PAUSED_SHARE_CONNECT 0x0002
|
|
|
|
#define SRVSVC_SHARE_CONNECT_ALL_ACCESS ( STANDARD_RIGHTS_REQUIRED | \
|
|
SRVSVC_SHARE_CONNECT | \
|
|
SRVSVC_PAUSED_SHARE_CONNECT )
|
|
|
|
#define GENERIC_SHARE_CONNECT_MAPPING { \
|
|
STANDARD_RIGHTS_READ | \
|
|
SRVSVC_SHARE_CONNECT, \
|
|
STANDARD_RIGHTS_WRITE | \
|
|
SRVSVC_PAUSED_SHARE_CONNECT, \
|
|
STANDARD_RIGHTS_EXECUTE, \
|
|
SRVSVC_SHARE_CONNECT_ALL_ACCESS }
|
|
|
|
//
|
|
// #defines for the file GENERIC_MAPPING structure, which must be available
|
|
// to both the server and the server service. This structure is identical
|
|
// to the io file generic mapping "IopFileMapping" defined in io\ioinit.c
|
|
//
|
|
|
|
#define GENERIC_SHARE_FILE_ACCESS_MAPPING { \
|
|
FILE_GENERIC_READ, \
|
|
FILE_GENERIC_WRITE, \
|
|
FILE_GENERIC_EXECUTE, \
|
|
FILE_ALL_ACCESS }
|
|
|
|
//
|
|
// Special cases of STYPE_DISKTREE
|
|
//
|
|
|
|
#define STYPE_CDROM 104
|
|
#define STYPE_REMOVABLE 105
|
|
|
|
#ifdef INCLUDE_SMB_PERSISTENT
|
|
#define STYPE_PERSISTENT 0x40000000
|
|
#endif
|
|
|
|
#endif // ndef _SRVFSCTL_
|