windows-nt/Source/XPSP1/NT/net/sfm/afp/server/afpadmin.h
2020-09-26 16:20:57 +08:00

368 lines
6.6 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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