368 lines
6.6 KiB
C
368 lines
6.6 KiB
C
|
/*++
|
|||
|
|
|||
|
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
|
|||
|
|