windows-nt/Source/XPSP1/NT/public/sdk/inc/macfile.h
2020-09-26 16:20:57 +08:00

927 lines
32 KiB
C

/*
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
macfile.h
Abstract:
This module contains data structures, related constants and functions,
error retuen codes and prototypes of AfpAdminxxx APIs. This file should
be included by any application that will administer the MACFILE service.
Author:
Narendra Gidwani (microsoft!nareng)
Revision History:
12 Jume 1992 NarenG Initial version. Split admin.h into admin.h
and macfile.h.
--*/
#ifndef _MACFILE_
#define _MACFILE_
#if _MSC_VER > 1000
#pragma once
#endif
// Used as RPC binding handle to server
typedef ULONG_PTR AFP_SERVER_HANDLE;
typedef ULONG_PTR *PAFP_SERVER_HANDLE;
#define AFP_SERVICE_NAME TEXT("MacFile")
// Error return values from AfpAdminxxx Api's
// WARNING! If you change any any codes below, please change
// afpmgr.h accoringly.
#define AFPERR_BASE -6000
#define AFPERR_InvalidVolumeName (AFPERR_BASE-1)
#define AFPERR_InvalidId (AFPERR_BASE-2)
#define AFPERR_InvalidParms (AFPERR_BASE-3)
#define AFPERR_CodePage (AFPERR_BASE-4)
#define AFPERR_InvalidServerName (AFPERR_BASE-5)
#define AFPERR_DuplicateVolume (AFPERR_BASE-6)
#define AFPERR_VolumeBusy (AFPERR_BASE-7)
#define AFPERR_VolumeReadOnly (AFPERR_BASE-8)
#define AFPERR_DirectoryNotInVolume (AFPERR_BASE-9)
#define AFPERR_SecurityNotSupported (AFPERR_BASE-10)
#define AFPERR_BufferSize (AFPERR_BASE-11)
#define AFPERR_DuplicateExtension (AFPERR_BASE-12)
#define AFPERR_UnsupportedFS (AFPERR_BASE-13)
#define AFPERR_InvalidSessionType (AFPERR_BASE-14)
#define AFPERR_InvalidServerState (AFPERR_BASE-15)
#define AFPERR_NestedVolume (AFPERR_BASE-16)
#define AFPERR_InvalidComputername (AFPERR_BASE-17)
#define AFPERR_DuplicateTypeCreator (AFPERR_BASE-18)
#define AFPERR_TypeCreatorNotExistant (AFPERR_BASE-19)
#define AFPERR_CannotDeleteDefaultTC (AFPERR_BASE-20)
#define AFPERR_CannotEditDefaultTC (AFPERR_BASE-21)
#define AFPERR_InvalidTypeCreator (AFPERR_BASE-22)
#define AFPERR_InvalidExtension (AFPERR_BASE-23)
#define AFPERR_TooManyEtcMaps (AFPERR_BASE-24)
#define AFPERR_InvalidPassword (AFPERR_BASE-25)
#define AFPERR_VolumeNonExist (AFPERR_BASE-26)
#define AFPERR_NoSuchUserGroup (AFPERR_BASE-27)
#define AFPERR_NoSuchUser (AFPERR_BASE-28)
#define AFPERR_NoSuchGroup (AFPERR_BASE-29)
#define AFPERR_InvalidParms_LoginMsg (AFPERR_BASE-30)
#define AFPERR_InvalidParms_MaxVolUses (AFPERR_BASE-31)
#define AFPERR_InvalidParms_MaxSessions (AFPERR_BASE-32)
#define AFPERR_InvalidServerName_Length (AFPERR_BASE-33)
#define AFPERR_MIN AFPERR_InvalidServerName_Length
// Constants related to the following data strucutures.
#define AFP_SERVERNAME_LEN 31
#define AFP_VOLNAME_LEN 27
#define AFP_VOLPASS_LEN 8
#define AFP_WKSTANAME_LEN 65
#define AFP_EXTENSION_LEN 3
#define AFP_CREATOR_LEN 4
#define AFP_TYPE_LEN 4
#define AFP_MESSAGE_LEN 199
#define AFP_MAXICONSIZE 2048
#define AFP_MAXSESSIONS 0XFFFFFFFF
#define AFP_ETC_COMMENT_LEN 36
// Relative paths to registry keys that contain information for the macfile
// server.
#define AFP_KEYPATH_SERVER_PARAMS \
TEXT("SYSTEM\\CurrentControlSet\\Services\\MacFile\\PARAMETERS")
#define AFP_KEYPATH_VOLUMES \
TEXT("SYSTEM\\CurrentControlSet\\Services\\MacFile\\PARAMETERS\\VOLUMES")
#define AFP_KEYPATH_TYPE_CREATORS \
TEXT("SYSTEM\\CurrentControlSet\\Services\\MacFile\\PARAMETERS\\TYPE_CREATORS")
#define AFP_KEYPATH_EXTENSIONS \
TEXT("SYSTEM\\CurrentControlSet\\Services\\MacFile\\PARAMETERS\\EXTENSIONS")
#define AFP_KEYPATH_ICONS \
TEXT("SYSTEM\\CurrentControlSet\\Services\\MacFile\\PARAMETERS\\ICONS")
#define AFP_KEYPATH_CODEPAGE \
TEXT("SYSTEM\\CurrentControlSet\\Control\\Nls\\Codepage")
// Value names for server parameters
#define AFPREG_VALNAME_SVRNAME TEXT("ServerName")
#define AFPREG_VALNAME_SRVOPTIONS TEXT("ServerOptions")
#define AFPREG_VALNAME_MAXSESSIONS TEXT("MaxSessions")
#define AFPREG_VALNAME_LOGINMSG TEXT("LoginMsg")
#define AFPREG_VALNAME_MAXPAGEDMEM TEXT("PagedMemLimit")
#define AFPREG_VALNAME_MAXNONPAGEDMEM TEXT("NonPagedMemLimit")
#define AFPREG_VALNAME_TYPE TEXT("Type")
#define AFPREG_VALNAME_CREATOR TEXT("Creator")
#define AFPREG_VALNAME_COMMENT TEXT("Comment")
#define AFPREG_VALNAME_PASSWORD TEXT("Password")
#define AFPREG_VALNAME_MAXUSES TEXT("MaxUses")
#define AFPREG_VALNAME_PROPS TEXT("Properties")
#define AFPREG_VALNAME_PATH TEXT("Path")
#define AFPREG_VALNAME_ID TEXT("Id")
#define AFPREG_VALNAME_ICONTYPE TEXT("IconType")
#define AFPREG_VALNAME_DATA TEXT("Data")
#define AFPREG_VALNAME_LENGTH TEXT("Length")
#define AFPREG_VALNAME_CODEPAGE TEXT("MACCP")
#define AFPREG_VALNAME_CATSEARCH TEXT("DisableCatsearch")
// Limits on server parameters
#define AFP_MAX_ALLOWED_SRV_SESSIONS AFP_MAXSESSIONS
#define AFP_MIN_ALLOWED_PAGED_MEM 1000
#define AFP_MAX_ALLOWED_PAGED_MEM 256000
#define AFP_MIN_ALLOWED_NONPAGED_MEM 256
#define AFP_MAX_ALLOWED_NONPAGED_MEM 16000
// Server default parameter values
#define AFP_DEF_SRVOPTIONS (AFP_SRVROPT_GUESTLOGONALLOWED)
#define AFP_DEF_MAXSESSIONS AFP_MAXSESSIONS
#define AFP_DEF_TYPE TEXT("TEXT")
#define AFP_DEF_CREATOR TEXT("LMAN")
#define AFP_DEF_EXTENSION_W L"*"
#define AFP_DEF_EXTENSION_A "*"
#define AFP_DEF_TCID 0
#define AFP_DEF_MAXPAGEDMEM 20000
#define AFP_DEF_MAXNONPAGEDMEM 4000
#define AFP_DEF_CODEPAGE_PATH TEXT("C:\\NT\\SYSTEM32\\C_10000.NLS")
// Will be concatenated to the system path to form source path of volume icon
#define AFP_DEF_VOLICON_SRCNAME TEXT("\\SFMICON.VOL")
// Server options
#define AFP_SRVROPT_NONE 0x0000
#define AFP_SRVROPT_GUESTLOGONALLOWED 0x0001
#define AFP_SRVROPT_CLEARTEXTLOGONALLOWED 0x0002
#define AFP_SRVROPT_ALLOWSAVEDPASSWORD 0x0004
#define AFP_SRVROPT_STANDALONE 0x0008
#define AFP_SRVROPT_4GB_VOLUMES 0x0010
#define AFP_SRVROPT_MICROSOFT_UAM 0x0020
#define AFP_SRVROPT_NATIVEAPPLEUAM 0x0040
#define AFP_SRVROPT_ALL ( AFP_SRVROPT_GUESTLOGONALLOWED \
| AFP_SRVROPT_CLEARTEXTLOGONALLOWED \
| AFP_SRVROPT_ALLOWSAVEDPASSWORD \
| AFP_SRVROPT_4GB_VOLUMES \
| AFP_SRVROPT_MICROSOFT_UAM \
| AFP_SRVROPT_NATIVEAPPLEUAM \
| AFP_SRVROPT_STANDALONE )
// AFP Service default parameters
#define AFP_SERVER_PARMNUM_LOGINMSG 0x00000001
#define AFP_SERVER_PARMNUM_MAX_SESSIONS 0x00000002
#define AFP_SERVER_PARMNUM_OPTIONS 0x00000004
#define AFP_SERVER_PARMNUM_NAME 0x00000008
#define AFP_SERVER_PARMNUM_PAGEMEMLIM 0x00000010
#define AFP_SERVER_PARMNUM_NONPAGEMEMLIM 0x00000020
#define AFP_SERVER_PARMNUM_CODEPAGE 0x00000040
#define AFP_SERVER_GUEST_ACCT_NOTIFY 0x00000080
#define AFP_SERVER_PARMNUM_ALL ( AFP_SERVER_PARMNUM_LOGINMSG \
| AFP_SERVER_PARMNUM_MAX_SESSIONS \
| AFP_SERVER_PARMNUM_OPTIONS \
| AFP_SERVER_PARMNUM_NAME \
| AFP_SERVER_PARMNUM_PAGEMEMLIM \
| AFP_SERVER_PARMNUM_NONPAGEMEMLIM \
| AFP_SERVER_PARMNUM_CODEPAGE \
| AFP_SERVER_GUEST_ACCT_NOTIFY)
typedef struct _AFP_SERVER_INFO
{
LPWSTR afpsrv_name; // Macintosh name of the server
// max. AFP_SERVERNAME_LEN.
DWORD afpsrv_max_sessions; // Maximum simultaneous sessions
// In the range 1 - AFP_MAXSESSIONS.
// 0 is invalid
DWORD afpsrv_options; // Server Options
DWORD afpsrv_max_paged_mem; // Cap on paged memory usage
DWORD afpsrv_max_nonpaged_mem;// Cap on paged memory usage
LPWSTR afpsrv_login_msg; // NULL terminated UNICODE string.
// MAX AFP_MESSAGE_LEN chars.
// NULL => no login msg.
LPWSTR afpsrv_codepage; // NULL terminated UNICODE path
// NULL => no codepage path.
} AFP_SERVER_INFO, *PAFP_SERVER_INFO;
// Volume properties mask values. Values may be or'ed together.
// Volume flags with msk 0x0000001F are defined by the AFP specification.
// Do not overload these. Most of these values (except for READONLY above)
// are not exposed via admin apis.
#define AFP_VOLUME_READONLY 0x00000001
#define AFP_VOLUME_GUESTACCESS 0x00008000
#define AFP_VOLUME_EXCLUSIVE 0x00010000
#define AFP_VOLUME_HAS_CUSTOM_ICON 0x00020000
#define AFP_VOLUME_4GB 0x00040000
#define AFP_VOLUME_AGE_DFES 0x00080000
#define AFP_VOLUME_DISALLOW_CATSRCH 0x00100000
#define AFP_VOLUME_ALL_DOWNLEVEL (AFP_VOLUME_READONLY | \
AFP_VOLUME_GUESTACCESS)
#define AFP_VOLUME_ALL (AFP_VOLUME_READONLY | \
AFP_VOLUME_GUESTACCESS | \
AFP_VOLUME_EXCLUSIVE | \
AFP_VOLUME_HAS_CUSTOM_ICON | \
AFP_VOLUME_4GB | \
AFP_VOLUME_DISALLOW_CATSRCH | \
AFP_VOLUME_AGE_DFES)
#define AFP_VOLUME_UNLIMITED_USES 0xFFFFFFFF
// The following bits define the fields within the AFP_VOLUME_INFO
// structure whose values will be set.
//
#define AFP_VOL_PARMNUM_MAXUSES 0x00000002
#define AFP_VOL_PARMNUM_PROPSMASK 0x00000004
#define AFP_VOL_PARMNUM_PASSWORD 0x00000001
#define AFP_VOL_PARMNUM_ALL ( AFP_VOL_PARMNUM_PASSWORD \
| AFP_VOL_PARMNUM_MAXUSES \
| AFP_VOL_PARMNUM_PROPSMASK )
typedef struct _AFP_VOLUME_INFO
{
LPWSTR afpvol_name; // Name of the volume max.
DWORD afpvol_id; // id of this volume. generated by sever
LPWSTR afpvol_password; // Volume password, max. AFP_VOLPASS_LEN
DWORD afpvol_max_uses; // Max opens allowed
DWORD afpvol_props_mask; // Mask of volume properties
DWORD afpvol_curr_uses; // Number of curr open connections.
LPWSTR afpvol_path; // The actual path
// Ignored for VolumeSetInfo
} AFP_VOLUME_INFO, *PAFP_VOLUME_INFO;
typedef struct _AFP_SESSION_INFO
{
DWORD afpsess_id; // Id of the session
LPWSTR afpsess_ws_name; // Workstation Name,
LPWSTR afpsess_username; // User Name, max. UNLEN
DWORD afpsess_num_cons; // Number of open volumes
DWORD afpsess_num_opens; // Number of open files
LONG afpsess_time; // Time session established
DWORD afpsess_logon_type; // How the user logged on
} AFP_SESSION_INFO, *PAFP_SESSION_INFO;
// afpicon_type values
#define ICONTYPE_SRVR 0 // Large, monochrome
#define ICONTYPE_ICN 1 // Large. monochrome
#define ICONTYPE_ICS 2 // Small, monochrome
#define ICONTYPE_ICN4 3 // Large, 4 color
#define ICONTYPE_ICN8 4 // Large, 8 color
#define ICONTYPE_ICS4 5 // Small, 4 color
#define ICONTYPE_ICS8 6 // Small, 8 color
#define MAX_ICONTYPE 7
// afpicon_length values
#define ICONSIZE_ICN 256 // Large. monochrome
#define ICONSIZE_ICS 64 // Small, monochrome
#define ICONSIZE_ICN4 1024// Large, 4 color
#define ICONSIZE_ICN8 2048// Large, 8 color
#define ICONSIZE_ICS4 256 // Small, 4 color
#define ICONSIZE_ICS8 512 // Small, 8 color
typedef struct _AFP_ICON_INFO
{
WCHAR afpicon_type[AFP_TYPE_LEN+1]; // Resource Type
WCHAR afpicon_creator[AFP_CREATOR_LEN+1]; // Resource Creator
DWORD afpicon_icontype; // Icon type
DWORD afpicon_length; // Length of icon block
PBYTE afpicon_data; // The actual icon.
} AFP_ICON_INFO, *PAFP_ICON_INFO;
// The AfpAdminConnectionEnum Filter values
#define AFP_NO_FILTER 0
#define AFP_FILTER_ON_VOLUME_ID 1
#define AFP_FILTER_ON_SESSION_ID 2
typedef struct _AFP_CONNECTION_INFO
{
DWORD afpconn_id; // Connection Id
LPWSTR afpconn_username; // User who has this session open
// Max. UNLEN
LPWSTR afpconn_volumename; // Volume corresponding to this
// connection
ULONG afpconn_time; // Time since the vol was opened.(secs)
DWORD afpconn_num_opens; // Number of open resources
} AFP_CONNECTION_INFO, *PAFP_CONNECTION_INFO;
// Various File open modes
#define AFP_OPEN_MODE_NONE 0x00000000
#define AFP_OPEN_MODE_READ 0x00000001
#define AFP_OPEN_MODE_WRITE 0x00000002
// Fork type of an open file
#define AFP_FORK_DATA 0x00000000
#define AFP_FORK_RESOURCE 0x00000001
typedef struct _AFP_FILE_INFO
{
DWORD afpfile_id; // Id of the open file fork
DWORD afpfile_open_mode; // Mode in which file is opened
DWORD afpfile_num_locks; // Number of locks on the file
DWORD afpfile_fork_type; // Fork type
LPWSTR afpfile_username; // File opened by this user. max UNLEN
LPWSTR afpfile_path; // Absolute canonical path to the file
} AFP_FILE_INFO, *PAFP_FILE_INFO;
// The following bits define the permissions mask
// NOTE: These MUST be consistent with the AFP permissions
#define AFP_PERM_WORLD_SFO 0x00010000
#define AFP_PERM_WORLD_SFI 0x00020000
#define AFP_PERM_WORLD_MC 0x00040000
#define AFP_PERM_WORLD_MASK 0x00070000
#define AFP_PERM_GROUP_SFO 0x00000100
#define AFP_PERM_GROUP_SFI 0x00000200
#define AFP_PERM_GROUP_MC 0x00000400
#define AFP_PERM_GROUP_MASK 0x00000700
#define AFP_PERM_OWNER_SFO 0x00000001
#define AFP_PERM_OWNER_SFI 0x00000002
#define AFP_PERM_OWNER_MC 0x00000004
#define AFP_PERM_OWNER_MASK 0x00000007
#define AFP_PERM_INHIBIT_MOVE_DELETE 0x01000000
#define AFP_PERM_SET_SUBDIRS 0x02000000
// The following bits define the fields within the AFP_DIRECTORY_INFO
// structure whose values will be set.
//
#define AFP_DIR_PARMNUM_PERMS 0x00000001
#define AFP_DIR_PARMNUM_OWNER 0x00000002
#define AFP_DIR_PARMNUM_GROUP 0x00000004
#define AFP_DIR_PARMNUM_ALL ( AFP_DIR_PARMNUM_PERMS \
| AFP_DIR_PARMNUM_OWNER \
| AFP_DIR_PARMNUM_GROUP )
typedef struct _AFP_DIRECTORY_INFO
{
LPWSTR afpdir_path; // Absolute dir path,
DWORD afpdir_perms; // Directory permissions
LPWSTR afpdir_owner; // Directory owner, max. UNLEN
LPWSTR afpdir_group; // Group Association max. GNLEN
BOOLEAN afpdir_in_volume; // TRUE indicates that this directory
// is part of a volume, FALSE otherwise.
} AFP_DIRECTORY_INFO, *PAFP_DIRECTORY_INFO;
// The following bits define the fields within the AFP_FINDER_INFO
// structure whos values will be set
//
#define AFP_FD_PARMNUM_TYPE 0x00000001
#define AFP_FD_PARMNUM_CREATOR 0x00000002
#define AFP_FD_PARMNUM_ALL ( AFP_FD_PARMNUM_TYPE \
| AFP_FD_PARMNUM_CREATOR)
typedef struct _AFP_FINDER_INFO
{
LPWSTR afpfd_path; // Absolute file/dir path
WCHAR afpfd_type[AFP_TYPE_LEN+1]; // Finder type
WCHAR afpfd_creator[AFP_CREATOR_LEN+1]; // Finder creator
} AFP_FINDER_INFO, *PAFP_FINDER_INFO;
typedef struct _AFP_EXTENSION {
WCHAR afpe_extension[AFP_EXTENSION_LEN+1];
DWORD afpe_tcid;
} AFP_EXTENSION, *PAFP_EXTENSION;
typedef struct _AFP_TYPE_CREATOR
{
WCHAR afptc_creator[AFP_CREATOR_LEN+1]; // Resource Creator
WCHAR afptc_type[AFP_TYPE_LEN+1]; // Resource Type
WCHAR afptc_comment[AFP_ETC_COMMENT_LEN+1];
DWORD afptc_id;
} AFP_TYPE_CREATOR, *PAFP_TYPE_CREATOR;
typedef struct _AFP_MESSAGE_INFO
{
DWORD afpmsg_session_id; // Session Id of the user to which
// the message is to be sent.
LPWSTR afpmsg_text; // Must be at most AFP_MESSAGE_LEN
} AFP_MESSAGE_INFO, *PAFP_MESSAGE_INFO;
typedef struct _AFP_ETCMAP_INFO {
DWORD afpetc_num_type_creators;
#ifdef MIDL_PASS
[size_is(afpetc_num_type_creators)] PAFP_TYPE_CREATOR afpetc_type_creator;
#else
PAFP_TYPE_CREATOR afpetc_type_creator;
#endif
DWORD afpetc_num_extensions;
#ifdef MIDL_PASS
[size_is(afpetc_num_extensions)] PAFP_EXTENSION afpetc_extension;
#else
PAFP_EXTENSION afpetc_extension;
#endif
} AFP_ETCMAP_INFO, *PAFP_ETCMAP_INFO;
/* Our version of the AFP Function codes organized by class */
#define _AFP_INVALID_OPCODE 0x00
#define _AFP_UNSUPPORTED_OPCODE 0x01
#define _AFP_GET_SRVR_INFO 0x02 /* SERVER APIs */
#define _AFP_GET_SRVR_PARMS 0x03
#define _AFP_CHANGE_PASSWORD 0x04
#define _AFP_LOGIN 0x05
#define _AFP_LOGIN_CONT 0x06
#define _AFP_LOGOUT 0x07
#define _AFP_MAP_ID 0x08
#define _AFP_MAP_NAME 0x09
#define _AFP_GET_USER_INFO 0x0A
#define _AFP_GET_SRVR_MSG 0x0B
#define _AFP_GET_DOMAIN_LIST 0x0C
#define _AFP_OPEN_VOL 0x0D /* VOLUME APIs */
#define _AFP_CLOSE_VOL 0x0E
#define _AFP_GET_VOL_PARMS 0x0F
#define _AFP_SET_VOL_PARMS 0x10
#define _AFP_FLUSH 0x11
#define _AFP_GET_FILE_DIR_PARMS 0x12 /* FILE-DIRECTORY APIs */
#define _AFP_SET_FILE_DIR_PARMS 0x13
#define _AFP_DELETE 0x14
#define _AFP_RENAME 0x15
#define _AFP_MOVE_AND_RENAME 0x16
#define _AFP_OPEN_DIR 0x17 /* DIRECTORY APIs */
#define _AFP_CLOSE_DIR 0x18
#define _AFP_CREATE_DIR 0x19
#define _AFP_ENUMERATE 0x1A
#define _AFP_SET_DIR_PARMS 0x1B
#define _AFP_CREATE_FILE 0x1C /* FILE APIs */
#define _AFP_COPY_FILE 0x1D
#define _AFP_CREATE_ID 0x1E
#define _AFP_DELETE_ID 0x1F
#define _AFP_RESOLVE_ID 0x20
#define _AFP_SET_FILE_PARMS 0x21
#define _AFP_EXCHANGE_FILES 0x22
#define _AFP_OPEN_FORK 0x23 /* FORK APIs */
#define _AFP_CLOSE_FORK 0x24
#define _AFP_FLUSH_FORK 0x25
#define _AFP_READ 0x26
#define _AFP_WRITE 0x27
#define _AFP_BYTE_RANGE_LOCK 0x28
#define _AFP_GET_FORK_PARMS 0x29
#define _AFP_SET_FORK_PARMS 0x2A
#define _AFP_OPEN_DT 0x2B /* DESKTOP APIs */
#define _AFP_CLOSE_DT 0x2C
#define _AFP_ADD_APPL 0x2D
#define _AFP_GET_APPL 0x2E
#define _AFP_REMOVE_APPL 0x2F
#define _AFP_ADD_COMMENT 0x30
#define _AFP_GET_COMMENT 0x31
#define _AFP_REMOVE_COMMENT 0x32
#define _AFP_ADD_ICON 0x33
#define _AFP_GET_ICON 0x34
#define _AFP_GET_ICON_INFO 0x35
#define _AFP_CAT_SEARCH 0x36
#define _AFP_MAX_ENTRIES 0x38 /* Keep it even */
typedef struct _AFP_STATISTICS_INFO
{
DWORD stat_ServerStartTime; // Server start time
DWORD stat_TimeStamp; // Statistics collected since
DWORD stat_Errors; // Unexpected Errors
DWORD stat_MaxSessions; // Max. sessions active simulataneously
DWORD stat_TotalSessions; // Total number of sessions created
DWORD stat_CurrentSessions; // Number of sessions active now
DWORD stat_NumAdminReqs; // Total number of admin requests
DWORD stat_NumAdminChanges; // Number of admin reqs causing change
// The file statistics are actually fork statistics i.e. opening both the
// data and the resource forks will yield a count of TWO
DWORD stat_MaxFilesOpened; // Max. files opened simulataneously
DWORD stat_TotalFilesOpened; // Total number of files opened
DWORD stat_CurrentFilesOpen; // Number of files open now
DWORD stat_CurrentFileLocks; // Current count of locks
DWORD stat_NumFailedLogins; // Number of unsuccessful logins
DWORD stat_NumForcedLogoffs; // Number of sessions kicked out
DWORD stat_NumMessagesSent; // Number of messages sent out
DWORD stat_MaxNonPagedUsage; // High-water mark of the non-paged
// memory usage
DWORD stat_CurrNonPagedUsage; // Amount of non-paged memory in use
DWORD stat_MaxPagedUsage; // High-water mark of the paged
// memory usage
DWORD stat_CurrPagedUsage; // Amount of paged memory in use
} AFP_STATISTICS_INFO, *PAFP_STATISTICS_INFO;
typedef struct _AFP_STATISTICS_INFO_EX
{
DWORD stat_ServerStartTime; // Server start time
DWORD stat_TimeStamp; // Statistics collected since
DWORD stat_Errors; // Unexpected Errors
DWORD stat_MaxSessions; // Max. sessions active simulataneously
DWORD stat_TotalSessions; // Total number of sessions created
DWORD stat_CurrentSessions; // Number of sessions active now
DWORD stat_NumAdminReqs; // Total number of admin requests
DWORD stat_NumAdminChanges; // Number of admin reqs causing change
// The file statistics are actually fork statistics i.e. opening both the
// data and the resource forks will yield a count of TWO
DWORD stat_MaxFilesOpened; // Max. files opened simulataneously
DWORD stat_TotalFilesOpened; // Total number of files opened
DWORD stat_CurrentFilesOpen; // Number of files open now
DWORD stat_CurrentFileLocks; // Current count of locks
DWORD stat_NumFailedLogins; // Number of unsuccessful logins
DWORD stat_NumForcedLogoffs; // Number of sessions kicked out
DWORD stat_NumMessagesSent; // Number of messages sent out
DWORD stat_MaxNonPagedUsage; // High-water mark of the non-paged
// memory usage
DWORD stat_CurrNonPagedUsage; // Amount of non-paged memory in use
DWORD stat_MaxPagedUsage; // High-water mark of the paged
// memory usage
DWORD stat_CurrPagedUsage; // Amount of paged memory in use
// NOTE: MAKE SURE THE STRUCTURE ABOVE THIS LINE MATCHES EXACTLY THE AFP_STATISTICS_INFO
DWORD stat_PagedCount; // Number of current allocations
DWORD stat_NonPagedCount; // Number of current allocations
DWORD stat_EnumCacheHits; // # of times cache was hit
DWORD stat_EnumCacheMisses; // # of times cache was missed
DWORD stat_IoPoolHits; // # of times Io Pool was hit
DWORD stat_IoPoolMisses; // # of times Io Pool was missed
DWORD stat_MaxInternalOpens; // Max # of internal opens
DWORD stat_TotalInternalOpens;// Total # of internal opens
DWORD stat_CurrentInternalOpens;// Current # of internal opens
DWORD stat_CurrQueueLength; // # of requests in the queue
DWORD stat_MaxQueueLength; // Max # of requests in the queue
DWORD stat_CurrThreadCount; // # of worker threads active
DWORD stat_MaxThreadCount; // Max # of worker threads active
// Make sure the following is Quadword aligned for efficiency
LARGE_INTEGER stat_DataRead; // Amount of data read (disk)
LARGE_INTEGER stat_DataWritten; // Amount of data written (disk)
LARGE_INTEGER stat_DataReadInternal; // Amount of data read (disk)
LARGE_INTEGER stat_DataWrittenInternal;// Amount of data written (disk)
LARGE_INTEGER stat_DataOut; // Amount of data sent out (wire)
LARGE_INTEGER stat_DataIn; // Amount of data read in (wire)
DWORD stat_TcpSessions; // TCP sessions currently active
DWORD stat_MaxTcpSessions; // Max TCP Sessions active simultaneously
} AFP_STATISTICS_INFO_EX, *PAFP_STATISTICS_INFO_EX;
typedef struct _AFP_PROFILE_INFO
{
DWORD perf_ApiCounts[_AFP_MAX_ENTRIES];
// # of times each Api is called
LARGE_INTEGER perf_ApiCumTimes[_AFP_MAX_ENTRIES];
// Cummulative time spent in Apis
LARGE_INTEGER perf_ApiWorstTime[_AFP_MAX_ENTRIES];
// Worst time for an api
LARGE_INTEGER perf_ApiBestTime[_AFP_MAX_ENTRIES];
// Best time for an api
LARGE_INTEGER perf_OpenTimeRA; // Time spent in NtOpenFile for ReadAttr
LARGE_INTEGER perf_OpenTimeRC; // Time spent in NtOpenFile for ReadControl
LARGE_INTEGER perf_OpenTimeWC; // Time spent in NtOpenFile for WriteControl
LARGE_INTEGER perf_OpenTimeRW; // Time spent in NtOpenFile for Read/Write
LARGE_INTEGER perf_OpenTimeDL; // Time spent in NtOpenFile for Delete
LARGE_INTEGER perf_OpenTimeDR; // Time spent in NtOpenFile for Directories
LARGE_INTEGER perf_CreateTimeFIL; // Time spent in NtCreateFile for file/data stream
LARGE_INTEGER perf_CreateTimeSTR; // Time spent in NtCreateFile for file/other streams
LARGE_INTEGER perf_CreateTimeDIR; // Time spent in NtCreateFile for dir/data stream
LARGE_INTEGER perf_CloseTime; // Time spent in NtClose
LARGE_INTEGER perf_DeleteTime; // Time spent in NtSetInformationFile
LARGE_INTEGER perf_GetInfoTime; // Time spent in NtQueryInformationFile
LARGE_INTEGER perf_SetInfoTime; // Time spent in NtSetInformationFile
LARGE_INTEGER perf_GetPermsTime; // Time spent on getting permissions
LARGE_INTEGER perf_SetPermsTime; // Time spent on setting permissions
LARGE_INTEGER perf_PathMapTime; // Time spent in pathmap code
LARGE_INTEGER perf_ScavengerTime; // Time spent in scavenger
LARGE_INTEGER perf_IdIndexUpdTime; // Time spent updating idindex
LARGE_INTEGER perf_DesktopUpdTime; // Time spent updating desktop
LARGE_INTEGER perf_SwmrWaitTime; // Time spent waiting for Swmr
LARGE_INTEGER perf_SwmrLockTimeR; // Time swmr was locked for read
LARGE_INTEGER perf_SwmrLockTimeW; // Time swmr was locked for write
LARGE_INTEGER perf_QueueTime; // Time Apis spent in queue
LARGE_INTEGER perf_UnmarshallTime; // Time spent in un-marshalling a request
LARGE_INTEGER perf_InterReqTime; // Time elapse between subsequent requests
LARGE_INTEGER perf_ExAllocTimeN; // Time spent in ExAllocatePool (NonPaged)
LARGE_INTEGER perf_ExFreeTimeN; // Time spent in ExFreePool (NonPaged)
LARGE_INTEGER perf_ExAllocTimeP; // Time spent in ExAllocatePool (Paged)
LARGE_INTEGER perf_ExFreeTimeP; // Time spent in ExFreePool (Paged)
LARGE_INTEGER perf_AfpAllocTimeN; // Time spent in AfpAllocateMemory (NonPaged)
LARGE_INTEGER perf_AfpFreeTimeN; // Time spent in AfpFreeMemory (NonPaged)
LARGE_INTEGER perf_AfpAllocTimeP; // Time spent in AfpAllocateMemory (Paged)
LARGE_INTEGER perf_AfpFreeTimeP; // Time spent in AfpFreeMemory (Paged)
LARGE_INTEGER perf_BPAllocTime; // Time spent in BP Alloc
LARGE_INTEGER perf_BPFreeTime; // Time spent in BP Free
LARGE_INTEGER perf_DFEAllocTime; // Time spent in allocating a DFE
LARGE_INTEGER perf_DFEFreeTime; // Time spent in freeing a DFE
LARGE_INTEGER perf_ChangeNotifyTime; // Time spent processing change notifies
LARGE_INTEGER perf_ScanTreeTime; // Time spent in scanning a directory tree
LARGE_INTEGER perf_PerfFreq; // Perf. counter frequency
DWORD perf_NumFastIoSucceeded;// Fast IO success count
DWORD perf_NumFastIoFailed; // Fast Io failure count
DWORD perf_OpenCountRA; // # of times NtOpenFile called for ReadAttr
DWORD perf_OpenCountRC; // # of times NtOpenFile called for ReadControl
DWORD perf_OpenCountWC; // # of times NtOpenFile called for WriteControl
DWORD perf_OpenCountRW; // # of times NtOpenFile called for Read/Write
DWORD perf_OpenCountDL; // # of times NtOpenFile called for Delete
DWORD perf_OpenCountDR; // # of times NtOpenFile called for Directories
DWORD perf_CreateCountFIL; // # of times NtCreateFile called - file/data
DWORD perf_CreateCountSTR; // # of times NtCreateFile called - file/other
DWORD perf_CreateCountDIR; // # of times NtCreateFile called - dir/data
DWORD perf_CloseCount; // # of times NtClose called
DWORD perf_DeleteCount; // # of times NtSetInformationFile called
DWORD perf_GetInfoCount; // # of times NtQueryInformationFile called
DWORD perf_SetInfoCount; // # of times NtSetInformationFile called
DWORD perf_GetPermsCount; // # of times Get permissions called
DWORD perf_SetPermsCount; // # of times Get permissions called
DWORD perf_PathMapCount; // # of times PathMap was invoked
DWORD perf_ScavengerCount; // # of times scavenger was scheduled
DWORD perf_IdIndexUpdCount; // # of times idindex was updated
DWORD perf_DesktopUpdCount; // # of times desktop was updated
DWORD perf_SwmrWaitCount; // # of times swmr access was blocked
DWORD perf_SwmrLockCountR; // # of times swmr was locked for read
DWORD perf_SwmrLockCountW; // # of times swmr was locked for write
DWORD perf_SwmrUpgradeCount; // # of times swmr was upgraded
DWORD perf_SwmrDowngradeCount;// # of times swmr was downgraded
DWORD perf_QueueCount; // # of times worker was queued
DWORD perf_UnmarshallCount; // # of times api unmarshalling done
DWORD perf_ReqCount; // # of apis - this is essentially total of perf_ApiCounts[i]
DWORD perf_ExAllocCountN; // # of times in ExAllocatePool (NonPaged) called
DWORD perf_ExFreeCountN; // # of times in ExFreePool (NonPaged) called
DWORD perf_ExAllocCountP; // # of times in ExAllocatePool (Paged) called
DWORD perf_ExFreeCountP; // # of times in ExFreePool (Paged) called
DWORD perf_AfpAllocCountN; // # of times in AfpAllocateMemory (NonPaged) called
DWORD perf_AfpFreeCountN; // # of times in AfpFreeMemory (NonPaged) called
DWORD perf_AfpAllocCountP; // # of times in AfpAllocateMemory (Paged) called
DWORD perf_AfpFreeCountP; // # of times in AfpFreeMemory (Paged) called
DWORD perf_BPAllocCount; // # of times in BP Alloc called
DWORD perf_BPFreeCount; // # of times in BP Free called
DWORD perf_BPAgeCount; // # of times in BP aged out
DWORD perf_DFEAllocCount; // # of times in a DFE is allocated
DWORD perf_DFEFreeCount; // # of times in a DFE is freed
DWORD perf_DFEAgeCount; // # of times in DFE aged out
DWORD perf_ChangeNotifyCount; // # of times ChangeNotify called
DWORD perf_ScanTreeCount; // # of items scanned during scantree
DWORD perf_NumDfeLookupByName;// # of times DFE lookup by Name was called
DWORD perf_NumDfeLookupById; // # of times DFE lookup by Id was called
DWORD perf_DfeDepthTraversed; // How deep in the hash buckets did we go
DWORD perf_DfeCacheHits; // # of times DFE cache was hit
DWORD perf_DfeCacheMisses; // # of times DFE cache was missed
DWORD perf_MaxDfrdReqCount; // Current # of request deferred
DWORD perf_CurDfrdReqCount; // Max # of request deferred
DWORD perf_cAllocatedIrps; // Total # of Irps allocated
DWORD perf_cAllocatedMdls; // Total # of Mdls allocated
} AFP_PROFILE_INFO, *PAFP_PROFILE_INFO;
// AfpAdminXXX API prototypes
//
DWORD
AfpAdminConnect(
IN LPWSTR lpwsServerName,
OUT PAFP_SERVER_HANDLE phAfpServer
);
VOID
AfpAdminDisconnect(
IN AFP_SERVER_HANDLE hAfpServer
);
VOID
AfpAdminBufferFree(
IN PVOID pBuffer
);
DWORD
AfpAdminVolumeEnum(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * lpbBuffer,
IN DWORD dwPrefMaxLen,
OUT LPDWORD lpdwEntriesRead,
OUT LPDWORD lpdwTotalEntries,
IN LPDWORD lpdwResumeHandle
);
DWORD
AfpAdminVolumeSetInfo (
IN AFP_SERVER_HANDLE hAfpServer,
IN LPBYTE pBuffer,
IN DWORD dwParmNum
);
DWORD
AfpAdminVolumeGetInfo (
IN AFP_SERVER_HANDLE hAfpServer,
IN LPWSTR lpwsVolumeName,
OUT LPBYTE * lpbBuffer
);
DWORD
AfpAdminVolumeDelete(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPWSTR lpwsVolumeName
);
DWORD
AfpAdminVolumeAdd(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPBYTE pBuffer
);
DWORD
AfpAdminInvalidVolumeEnum(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * lpbBuffer,
OUT LPDWORD lpdwEntriesRead
);
DWORD
AfpAdminInvalidVolumeDelete(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPWSTR lpwsVolumeName
);
DWORD
AfpAdminDirectoryGetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPWSTR lpwsPath,
OUT LPBYTE *ppAfpDirectoryInfo
);
DWORD
AfpAdminDirectorySetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPBYTE pAfpDirectoryInfo,
IN DWORD dwParmNum
);
DWORD
AfpAdminServerGetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE *ppAfpServerInfo
);
DWORD
AfpAdminServerSetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPBYTE pAfpServerInfo,
IN DWORD dwParmNum
);
DWORD
AfpAdminSessionEnum(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * lpbBuffer,
IN DWORD dwPrefMaxLen,
OUT LPDWORD lpdwEntriesRead,
OUT LPDWORD lpdwTotalEntries,
IN LPDWORD lpdwResumeHandle
);
DWORD
AfpAdminSessionClose(
IN AFP_SERVER_HANDLE hAfpServer,
IN DWORD dwSessionId
);
DWORD
AfpAdminConnectionEnum(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * lpbBuffer,
IN DWORD dwFilter,
IN DWORD dwId,
IN DWORD dwPrefMaxLen,
OUT LPDWORD lpdwEntriesRead,
OUT LPDWORD lpdwTotalEntries,
IN LPDWORD lpdwResumeHandle
);
DWORD
AfpAdminConnectionClose(
IN AFP_SERVER_HANDLE hAfpServer,
IN DWORD dwConnectionId
);
DWORD
AfpAdminFileEnum(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * lpbBuffer,
IN DWORD dwPrefMaxLen,
OUT LPDWORD lpdwEntriesRead,
OUT LPDWORD lpdwTotalEntries,
IN LPDWORD lpdwResumeHandle
);
DWORD
AfpAdminFileClose(
IN AFP_SERVER_HANDLE hAfpServer,
IN DWORD dwConnectionId
);
DWORD
AfpAdminETCMapGetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * ppbBuffer
);
DWORD
AfpAdminETCMapAdd(
IN AFP_SERVER_HANDLE hAfpServer,
IN PAFP_TYPE_CREATOR pAfpTypeCreator
);
DWORD
AfpAdminETCMapDelete(
IN AFP_SERVER_HANDLE hAfpServer,
IN PAFP_TYPE_CREATOR pAfpTypeCreator
);
DWORD
AfpAdminETCMapSetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
IN PAFP_TYPE_CREATOR pAfpTypeCreator
);
DWORD
AfpAdminETCMapAssociate(
IN AFP_SERVER_HANDLE hAfpServer,
IN PAFP_TYPE_CREATOR pAfpTypeCreator,
IN PAFP_EXTENSION pAfpExtension
);
DWORD
AfpAdminMessageSend(
IN AFP_SERVER_HANDLE hAfpServer,
IN PAFP_MESSAGE_INFO pAfpMessage
);
DWORD
AfpAdminStatisticsGet(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * ppbBuffer
);
DWORD
AfpAdminStatisticsGetEx(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * ppbBuffer
);
DWORD
AfpAdminStatisticsClear(
IN AFP_SERVER_HANDLE hAfpServer
);
DWORD
AfpAdminProfileGet(
IN AFP_SERVER_HANDLE hAfpServer,
OUT LPBYTE * ppbBuffer
);
DWORD
AfpAdminProfileClear(
IN AFP_SERVER_HANDLE hAfpServer
);
DWORD
AfpAdminFinderSetInfo(
IN AFP_SERVER_HANDLE hAfpServer,
IN LPWSTR pType,
IN LPWSTR pCreator,
IN LPWSTR pData,
IN LPWSTR pResource,
IN LPWSTR pTarget,
IN DWORD dwParmNum
);
#endif // _MACFILE_