windows-nt/Source/XPSP1/NT/net/sfm/afp/server/afpconst.h

442 lines
14 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*
Copyright (c) 1992 Microsoft Corporation
Module Name:
afpconst.h
Abstract:
This module contains the Afp API function codes and error codes.
Author:
Jameel Hyder (microsoft!jameelh)
Revision History:
25 Apr 1992 Initial Version
Notes: Tab stop: 4
--*/
#ifndef _AFPCONST_
#define _AFPCONST_
/* The real AFP Function codes */
#define AFP_BYTE_RANGE_LOCK 0x01
#define AFP_CLOSE_VOL 0x02
#define AFP_CLOSE_DIR 0x03
#define AFP_CLOSE_FORK 0x04
#define AFP_COPY_FILE 0x05
#define AFP_CREATE_DIR 0x06
#define AFP_CREATE_FILE 0x07
#define AFP_DELETE 0x08
#define AFP_ENUMERATE 0x09
#define AFP_FLUSH 0x0A
#define AFP_FLUSH_FORK 0x0B
/************* 0C-0D ARE UNDEFINED *************/
#define AFP_GET_FORK_PARMS 0x0E
#define AFP_GET_SRVR_INFO 0x0F
#define AFP_GET_SRVR_PARMS 0x10
#define AFP_GET_VOL_PARMS 0x11
#define AFP_LOGIN 0x12
#define AFP_LOGIN_CONT 0x13
#define AFP_LOGOUT 0x14
#define AFP_MAP_ID 0x15
#define AFP_MAP_NAME 0x16
#define AFP_MOVE_AND_RENAME 0x17
#define AFP_OPEN_VOL 0x18
#define AFP_OPEN_DIR 0x19
#define AFP_OPEN_FORK 0x1A
#define AFP_READ 0x1B
#define AFP_RENAME 0x1C
#define AFP_SET_DIR_PARMS 0x1D
#define AFP_SET_FILE_PARMS 0x1E
#define AFP_SET_FORK_PARMS 0x1F
#define AFP_SET_VOL_PARMS 0x20
#define AFP_WRITE 0x21
#define AFP_GET_FILE_DIR_PARMS 0x22
#define AFP_SET_FILE_DIR_PARMS 0x23
#define AFP_CHANGE_PASSWORD 0x24
#define AFP_GET_USER_INFO 0x25
#define AFP_GET_SRVR_MSG 0x26
#define AFP_CREATE_ID 0x27
#define AFP_DELETE_ID 0x28
#define AFP_RESOLVE_ID 0x29
#define AFP_EXCHANGE_FILES 0x2A
#define AFP_CAT_SEARCH 0x2B
/************* 2C-2F ARE UNDEFINED *************/
#define AFP_OPEN_DT 0x30
#define AFP_CLOSE_DT 0x31
/************* 32 IS UNDEFINED *************/
#define AFP_GET_ICON 0x33
#define AFP_GET_ICON_INFO 0x34
#define AFP_ADD_APPL 0x35
#define AFP_REMOVE_APPL 0x36
#define AFP_GET_APPL 0x37
#define AFP_ADD_COMMENT 0x38
#define AFP_REMOVE_COMMENT 0x39
#define AFP_GET_COMMENT 0x3A
/************* 3B-BF ARE UNDEFINED *************/
#define AFP_ADD_ICON 0xC0
/************* C1-FE ARE UNDEFINED *************/
#define AFF_GET_DOMAIN_LIST 0xFF
/* AFP Error codes */
#define AFP_ERR_NONE 0
#define AFP_ERR_BASE (-5000)
#define AFP_ERR_ACCESS_DENIED (AFP_ERR_BASE-0)
#define AFP_ERR_AUTH_CONTINUE (AFP_ERR_BASE-1)
#define AFP_ERR_BAD_UAM (AFP_ERR_BASE-2)
#define AFP_ERR_BAD_VERSION (AFP_ERR_BASE-3)
#define AFP_ERR_BITMAP (AFP_ERR_BASE-4)
#define AFP_ERR_CANT_MOVE (AFP_ERR_BASE-5)
#define AFP_ERR_DENY_CONFLICT (AFP_ERR_BASE-6)
#define AFP_ERR_DIR_NOT_EMPTY (AFP_ERR_BASE-7)
#define AFP_ERR_DISK_FULL (AFP_ERR_BASE-8)
#define AFP_ERR_EOF (AFP_ERR_BASE-9)
#define AFP_ERR_FILE_BUSY (AFP_ERR_BASE-10)
#define AFP_ERR_FLAT_VOL (AFP_ERR_BASE-11)
#define AFP_ERR_ITEM_NOT_FOUND (AFP_ERR_BASE-12)
#define AFP_ERR_LOCK (AFP_ERR_BASE-13)
#define AFP_ERR_MISC (AFP_ERR_BASE-14)
#define AFP_ERR_NO_MORE_LOCKS (AFP_ERR_BASE-15)
#define AFP_ERR_NO_SERVER (AFP_ERR_BASE-16)
#define AFP_ERR_OBJECT_EXISTS (AFP_ERR_BASE-17)
#define AFP_ERR_OBJECT_NOT_FOUND (AFP_ERR_BASE-18)
#define AFP_ERR_PARAM (AFP_ERR_BASE-19)
#define AFP_ERR_RANGE_NOT_LOCKED (AFP_ERR_BASE-20)
#define AFP_ERR_RANGE_OVERLAP (AFP_ERR_BASE-21)
#define AFP_ERR_SESS_CLOSED (AFP_ERR_BASE-22)
#define AFP_ERR_USER_NOT_AUTH (AFP_ERR_BASE-23)
#define AFP_ERR_CALL_NOT_SUPPORTED (AFP_ERR_BASE-24)
#define AFP_ERR_OBJECT_TYPE (AFP_ERR_BASE-25)
#define AFP_ERR_TOO_MANY_FILES_OPEN (AFP_ERR_BASE-26)
#define AFP_ERR_SERVER_GOING_DOWN (AFP_ERR_BASE-27)
#define AFP_ERR_CANT_RENAME (AFP_ERR_BASE-28)
#define AFP_ERR_DIR_NOT_FOUND (AFP_ERR_BASE-29)
#define AFP_ERR_ICON_TYPE (AFP_ERR_BASE-30)
#define AFP_ERR_VOLUME_LOCKED (AFP_ERR_BASE-31)
#define AFP_ERR_OBJECT_LOCKED (AFP_ERR_BASE-32)
/************* -5033 IS Undefined *************/
#define AFP_ERR_ID_NOT_FOUND (AFP_ERR_BASE-34)
#define AFP_ERR_ID_EXISTS (AFP_ERR_BASE-35)
#define AFP_ERR_DIFF_VOL (AFP_ERR_BASE-36) // AfpExchangeFiles
#define AFP_ERR_CATALOG_CHANGED (AFP_ERR_BASE-37) // AfpCatSearch
#define AFP_ERR_SAME_OBJECT (AFP_ERR_BASE-38) // AfpExchangeFiles
#define AFP_ERR_BAD_ID (AFP_ERR_BASE-39)
#define AFP_ERR_PWD_SAME (AFP_ERR_BASE-40)
#define AFP_ERR_PWD_TOO_SHORT (AFP_ERR_BASE-41)
#define AFP_ERR_PWD_EXPIRED (AFP_ERR_BASE-42)
#define AFP_ERR_INSIDE_SHARE (AFP_ERR_BASE-43) // Specific to AppleShare
#define AFP_ERR_INSIDE_TRASH (AFP_ERR_BASE-44) // Specific to AppleShare
#define AFP_ERR_PWD_NEEDS_CHANGE (AFP_ERR_BASE-45) // Specific to AppleShare
// The following error codes are used internally and never returned to the
// client.
#define AFP_ERR_QUEUE -7000
#define AFP_ERR_DEFER -7001
#define AFP_ERR_WRITE_LOCK_REQUIRED -7002
#define AFP_ERR_EXTENDED -7003
#define AFP_ERR_REQUEUE -7004
// The following codes are used with the custom UAM to indicate exact
// reasons for logon failures and change password failures
#define AFP_ERR_EXTENDED_ERRORS -13000
#define AFP_ERR_ACCOUNT_DISABLED -13002
#define AFP_ERR_INVALID_WORKSTATION -13003
#define AFP_ERR_INVALID_LOGON_HOURS -13004
#define AFP_ERR_PASSWORD_EXPIRED -13005
#define AFP_ERR_PASSWORD_CANT_CHANGE -13006
#define AFP_ERR_PASSWORD_HIST_CONFLICT -13007
#define AFP_ERR_PASSWORD_TOO_SHORT -13008
#define AFP_ERR_PASSWORD_TOO_RECENT -13009
#define AFP_ERR_PASSWORD_RESTRICTED -13010
#define AFP_ERR_ACCOUNT_RESTRICTED -13011
// The following error is returned from a logon when the LsaLogonUser
// call returns STATUS_LICENSE_QUOTA_EXCEEDED. The mac will map this
// to the correct dialog no matter what UAM is used.
#define ASP_SERVER_BUSY -1071
// This is GROSS but we need to do it. Else we get TONS of warnings
#define True (BOOLEAN)TRUE
#define False (BOOLEAN)FALSE
typedef LONG AFPSTATUS;
typedef LONG AFPTIME, *PAFPTIME;
typedef LARGE_INTEGER FORKOFFST, *PFORKOFFST;
typedef LARGE_INTEGER FORKSIZE, *PFORKSIZE;
#ifndef DWORD
typedef ULONG DWORD;
typedef DWORD *PDWORD;
typedef DWORD *LPDWORD;
#endif
#ifndef BYTE
typedef UCHAR BYTE;
typedef BYTE *PBYTE;
typedef BYTE *LPBYTE;
#endif
/*
* The following macros deal with on-the-wire integer and long values
*
* On the wire format is big-endian i.e. a long value of 0x01020304 is
* represented as 01 02 03 04. Similarly an int value of 0x0102 is
* represented as 01 02.
*
* The host format is not assumed since it will vary from processor to
* processor.
*/
// Get a byte from on-the-wire format to a short in the host format
#define GETBYTE2SHORT(DstPtr, SrcPtr) \
*(PUSHORT)(DstPtr) = (USHORT) (*(PBYTE)(SrcPtr))
// Get a byte from on-the-wire format to a short in the host format
#define GETBYTE2DWORD(DstPtr, SrcPtr) \
*(PDWORD)(DstPtr) = (DWORD) (*(PBYTE)(SrcPtr))
// Get a short from on-the-wire format to a dword in the host format
#define GETSHORT2DWORD(DstPtr, SrcPtr) \
*(PDWORD)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 8) + \
(*((PBYTE)(SrcPtr)+1) ))
// Get a short from on-the-wire format to a dword in the host format
#define GETSHORT2SHORT(DstPtr, SrcPtr) \
*(PUSHORT)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 8) + \
(*((PBYTE)(SrcPtr)+1) ))
// Get a dword from on-the-wire format to a dword in the host format
#define GETDWORD2DWORD(DstPtr, SrcPtr) \
*(PDWORD)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 24) + \
(*((PBYTE)(SrcPtr)+1) << 16) + \
(*((PBYTE)(SrcPtr)+2) << 8) + \
(*((PBYTE)(SrcPtr)+3) ))
// Get a dword from on-the-wire format to a dword in the same format but
// also watch out for alignment
#define GETDWORD2DWORD_NOCONV(DstPtr, SrcPtr) \
*((PBYTE)(DstPtr)+0) = *((PBYTE)(SrcPtr)+0); \
*((PBYTE)(DstPtr)+1) = *((PBYTE)(SrcPtr)+1); \
*((PBYTE)(DstPtr)+2) = *((PBYTE)(SrcPtr)+2); \
*((PBYTE)(DstPtr)+3) = *((PBYTE)(SrcPtr)+3);
// Put a dword from the host format to a short to on-the-wire format
#define PUTBYTE2BYTE(DstPtr, Src) \
*((PBYTE)(DstPtr)) = (BYTE)(Src)
// Put a dword from the host format to a short to on-the-wire format
#define PUTSHORT2BYTE(DstPtr, Src) \
*((PBYTE)(DstPtr)) = ((USHORT)(Src) % 256)
// Put a dword from the host format to a short to on-the-wire format
#define PUTSHORT2SHORT(DstPtr, Src) \
*((PBYTE)(DstPtr)+0) = (BYTE) ((USHORT)(Src) >> 8), \
*((PBYTE)(DstPtr)+1) = (BYTE)(Src)
// Put a dword from the host format to a byte to on-the-wire format
#define PUTDWORD2BYTE(DstPtr, Src) \
*(PBYTE)(DstPtr) = (BYTE)(Src)
// Put a dword from the host format to a short to on-the-wire format
#define PUTDWORD2SHORT(DstPtr, Src) \
*((PBYTE)(DstPtr)+0) = (BYTE) ((DWORD)(Src) >> 8), \
*((PBYTE)(DstPtr)+1) = (BYTE) (Src)
// Put a dword from the host format to a dword to on-the-wire format
#define PUTDWORD2DWORD(DstPtr, Src) \
*((PBYTE)(DstPtr)+0) = (BYTE) ((DWORD)(Src) >> 24), \
*((PBYTE)(DstPtr)+1) = (BYTE) ((DWORD)(Src) >> 16), \
*((PBYTE)(DstPtr)+2) = (BYTE) ((DWORD)(Src) >> 8), \
*((PBYTE)(DstPtr)+3) = (BYTE) (Src)
// Put a BYTE[4] array into another BYTE4 array.
#define PUTBYTE42BYTE4(DstPtr, SrcPtr) \
*((PBYTE)(DstPtr)+0) = *((PBYTE)(SrcPtr)+0), \
*((PBYTE)(DstPtr)+1) = *((PBYTE)(SrcPtr)+1), \
*((PBYTE)(DstPtr)+2) = *((PBYTE)(SrcPtr)+2), \
*((PBYTE)(DstPtr)+3) = *((PBYTE)(SrcPtr)+3)
/* AFP Miscellaneous values */
#define AFP_SHORTNAME 1
#define AFP_LONGNAME 2
#define VALIDPATHTYPE(PathType) \
(PathType == AFP_LONGNAME || PathType == AFP_SHORTNAME)
#define AFP_HARDCREATE_FLAG 0x80
#define AFP_VOLUMES_MAX 255 // Count of volumes that fit in a byte
#define AFP_FILENAME_LEN 31 // Maximum file name length
#define AFP_SHORTNAME_LEN 12 // 8.3
#define AFP_LONGNAME_LEN 31
#define AFP_MAXCOMMENTSIZE 199
#define AFP_MAXPWDSIZE 8 // Cleartext password length
#define BEGINNING_OF_TIME 0x80000000
#define DAYS_FROM_1980_2000 7305L // (20*365 + 5)
#define SECONDS_PER_DAY 86400L // 24*60*60
#define SECONDS_FROM_1980_2000 SECONDS_PER_DAY * DAYS_FROM_1980_2000
#define NUM_100ns_PER_SECOND 10000000L
#define ASP_MAX_STATUS_BUF 512
#define ASP_QUANTUM 4624
#define AFP_SERVER_SIGNATURE *(PDWORD)"AFP"
#define AFP_SERVER_SIGNATURE_INITIDDB *(PDWORD)"INI"
#define AFP_SERVER_SIGNATURE_MANUALSTOP *(PDWORD)"MAN"
#define AFP_SERVER_VERSION 0x00010000
#define AFP_SERVER_VERSION2 0x00020000
// AFP Version strings and values
#define AFP_NUM_VERSIONS 3
#define AFP_VER_20 0
#define AFP_VER_20_NAME "AFPVersion 2.0"
#define AFP_VER_21 1
#define AFP_VER_21_NAME "AFPVersion 2.1"
#define AFP_VER_22 2
#define AFP_VER_22_NAME "AFP2.2"
// Name to use for the Logon Process
#define AFP_LOGON_PROCESS_NAME "MSAfpSrv"
#define AFP_MACHINE_TYPE_STR "Windows NT"
#define AFP_MACHINE_TYPE_LEN sizeof(AFP_MACHINE_TYPE_STR) - 1
#define AFP_DEFAULT_WORKSTATION L"Macintosh"
#define AFP_DEFAULT_WORKSTATION_A "Macintosh"
#define AFPSERVER_VOLUME_ICON_FILE_ANSI {'I','C','O','N', 0x0D}
#define AFP_ID_PARENT_OF_ROOT 1
#define AFP_ID_ROOT 2
#define AFP_ID_NETWORK_TRASH 3
#define AFP_FIRST_DIRID 4
#define AFP_MAX_DIRID MAXULONG
// NTFS Stream names
#define AFP_IDDB_STREAM L":AFP_IdIndex"
#define AFP_DT_STREAM L":AFP_DeskTop"
#define AFP_RESC_STREAM L":AFP_Resource"
#define AFP_INFO_STREAM L":AFP_AfpInfo"
#define AFP_COMM_STREAM L":Comments"
#define AFP_DATA_STREAM L""
#define AFP_MAX_STREAMNAME sizeof(AFP_RESC_STREAM)/sizeof(WCHAR)
#define BIG_PATH_LEN (4*(AFP_FILENAME_LEN + 1))
#define FULL_DATA_STREAM_NAME L"::$DATA"
#define FULL_COMMENT_STREAM_NAME L":Comments:$DATA"
#define FULL_RESOURCE_STREAM_NAME L":AFP_Resource:$DATA"
#define FULL_INFO_STREAM_NAME L":AFP_AfpInfo:$DATA"
// Supported file system names
#define AFP_NTFS L"NTFS"
#define AFP_CDFS L"CDFS"
#define AFP_AHFS L"AHFS"
// Length of unicode string Buffer to send when querying the FS name
#define AFP_FSNAME_BUFLEN 30
#if DBG
#define POOL_OVERHEAD (12+8) // 12 for AfpAllocMemory() & 8 for ExAllocatePool()
#else
#define POOL_OVERHEAD (8+8) // 8 for AfpAllocMemory() & 8 for ExAllocatePool()
#endif
// Length of buffer to use for enumeration of directories
#define AFP_ENUMBUF_SIZE (16*1024)
// Prepended to full path of volume root in order to open the volume root dir
#define AFP_DOSDEVICES L"\\DOSDEVICES\\"
// Name of the Macintosh System 7.x network trash directory
#define AFP_NWTRASH_NAME L"Network Trash Folder"
#define AFP_NWTRASH_NAME_U L"Network Trash Folder"
#define AFP_NWTRASH_NAME_A "Network Trash Folder"
// Default Type/Creator and Extensions
#define AFP_DEFAULT_ETC_EXT "* "
#define AFP_DEFAULT_ETC_CREATOR "LMAN"
#define AFP_DEFAULT_ETC_TYPE "TEXT"
#define AFP_MAX_ETCMAP_ENTRIES MAXLONG
#define AFP_MAX_FREE_ETCMAP_ENTRIES 16
#define AFP_SERVER_TYPE "AFPServer"
#define AFP_SERVER_ZONE "*"
typedef struct _PascalString
{
BYTE ps_Length;
BYTE ps_String[1];
} *PASCALSTR;
#define SIZE_PASCALSTR(Len) ((Len) + sizeof(struct _PascalString) - 1)
typedef struct _AfpPathString
{
BYTE aps_PathType;
BYTE aps_Length;
BYTE aps_Path[1];
} *AFPPATHSTR;
// Mac Finder Information layout
// see pg. 9-37 of Inside Macintosh vol. 6
#define FINDER_FLAG_INVISIBLE 0x40 // fd_Attr1
#define FINDER_FLAG_SET 0x01 // fd_Attr1
#define FINDER_FLAG_HAS_CUSTOM_ICON 0x04 // fd_Attr1
#define FINDER_INFO_SIZE 32
typedef struct _FinderInfo
{
// Force DWORD alignment
union
{
BYTE fd_Type[4];
DWORD fd_TypeD;
};
union
{
BYTE fd_Creator[4];
DWORD fd_CreatorD;
};
BYTE fd_Attr1; // Bits 8-15
BYTE fd_Attr2; // Bits 0-7
BYTE fd_Location[4];
BYTE fd_FDWindow[2];
BYTE fd_OtherStuff[16];
} FINDERINFO, *PFINDERINFO;
// Apple-II (ProDOS) information.
// default values for newly discovered items
#define PRODOS_TYPE_FILE 0x04 // corresponds to finder fdType 'TEXT'
#define PRODOS_TYPE_DIR 0x0F
#define PRODOS_AUX_DIR 0x02 // actually 0x0200
// some other finder fdType to prodos FileType mapping values
#define PRODOS_FILETYPE_PSYS 0xFF
#define PRODOS_FILETYPE_PS16 0xB3
#define PRODOS_INFO_SIZE 6
typedef struct
{
BYTE pd_FileType[2];
BYTE pd_AuxType[4];
} PRODOSINFO, *PPRODOSINFO;
#endif // _AFPCONST_