diff options
Diffstat (limited to '')
-rw-r--r-- | public/sdk/inc/macfile.h | 911 |
1 files changed, 911 insertions, 0 deletions
diff --git a/public/sdk/inc/macfile.h b/public/sdk/inc/macfile.h new file mode 100644 index 000000000..06edc9929 --- /dev/null +++ b/public/sdk/inc/macfile.h @@ -0,0 +1,911 @@ +/* + +Copyright (c) 1992 Microsoft Corporation + +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_ + +// Used as RPC binding handle to server + +typedef ULONG AFP_SERVER_HANDLE; +typedef ULONG *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_MIN AFPERR_NoSuchGroup + +// 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_ALL ( AFP_SRVROPT_GUESTLOGONALLOWED \ + | AFP_SRVROPT_CLEARTEXTLOGONALLOWED \ + | AFP_SRVROPT_ALLOWSAVEDPASSWORD \ + | AFP_SRVROPT_4GB_VOLUMES \ + | 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_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) + +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) + +} 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_ + |