|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
afpadmin.h
Abstract:
This module contains definitions relating to the admin routines.
Author:
Sue Adams
Revision History: 25 Jun 1992 Initial Version
--*/
extern VOID AfpAdminDeInit( VOID );
extern AFPSTATUS AfpAdmServiceStart( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServiceStop( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServicePause( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServiceContinue( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmGetStatistics( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmGetStatisticsEx( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmClearStatistics( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmGetProfCounters( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmClearProfCounters( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServerSetParms( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServerAddEtc( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServerSetEtc( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServerGetInfo( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServerDeleteEtc( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmServerAddIcon( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmVolumeAdd( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmVolumeSetInfo( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmVolumeGetInfo( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmVolumeEnum( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmSessionEnum( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmConnectionEnum( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmWDirectoryGetInfo( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmWDirectorySetInfo( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmWFinderSetInfo( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmForkEnum( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmMessageSend( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern AFPSTATUS AfpAdmSystemShutdown( IN OUT PVOID Inbuf OPTIONAL, IN LONG OutBufLen OPTIONAL, OUT PVOID Outbuf OPTIONAL );
extern PETCMAPINFO AfpLookupEtcMapEntry( PUCHAR pExt );
#ifdef AFPADMIN_LOCALS
// Manifests for the FieldDesc
#define DESC_NONE 0 // Don't bother with the validation
#define DESC_STRING 1 // Its an offset to a string
#define DESC_ETC 2 // Its the count of # of etc mappings
#define DESC_ICON 3 // This field specifies the size of icon
#define DESC_SID 4 // This field points to a Sid
#define DESC_SPECIAL 5 // This needs special handling
#define MAX_FIELDS 3 // Max. number of fields to validate
// Structure used for queueing admin requests to a worker thread
typedef struct _AdminQRequest { PIRP aqr_pIrp; ADMINAPIWORKER aqr_AdminApiWorker; WORK_ITEM aqr_WorkItem; } ADMQREQ, *PADMQREQ;
LOCAL NTSTATUS afpFsdHandleAdminRequest( IN PIRP pIrp );
LOCAL NTSTATUS afpFsdHandleShutdownRequest( IN PIRP pIrp );
LOCAL VOID FASTCALL afpHandleQueuedAdminRequest( IN PADMQREQ pAdmQReq );
LOCAL VOID afpQueueAdminWorkItem( IN PLIST_ENTRY pAdmQListEntry );
LOCAL NTSTATUS afpFsdDispatchAdminRequest( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
NTSTATUS afpInitServer ( VOID );
LOCAL VOID afpAdminThread( IN PVOID pContext );
LOCAL VOID afpFsdUnloadServer( IN PDRIVER_OBJECT DeviceObject );
LOCAL VOID afpStartStopAdminRequest( IN PIRP pIrp, IN BOOLEAN Start );
#define afpStartAdminRequest(pIrp) afpStartStopAdminRequest(pIrp, True)
#define afpStopAdminRequest(pIrp) afpStartStopAdminRequest(pIrp, False)
// This is the dispatch table for admin apis.
typedef struct { BYTE _FieldDesc; // One of the above DESC_ values
BYTE _FieldOffset; // Offset of the field
} DESCRIPTOR;
typedef struct _AdminApiDispatchTable { SHORT _MinBufLen; BYTE _OffToStruct; BOOLEAN _CausesChange; DWORD _OpCode; ADMINAPIWORKER _AdminApiWorker; ADMINAPIWORKER _AdminApiQueuedWorker; /*
* The following fields are used by the validation code. Since the * structures have variable length fields in it, we need to make sure * that * a, The offsets point within the buffer * b, The last unicode character in the buffer is a NULL * This ensures that when the worker does a wstrlen, it does not * access memory beyond the InputBuffer. * * We also deal with variable length data which is not a string. * Fortunately there are only three APIs that use such a structure. * We special-case these apis. The APIs are * a, ServerAddIcon * We need to make sure that the icon buffer and icon length are * kosher. The worker will do the rest of the validation. * b, ServerAddEtc * We need to make sure that the buffer is consistent with the * number of etc mappings specified. */ DESCRIPTOR _Fields[MAX_FIELDS];
} ADMIN_DISPATCH_TABLE, *PADMIN_DISPATCH_TABLE;
extern ADMIN_DISPATCH_TABLE AfpAdminDispatchTable[];
#endif // AFPADMIN_LOCALS
|