Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1338 lines
62 KiB

/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
frserror.c
Abstract:
FRS Error description tables. Contains tables for FRS Errors,
Win32 Errors, Jet Errors and NT Status Codes.
Author:
Billy J. Fuller 01-Apr-1997 Temporary
David A. Orbits 11-Jul-1999
Rewritten to integrate FrsError Codes with Billy's error codes and
handle the problem in a more general way.
Never enuf time to do it right, always enuf time to do it over.
Environment
User mode winnt
--*/
#include <ntreppch.h>
#pragma hdrstop
#include <frs.h>
//
// FRS Format Descriptors.
//
#define FFD_NONE NULL
#define FFD_S "s"
#define FFD_SS "ss"
#define FFD_SSS "sss"
#define FFD_SSSS "ssss"
#define FFD_SSSSS "sssss"
#define FFD_W "w"
#define FFD_WW "ww"
#define FFD_WWW "www"
#define FFD_WWWW "wwww"
#define FFD_WWWWW "wwwww"
#define FFD_WWWWWW "wwwwww"
#define FFD_D "d"
#define FFD_DD "dd"
#define FFD_DDD "ddd"
#define FFD_DW "dw"
#define FFD_WD "wd"
#define FFD_WWD "wwd"
typedef struct _FRS_ERROR_MSG_TABLE {
ULONG ErrorCode; // Error code number for message lookup.
//FRS_ERROR_SEVERITY FrsErrorSeverity;
PCHAR ErrorMsg; // Error Message Code.
PCHAR LongMsg; // Error Message String.
//DWORD EventCode; // Event log error code
//ULONG Flags; // See below.
} FRS_ERROR_MSG_TABLE, *PFRS_ERROR_MSG_TABLE;
/******************************************************************************
*******************************************************************************
** **
** **
** F R S E R R O R D E S C R I P T I O N T A B L E **
** **
** **
*******************************************************************************
******************************************************************************/
FRS_ERROR_MSG_TABLE FrsErrorMsgTable[] = {
{FrsErrorAccess, "FrsErrorAccess" , "couldn't access a file or the db"},
{FrsErrorBadOutLogPartnerData, "FrsErrorBadOutLogPartnerData" , "Either the data was corrupt, unavail or was wrong"},
{FrsErrorBadParam, "FrsErrorBadParam" , "Bad parameter to a function"},
{FrsErrorBadPathname, "FrsErrorBadPathname" , "Invalid path name" },
{FrsErrorBufferOverflow, "FrsErrorBufferOverflow" , "Buffer overflow NTSTATUS"},
{FrsErrorCantMoveOut, "FrsErrorCantMoveOut" , "Request for a Moveout of a non-empty directory failed"},
{FrsErrorChgOrderAbort, "FrsErrorChgOrderAbort" , "Change order processing has been aborted"},
{FrsErrorCmdPktTimeOut, "FrsErrorCmdPktTimeOut" , "Command packet timeout"},
{FrsErrorCmdSrvFailed, "FrsErrorCmdSrvFailed" , "A command server request failed to get submitted"},
{FrsErrorConflict, "FrsErrorConflict" , "Record or table create conflict"},
{FrsErrorDampened, "FrsErrorDampened" , "This request is suppressed because it has already been seen"},
{FrsErrorDatabaseCorrupted, "FrsErrorDatabaseCorrupted" , "not a db or a scrambled db"},
{FrsErrorDatabaseNotFound, "FrsErrorDatabaseNotFound" , "no db or path to db is in error"},
{FrsErrorDbWriteConflict, "FrsErrorDbWriteConflict" , "DB update conflict if two sessions try to update the same record"},
{FrsErrorDeleteRequested, "FrsErrorDeleteRequested" , "Enum function status return to delete entry"},
{FrsErrorDirCreateFailed, "FrsErrorDirCreateFailed" , "We failed to create a new DIR. This stops repl"},
{FrsErrorDirNotEmpty, "FrsErrorDirNotEmpty" , "Directory not empty" },
{FrsErrorDiskSpace, "FrsErrorDiskSpace" , "out of disk space"},
{FrsErrorEndOfTable, "FrsErrorEndOfTable" , "No next record, end of table hit"},
{FrsErrorFileExists, "FrsErrorFileExists" , "File already Eeists" },
{FrsErrorFoundKey, "FrsErrorFoundKey" , "The Key being searched by QHashEnumerateTable was found"},
{FrsErrorIdtFileIsDeleted, "FrsErrorIdtFileIsDeleted" , "File is marked deleted in IDTable"},
{FrsErrorInfo, "FrsErrorInfo" , "informational error, e.g. JET_errObjectNotFound"},
{FrsErrorInternalError, "FrsErrorInternalError" , "unexpected error occurred - catchall"},
{FrsErrorInvalidChangeOrder, "FrsErrorInvalidChangeOrder" , "Invalid change order"},
{FrsErrorInvalidGuid, "FrsErrorInvalidGuid" , "The generated Guid is missing the net address"},
{FrsErrorInvalidHandle, "FrsErrorInvalidHandle" , "Invalid File Handle"},
{FrsErrorInvalidOperation, "FrsErrorInvalidOperation" , "Invalid operation requested"},
{FrsErrorInvalidRegistryParam, "FrsErrorInvalidRegistryParam" , "Invalid registry parameter"},
{FrsErrorJetSecIndexCorrupted, "FrsErrorJetSecIndexCorrupted" , "Jet (upgrade, collating, jet err -1414)"},
{FrsErrorJournalInitFailed, "FrsErrorJournalInitFailed" , "The NTFS journal failed to initialize"},
{FrsErrorJournalPauseFailed, "FrsErrorJournalPauseFailed" , "The NTFS journal failed to Pause, could be timeout"},
{FrsErrorJournalReplicaStop, "FrsErrorJournalReplicaStop" , "Failed to detatch the replica from The journal"},
{FrsErrorJournalStartFailed, "FrsErrorJournalStartFailed" , "The NTFS journal failed to start"},
{FrsErrorJournalStateWrong, "FrsErrorJournalStateWrong" , "The NTFS journal is in an unexpected state"},
{FrsErrorJournalWrapError, "FrsErrorJournalWrapError" , "Initial NTFS journal record not present. Journal has wrapped"},
{FrsErrorKeyDuplicate, "FrsErrorKeyDuplicate" , "An attempt to insert a record with a duplicate key"},
{FrsErrorMoreWork, "FrsErrorMoreWork" , "There is more work to do on this command / operation"},
{FrsErrorNameMorphConflict, "FrsErrorNameMorphConflict" , "File name morph conflict was detected"},
{FrsErrorNoOpenJournals, "FrsErrorNoOpenJournals" , "Can't start replication because no journals were opened"},
{FrsErrorNoPrivileges, "FrsErrorNoPrivileges" , "Couldn't get the necessary privileges to run"},
{FrsErrorNotFound, "FrsErrorNotFound" , "Record or table not found"},
{FrsErrorNotInitialized, "FrsErrorNotInitialized" , "Function called without proper initialization"},
{FrsErrorOplockNotGranted, "FrsErrorOplockNotGranted" , "Op lock not granted" },
{FrsErrorPartnerActivateFailed, "FrsErrorPartnerActivateFailed", "Failed to activate an outbound partner"},
{FrsErrorPreInstallDirectory, "FrsErrorPreInstallDirectory" , "creating preinstall directory"},
{FrsErrorPreinstallCreFail, "FrsErrorPreinstallCreFail" , "Failed to create the pre-install dir"},
{FrsErrorPrepareRoot, "FrsErrorPrepareRoot" , "Could not prepare the root dir for replication, bad path? share viol?"},
{FrsErrorQueueIsRundown, "FrsErrorQueueIsRundown" , "The request queue has been rundown"},
{FrsErrorRecordLocked, "FrsErrorRecordLocked" , "The record being accessed is locked"},
{FrsErrorReplicaPhase1Failed, "FrsErrorReplicaPhase1Failed" , "Phase 1 of replica set init failed"},
{FrsErrorReplicaPhase2Failed, "FrsErrorReplicaPhase2Failed" , "Phase 2 of replica set init failed"},
{FrsErrorReplicaRootDirOpenFail,"FrsErrorReplicaRootDirOpenFail", "Failed to open the replica tree root dir"},
{FrsErrorReplicaSetTombstoned, "FrsErrorReplicaSetTombstoned" , "Replica set is marked for deletion"},
{FrsErrorRequestCancelled, "FrsErrorRequestCancelled" , "Request Cancelled" },
{FrsErrorResource, "FrsErrorResource" , "Resource limit e.g. handles or memory hit"},
{FrsErrorResourceInUse, "FrsErrorResourceInUse" , "A resource required by this operation is in use"},
{FrsErrorRetry, "FrsErrorRetry" , "Error Retry" },
{FrsErrorSessionNotClosed, "FrsErrorSessionNotClosed" , "Failed to close all RtCtx's in replica set"},
{FrsErrorSharingViolation, "FrsErrorSharingViolation" , "File sharing violation" },
{FrsErrorShuttingDown, "FrsErrorShuttingDown" , "Service shutdown in progress"},
{FrsErrorStageDirOpenFail, "FrsErrorStageDirOpenFail" , "Failed to open the staging dir"},
{FrsErrorStageFileDelFailed, "FrsErrorStageFileDelFailed" , "An attempt to delete the staging file failed"},
{FrsErrorSuccess, "FrsErrorSuccess" , "Success"},
{FrsErrorTerminateEnum, "FrsErrorTerminateEnum" , "Enum function status return to end enumeration"},
{FrsErrorTunnelConflict, "FrsErrorTunnelConflict" , "oid conflict with id table entry (resolved)"},
{FrsErrorTunnelConflictRejectCO,"FrsErrorTunnelConflictRejectCO", "oid conflict with id table entry (CO rejected)"},
{FrsErrorUnjoining, "FrsErrorUnjoining" , "cxtion is still unjoining"},
{FrsErrorUnsupportedFileSystem, "FrsErrorUnsupportedFileSystem", "The file system on this volume does provide the features required by FRS"},
{FrsErrorVVSlotNotFound, "FrsErrorVVSlotNotFound" , "VVSlot not found on VVretire of Out of Order CO"},
{FrsErrorVolumeRootDirOpenFail, "FrsErrorVolumeRootDirOpenFail", "Failed to open the volume root directory for this replica set"},
{FrsErrorVvChecksum, "FrsErrorVvChecksum" , "version vector checksum mismatch"},
{FrsErrorVvLength, "FrsErrorVvLength" , "vers vector length mismatch"},
{FrsErrorVvRevision, "FrsErrorVvRevision" , "Vers Vector revision mismatch"},
{FRS_ERROR_LISTEN , "FrsErrorListen" , "FrsErrorListen" },
{FRS_ERROR_REGISTEREP , "FrsErrorRegisterP" , "FrsErrorRegisterP" },
{FRS_ERROR_REGISTERIF , "FrsErrorRegisterIF" , "FrsErrorRegisterIF" },
{FRS_ERROR_INQ_BINDINGS , "FrsErrorIngBindings" , "FrsErrorIngBindings" },
{FRS_ERROR_PROTSEQ , "FrsErrorProtSeq" , "FrsErrorProtSeq" },
//
// New error codes that trigger a non_auth restore.
//
{FrsErrorMismatchedVolumeSerialNumber , "FrsErrorMismatchedVolumeSerialNumber" , "The Volume serial number from DB does not match the one from FileSystem." },
{FrsErrorMismatchedReplicaRootObjectId, "FrsErrorMismatchedReplicaRootObjectId", "The Replica root's ObjectID from DB does not match the one from FileSystem." },
{FrsErrorMismatchedReplicaRootFileId , "FrsErrorMismatchedReplicaRootFileId" , "The Replica root's FID from DB does not match the one from FileSystem." },
{FrsErrorMismatchedJournalId , "FrsErrorMismatchedJournalId" , "The Journal ID from DB does not match the one from FileSystem." },
{MAXULONG, NULL, NULL}
};
//
// If code does not appear in above list it gets added to this list.
//
#define SIZE_OF_FRS_EXTENDED_MSG_TABLE 20
FRS_ERROR_MSG_TABLE FrsErrorMsgTableExt[SIZE_OF_FRS_EXTENDED_MSG_TABLE];
ULONG FrsErrorMsgTableExtUsed = 0;
/******************************************************************************
*******************************************************************************
** **
** **
** W I N 3 2 E R R O R D E S C R I P T I O N T A B L E **
** (Internal Short Version for Trace Log Only) **
** **
*******************************************************************************
******************************************************************************/
typedef struct _FRS_WIN32_ERROR_MSG_TABLE {
ULONG ErrorCode; // Error code number for message lookup.
PCHAR ErrorMsg; // Error Message String.
} FRS_WIN32_ERROR_MSG_TABLE, *PFRS_WIN32_ERROR_MSG_TABLE;
//
// Some names for the Win32 Error codes.
//
FRS_WIN32_ERROR_MSG_TABLE FrsWin32ErrorMsgTable[] = {
{E_UNEXPECTED ,"E_UNEXPECTED"},
{EPT_S_NOT_REGISTERED ,"EPT_S_NOT_REGISTERED"},
{ERROR_ACCESS_DENIED ,"ERROR_ACCESS_DENIED"},
{ERROR_ALREADY_EXISTS ,"ERROR_ALREADY_EXISTS"},
{ERROR_BAD_COMMAND ,"ERROR_BAD_COMMAND"},
{ERROR_BADKEY ,"ERROR_BADKEY"},
{ERROR_BAD_PATHNAME ,"ERROR_BAD_PATHNAME"},
{ERROR_BUSY ,"ERROR_BUSY"},
{ERROR_CALL_NOT_IMPLEMENTED ,"ERROR_CALL_NOT_IMPLEMENTED"},
{ERROR_CANCELLED ,"ERROR_CANCELLED"},
{ERROR_CANNOT_MAKE ,"ERROR_CANNOT_MAKE"},
{ERROR_CANTREAD ,"ERROR_CANTREAD"},
{ERROR_CANT_ACCESS_FILE ,"ERROR_CANT_ACCESS_FILE"}, // 0xc0000279 STATUS_IO_REPARSE_TAG_NOT_HANDLED
{ERROR_CAN_NOT_COMPLETE ,"ERROR_CAN_NOT_COMPLETE"},
{ERROR_COMMITMENT_LIMIT ,"ERROR_COMMITMENT_LIMIT"},
{ERROR_CRC ,"ERROR_CRC"}, // STATUS_DATA_ERROR from journal read
{ERROR_CURRENT_DIRECTORY ,"ERROR_CURRENT_DIRECTORY"},
{ERROR_DIRECTORY ,"ERROR_DIRECTORY"},
{ERROR_DIR_NOT_EMPTY ,"ERROR_DIR_NOT_EMPTY"},
{ERROR_DISK_FULL ,"ERROR_DISK_FULL"},
{ERROR_DUP_NAME ,"ERROR_DUP_NAME"},
{ERROR_ENVVAR_NOT_FOUND ,"ERROR_ENVVAR_NOT_FOUND"},
{ERROR_FILE_EXISTS ,"ERROR_FILE_EXISTS"},
{ERROR_FILE_NOT_FOUND ,"ERROR_FILE_NOT_FOUND"},
{ERROR_FILENAME_EXCED_RANGE ,"ERROR_FILENAME_EXCED_RANGE"},
{ERROR_GEN_FAILURE ,"ERROR_GEN_FAILURE"},
{ERROR_HANDLE_DISK_FULL ,"ERROR_HANDLE_DISK_FULL"},
{ERROR_HANDLE_EOF ,"ERROR_HANDLE_EOF"},
{ERROR_INSUFFICIENT_BUFFER ,"ERROR_INSUFFICIENT_BUFFER"},
{ERROR_INVALID_ACCESS ,"ERROR_INVALID_ACCESS"},
{ERROR_INVALID_ACCOUNT_NAME ,"ERROR_INVALID_ACCOUNT_NAME"},
{ERROR_INVALID_ADDRESS ,"ERROR_INVALID_ADDRESS"},
{ERROR_INVALID_BLOCK ,"ERROR_INVALID_BLOCK"},
{ERROR_INVALID_COMPUTERNAME ,"ERROR_INVALID_COMPUTERNAME"},
{ERROR_INVALID_DATA ,"ERROR_INVALID_DATA"},
{ERROR_INVALID_FUNCTION ,"ERROR_INVALID_FUNCTION"},
{ERROR_INVALID_HANDLE ,"ERROR_INVALID_HANDLE"},
{ERROR_INVALID_NAME ,"ERROR_INVALID_NAME"},
{ERROR_INVALID_OPERATION ,"ERROR_INVALID_OPERATION"},
{ERROR_INVALID_PARAMETER ,"ERROR_INVALID_PARAMETER"},
{ERROR_INVALID_STATE ,"ERROR_INVALID_STATE"},
{ERROR_INVALID_USER_BUFFER ,"ERROR_INVALID_USER_BUFFER"},
{ERROR_IO_DEVICE ,"ERROR_IO_DEVICE"},
{ERROR_IO_PENDING ,"ERROR_IO_PENDING"},
{ERROR_JOURNAL_DELETE_IN_PROGRESS ,"ERROR_JOURNAL_DELETE_IN_PROGRESS"},
{ERROR_JOURNAL_ENTRY_DELETED ,"ERROR_JOURNAL_ENTRY_DELETED"},
{ERROR_JOURNAL_NOT_ACTIVE ,"ERROR_JOURNAL_NOT_ACTIVE"},
{ERROR_LOCK_VIOLATION ,"ERROR_LOCK_VIOLATION"},
{ERROR_LOGON_FAILURE ,"ERROR_LOGON_FAILURE"},
{ERROR_MOD_NOT_FOUND ,"ERROR_MOD_NOT_FOUND"},
{ERROR_MORE_DATA ,"ERROR_MORE_DATA"},
{ERROR_NETWORK_BUSY ,"ERROR_NETWORK_BUSY"},
{ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ,"ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT"},
{ERROR_NONE_MAPPED ,"ERROR_NONE_MAPPED"},
{ERROR_NOT_AUTHENTICATED ,"ERROR_NOT_AUTHENTICATED"},
{ERROR_NOT_ENOUGH_MEMORY ,"ERROR_NOT_ENOUGH_MEMORY"},
{ERROR_NOT_FOUND ,"ERROR_NOT_FOUND"},
{ERROR_NOT_READY ,"ERROR_NOT_READY"},
{ERROR_NOT_SUPPORTED ,"ERROR_NOT_SUPPORTED"},
{ERROR_NOACCESS ,"ERROR_NOACCESS (AccessViolation)"},
{ERROR_NO_DATA ,"ERROR_NO_DATA"},
{ERROR_NO_MORE_FILES ,"ERROR_NO_MORE_FILES"},
{ERROR_NO_MORE_ITEMS ,"ERROR_NO_MORE_ITEMS"},
{ERROR_NO_SECURITY_ON_OBJECT ,"ERROR_NO_SECURITY_ON_OBJECT"},
{ERROR_NO_SUCH_DOMAIN ,"ERROR_NO_SUCH_DOMAIN"},
{ERROR_NO_SUCH_USER ,"ERROR_NO_SUCH_USER"},
{ERROR_NO_SYSTEM_RESOURCES ,"ERROR_NO_SYSTEM_RESOURCES"},
{ERROR_NO_TOKEN ,"ERROR_NO_TOKEN"},
{ERROR_OPEN_FAILED ,"ERROR_OPEN_FAILED"},
{ERROR_OPERATION_ABORTED ,"ERROR_OPERATION_ABORTED"},
{ERROR_OPLOCK_NOT_GRANTED ,"ERROR_OPLOCK_NOT_GRANTED"},
{ERROR_OUTOFMEMORY ,"ERROR_OUTOFMEMORY"},
{ERROR_PARTIAL_COPY ,"ERROR_PARTIAL_COPY"},
{ERROR_PATH_NOT_FOUND ,"ERROR_PATH_NOT_FOUND"},
{ERROR_PIPE_CONNECTED ,"ERROR_PIPE_CONNECTED"},
{ERROR_PROCESS_ABORTED ,"ERROR_PROCESS_ABORTED"},
{ERROR_REQUEST_ABORTED ,"ERROR_REQUEST_ABORTED"},
{ERROR_RETRY ,"ERROR_RETRY"},
{ERROR_REVISION_MISMATCH ,"ERROR_REVISION_MISMATCH"},
{ERROR_SEEK ,"ERROR_SEEK"},
{ERROR_SEM_OWNER_DIED ,"ERROR_SEM_OWNER_DIED"},
{ERROR_SEM_TIMEOUT ,"ERROR_SEM_TIMEOUT"},
{ERROR_SERVICE_ALREADY_RUNNING ,"ERROR_SERVICE_ALREADY_RUNNING"},
{ERROR_SERVICE_DOES_NOT_EXIST ,"ERROR_SERVICE_DOES_NOT_EXIST"},
{ERROR_SERVICE_EXISTS ,"ERROR_SERVICE_EXISTS"},
{ERROR_SERVICE_MARKED_FOR_DELETE ,"ERROR_SERVICE_MARKED_FOR_DELETE"},
{ERROR_SERVICE_NOT_ACTIVE ,"ERROR_SERVICE_NOT_ACTIVE"},
{ERROR_SERVICE_REQUEST_TIMEOUT ,"ERROR_SERVICE_REQUEST_TIMEOUT"},
{ERROR_SERVICE_SPECIFIC_ERROR ,"ERROR_SERVICE_SPECIFIC_ERROR"},
{ERROR_SHARING_VIOLATION ,"ERROR_SHARING_VIOLATION"},
{ERROR_SUCCESS ,"ERROR_SUCCESS"},
{ERROR_TIMEOUT ,"ERROR_TIMEOUT"},
{ERROR_TOO_MANY_OPEN_FILES ,"ERROR_TOO_MANY_OPEN_FILES"},
{ERROR_TRUSTED_DOMAIN_FAILURE ,"ERROR_TRUSTED_DOMAIN_FAILURE"},
{ERROR_UNEXP_NET_ERR ,"ERROR_UNEXP_NET_ERR"},
{FRS_ERR_INVALID_API_SEQUENCE ,"FRS_ERR_INVALID_API_SEQUENCE"},
{FRS_ERR_STARTING_SERVICE ,"FRS_ERR_STARTING_SERVICE"},
{FRS_ERR_STOPPING_SERVICE ,"FRS_ERR_STOPPING_SERVICE"},
{FRS_ERR_INTERNAL_API ,"FRS_ERR_INTERNAL_API"},
{FRS_ERR_INTERNAL ,"FRS_ERR_INTERNAL"},
{FRS_ERR_SERVICE_COMM ,"FRS_ERR_SERVICE_COMM"},
{FRS_ERR_INSUFFICIENT_PRIV ,"FRS_ERR_INSUFFICIENT_PRIV"},
{FRS_ERR_AUTHENTICATION ,"FRS_ERR_AUTHENTICATION"},
{FRS_ERR_PARENT_INSUFFICIENT_PRIV ,"FRS_ERR_PARENT_INSUFFICIENT_PRIV"},
{FRS_ERR_PARENT_AUTHENTICATION ,"FRS_ERR_PARENT_AUTHENTICATION"},
{FRS_ERR_CHILD_TO_PARENT_COMM ,"FRS_ERR_CHILD_TO_PARENT_COMM"},
{FRS_ERR_PARENT_TO_CHILD_COMM ,"FRS_ERR_PARENT_TO_CHILD_COMM"},
{FRS_ERR_SYSVOL_POPULATE ,"FRS_ERR_SYSVOL_POPULATE"},
{FRS_ERR_SYSVOL_POPULATE_TIMEOUT ,"FRS_ERR_SYSVOL_POPULATE_TIMEOUT"},
{FRS_ERR_SYSVOL_IS_BUSY ,"FRS_ERR_SYSVOL_IS_BUSY"},
{FRS_ERR_SYSVOL_DEMOTE ,"FRS_ERR_SYSVOL_DEMOTE"},
{FRS_ERR_INVALID_SERVICE_PARAMETER ,"FRS_ERR_INVALID_SERVICE_PARAMETER"},
{RPC_S_CALL_CANCELLED ,"RPC_S_CALL_CANCELLED"},
{RPC_S_CALL_FAILED ,"RPC_S_CALL_FAILED"},
{RPC_S_CALL_FAILED_DNE ,"RPC_S_CALL_FAILED_DNE"},
{RPC_S_CANNOT_SUPPORT ,"RPC_S_CANNOT_SUPPORT"},
{RPC_S_SEC_PKG_ERROR ,"RPC_S_SEC_PKG_ERROR"},
{RPC_S_SERVER_TOO_BUSY ,"RPC_S_SERVER_TOO_BUSY"},
{RPC_S_SERVER_UNAVAILABLE ,"RPC_S_SERVER_UNAVAILABLE"},
{RPC_S_UNKNOWN_IF ,"RPC_S_UNKNOWN_IF"},
{EXCEPTION_ACCESS_VIOLATION ,"EXCEPTION_ACCESS_VIOLATION"},
{EXCEPTION_DATATYPE_MISALIGNMENT ,"EXCEPTION_DATATYPE_MISALIGNMENT"},
{EXCEPTION_BREAKPOINT ,"EXCEPTION_BREAKPOINT"},
{EXCEPTION_SINGLE_STEP ,"EXCEPTION_SINGLE_STEP"},
{EXCEPTION_ARRAY_BOUNDS_EXCEEDED ,"EXCEPTION_ARRAY_BOUNDS_EXCEEDED"},
{EXCEPTION_FLT_DENORMAL_OPERAND ,"EXCEPTION_FLT_DENORMAL_OPERAND"},
{EXCEPTION_FLT_DIVIDE_BY_ZERO ,"EXCEPTION_FLT_DIVIDE_BY_ZERO"},
{EXCEPTION_FLT_INEXACT_RESULT ,"EXCEPTION_FLT_INEXACT_RESULT"},
{EXCEPTION_FLT_INVALID_OPERATION ,"EXCEPTION_FLT_INVALID_OPERATION"},
{EXCEPTION_FLT_OVERFLOW ,"EXCEPTION_FLT_OVERFLOW"},
{EXCEPTION_FLT_STACK_CHECK ,"EXCEPTION_FLT_STACK_CHECK"},
{EXCEPTION_FLT_UNDERFLOW ,"EXCEPTION_FLT_UNDERFLOW"},
{EXCEPTION_INT_DIVIDE_BY_ZERO ,"EXCEPTION_INT_DIVIDE_BY_ZERO"},
{EXCEPTION_INT_OVERFLOW ,"EXCEPTION_INT_OVERFLOW"},
{EXCEPTION_PRIV_INSTRUCTION ,"EXCEPTION_PRIV_INSTRUCTION"},
{EXCEPTION_IN_PAGE_ERROR ,"EXCEPTION_IN_PAGE_ERROR"},
{EXCEPTION_ILLEGAL_INSTRUCTION ,"EXCEPTION_ILLEGAL_INSTRUCTION"},
{EXCEPTION_NONCONTINUABLE_EXCEPTION ,"EXCEPTION_NONCONTINUABLE_EXCEPTION"},
{EXCEPTION_STACK_OVERFLOW ,"EXCEPTION_STACK_OVERFLOW"},
{EXCEPTION_INVALID_DISPOSITION ,"EXCEPTION_INVALID_DISPOSITION"},
{EXCEPTION_GUARD_PAGE ,"EXCEPTION_GUARD_PAGE"},
{EXCEPTION_INVALID_HANDLE ,"EXCEPTION_INVALID_HANDLE"},
{CONTROL_C_EXIT ,"CONTROL_C_EXIT"},
{WAIT_OBJECT_0 ,"WAIT_OBJECT_0"},
{WAIT_FAILED ,"WAIT_FAILED"},
{WAIT_ABANDONED ,"WAIT_ABANDONED"},
{WAIT_TIMEOUT ,"WAIT_TIMEOUT"},
{MAXULONG , NULL}
};
//
// If code does not appear in above list it gets added to this list.
//
#define SIZE_OF_FRSWIN32_EXTENDED_MSG_TABLE 50
FRS_WIN32_ERROR_MSG_TABLE FrsWin32ErrorMsgTableExt[SIZE_OF_FRSWIN32_EXTENDED_MSG_TABLE];
ULONG FrsWin32ErrorMsgTableExtUsed = 0;
typedef struct _FRS_NT_ERROR_MSG_TABLE {
NTSTATUS Status;
FRS_ERROR_CODE FrsErrorCode;
FRS_ERROR_SEVERITY FrsErrorSeverity;
PCHAR ErrorMsg;
} FRS_NT_ERROR_MSG_TABLE, *PFRS_NT_ERROR_MSG_TABLE;
/******************************************************************************
*******************************************************************************
** **
** **
** N T E R R O R D E S C R I P T I O N T A B L E **
** **
** **
*******************************************************************************
******************************************************************************/
//
// This error table translates NT Status codes to an FRS_ERROR_CODE class and an
// associated severity level. It also has a message string. See frserror.h
//
// NT Status code FRS Error Code FRS Severity NT Error message
//
FRS_NT_ERROR_MSG_TABLE FrsNtErrorMsgTable[] = {
{STATUS_ACCESS_DENIED ,FrsErrorAccess ,FrsSeverityServiceFatal, "STATUS_ACCESS_DENIED"},
{STATUS_BAD_WORKING_SET_LIMIT ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_BAD_WORKING_SET_LIMIT"},
{STATUS_BUFFER_OVERFLOW ,FrsErrorBufferOverflow ,FrsSeverityServiceFatal, "STATUS_BUFFER_OVERFLOW"},
{STATUS_CANCELLED ,FrsErrorRequestCancelled,FrsSeverityInfo, "STATUS_CANCELLED"},
{STATUS_DATA_ERROR ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_DATA_ERROR"},
{STATUS_DELETE_PENDING ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_DELETE_PENDING"},
{STATUS_FILE_DELETED ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_FILE_DELETED"},
{STATUS_DEVICE_CONFIGURATION_ERROR,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_DEVICE_CONFIGURATION_ERROR"},
{STATUS_DIRECTORY_NOT_EMPTY ,FrsErrorConflict ,FrsSeverityInfo, "STATUS_DIRECTORY_NOT_EMPTY"},
{STATUS_DUPLICATE_NAME ,FrsErrorConflict ,FrsSeverityServiceFatal, "STATUS_DUPLICATE_NAME"},
{STATUS_FILE_IS_A_DIRECTORY ,FrsErrorConflict ,FrsSeverityServiceFatal, "STATUS_FILE_IS_A_DIRECTORY"},
{STATUS_INCOMPATIBLE_FILE_MAP ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INCOMPATIBLE_FILE_MAP"},
{STATUS_INVALID_ADDRESS ,FrsErrorInternalError ,FrsSeverityServiceFatal, "STATUS_INVALID_ADDRESS"},
{STATUS_INVALID_INFO_CLASS ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_INFO_CLASS"},
{STATUS_INVALID_DEVICE_REQUEST ,FrsErrorBadParam ,FrsSeverityInfo, "STATUS_INVALID_DEVICE_REQUEST"},
{STATUS_INVALID_CID ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_CID"},
{STATUS_INVALID_PARAMETER ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER"},
{STATUS_INVALID_PARAMETER_1 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_1"},
{STATUS_INVALID_PARAMETER_2 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_2"},
{STATUS_INVALID_PARAMETER_3 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_3"},
{STATUS_INVALID_PARAMETER_4 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_4"},
{STATUS_INVALID_PARAMETER_5 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_5"},
{STATUS_INVALID_PARAMETER_6 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_6"},
{STATUS_INVALID_PARAMETER_7 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_7"},
{STATUS_INVALID_PARAMETER_8 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_8"},
{STATUS_INVALID_PARAMETER_9 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_9"},
{STATUS_INVALID_PARAMETER_10 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_10"},
{STATUS_INVALID_PARAMETER_11 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_11"},
{STATUS_INVALID_PARAMETER_12 ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_12"},
{STATUS_INVALID_PARAMETER_MIX ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PARAMETER_MIX"},
{STATUS_INVALID_PAGE_PROTECTION ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_PAGE_PROTECTION"},
{STATUS_IO_REPARSE_TAG_INVALID ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_IO_REPARSE_TAG_INVALID"},
{STATUS_IO_REPARSE_TAG_MISMATCH ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_IO_REPARSE_TAG_MISMATCH"},
{STATUS_IO_REPARSE_TAG_NOT_HANDLED,FrsErrorAccess ,FrsSeverityInfo, "STATUS_IO_REPARSE_TAG_NOT_HANDLED"},
{STATUS_IO_REPARSE_DATA_INVALID ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_IO_REPARSE_DATA_INVALID"},
{STATUS_JOURNAL_DELETE_IN_PROGRESS,FrsErrorInvalidOperation,FrsSeverityInfo, "STATUS_JOURNAL_DELETE_IN_PROGRESS"},
{STATUS_JOURNAL_NOT_ACTIVE ,FrsErrorInvalidOperation,FrsSeverityServiceFatal, "STATUS_JOURNAL_NOT_ACTIVE"},
{STATUS_JOURNAL_ENTRY_DELETED ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_JOURNAL_ENTRY_DELETED"},
{STATUS_NO_MORE_FILES ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_NO_MORE_FILES"},
{STATUS_NOT_IMPLEMENTED ,FrsErrorInvalidOperation,FrsSeverityServiceFatal, "STATUS_NOT_IMPLEMENTED"},
{STATUS_NOT_LOCKED ,FrsErrorInvalidOperation,FrsSeverityServiceFatal, "STATUS_NOT_LOCKED"},
{STATUS_OBJECT_NAME_COLLISION ,FrsErrorConflict ,FrsSeverityServiceFatal, "STATUS_OBJECT_NAME_COLLISION"},
{STATUS_OBJECT_NAME_INVALID ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_OBJECT_NAME_INVALID"},
{STATUS_OBJECT_NAME_NOT_FOUND ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_OBJECT_NAME_NOT_FOUND"},
{STATUS_OBJECT_PATH_NOT_FOUND ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_OBJECT_PATH_NOT_FOUND"},
{STATUS_OBJECT_PATH_SYNTAX_BAD ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_INVALID_ADDRESS"},
{STATUS_OBJECT_TYPE_MISMATCH ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_OBJECT_TYPE_MISMATCH"},
{STATUS_OBJECTID_EXISTS ,FrsErrorConflict ,FrsSeverityInfo, "STATUS_OBJECTID_EXISTS"},
{STATUS_OBJECTID_NOT_FOUND ,FrsErrorNotFound ,FrsSeverityInfo, "STATUS_OBJECTID_NOT_FOUND"},
{STATUS_OPLOCK_NOT_GRANTED ,FrsErrorAccess ,FrsSeverityInfo, "STATUS_OPLOCK_NOT_GRANTED"},
{STATUS_PORT_ALREADY_SET ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_PORT_ALREADY_SET"},
{STATUS_PRIVILEGE_NOT_HELD ,FrsErrorNoPrivileges ,FrsSeverityServiceFatal, "STATUS_OBJECT_PATH_SYNTAX_BAD"},
{STATUS_SECTION_NOT_IMAGE ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_SECTION_NOT_IMAGE"},
{STATUS_SECTION_PROTECTION ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_SECTION_PROTECTION"},
{STATUS_SHARING_VIOLATION ,FrsErrorAccess ,FrsSeverityInfo, "STATUS_SHARING_VIOLATION"},
{STATUS_UNABLE_TO_FREE_VM ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_UNABLE_TO_FREE_VM"},
{STATUS_UNABLE_TO_DELETE_SECTION ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_UNABLE_TO_DELETE_SECTION"},
{STATUS_WORKING_SET_LIMIT_RANGE ,FrsErrorBadParam ,FrsSeverityServiceFatal, "STATUS_WORKING_SET_LIMIT_RA"},
{STATUS_SUCCESS ,FrsErrorSuccess ,FrsSeverityIgnore , "STATUS_SUCCESS"} // MUST BE LAST.
};
//
// If code does not appear in above list it gets added to this list.
//
#define SIZE_OF_NT_EXTENDED_MSG_TABLE 20
FRS_NT_ERROR_MSG_TABLE FrsNtErrorMsgTableExt[SIZE_OF_NT_EXTENDED_MSG_TABLE];
ULONG FrsNtErrorMsgTableExtUsed = 0;
/******************************************************************************
*******************************************************************************
** **
** **
** J E T E R R O R D E S C R I P T I O N T A B L E **
** **
** **
*******************************************************************************
******************************************************************************/
//
// This error table translates Jet Errors to an FRS_ERROR_CODE class and an
// associated severity level. It also has a message string. See frserror.h
//
typedef struct _FRS_JET_ERROR_MSG_TABLE {
LONG JetErrorCode;
PCHAR JetErrorMsgTag;
FRS_ERROR_CODE FrsErrorCode;
FRS_ERROR_SEVERITY FrsErrorSeverity;
PCHAR JetErrorMsg;
} FRS_JET_ERROR_MSG_TABLE, *PFRS_JET_ERROR_MSG_TABLE;
//
// JET error code Error Msg Tag FRS Error Code FRS Severity JET Error message
//
FRS_JET_ERROR_MSG_TABLE FrsJetErrorMsgTable[] = {
{ JET_errAccessDenied ,"AccessDenied" ,FrsErrorAccess , FrsSeverityServiceFatal, "Cannot access file, the file is locked or in use"},
{ JET_errBadDbSignature ,"BadDbSignature" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Bad signature for a db file"},
{ JET_errBadLogSignature ,"BadLogSignature" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Bad signature for a log file"},
{ JET_errBadLogVersion ,"BadLogVersion" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Version of log file is not compatible with Jet version"},
{ JET_errCannotDisableVersioning ,"CannotDisableVersioning" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Cannot disable versioning for this database"},
{ JET_errColumnNotFound ,"ColumnNotFound" ,FrsErrorInternalError , FrsSeverityServiceFatal, "No such column"},
{ JET_errDatabaseCorrupted ,"DatabaseCorrupted" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Non-db file or corrupted db"},
{ JET_errDatabaseDuplicate ,"DatabaseDuplicate" ,FrsErrorAccess , FrsSeverityServiceFatal, "Database already exists"},
{ JET_errDatabaseFileReadOnly ,"DatabaseFileReadOnly" ,FrsErrorAccess , FrsSeverityServiceFatal, "Attach a readonly database file for read/write operations"},
{ JET_errDatabaseInUse ,"DatabaseInUse" ,FrsErrorAccess , FrsSeverityServiceFatal, "Database in use"},
{ JET_errDatabaseInconsistent ,"DatabaseInconsistent" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Database is in inconsistent state"},
{ JET_errDatabaseInvalidName ,"DatabaseInvalidName" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Invalid database name"},
{ JET_errDatabaseInvalidPages ,"DatabaseInvalidPages" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Invalid number of pages"},
{ JET_errDatabaseLocked ,"DatabaseLocked" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Database exclusively locked"},
{ JET_errDatabaseNotFound ,"DatabaseNotFound" ,FrsErrorDatabaseNotFound , FrsSeverityServiceFatal, "No such database"},
{ JET_errFileNotFound ,"FileNotFound" ,FrsErrorDatabaseNotFound , FrsSeverityWarning, "Database File not found"},
{ JET_errDiskFull ,"DiskFull" ,FrsErrorDiskSpace , FrsSeverityServiceFatal, "No space left on disk"},
{ JET_errDiskIO ,"DiskIO" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Disk IO error"},
{ JET_errKeyDuplicate ,"KeyDuplicate" ,FrsErrorKeyDuplicate , FrsSeverityWarning, "Illegal duplicate key"},
{ JET_errFileAccessDenied ,"FileAccessDenied" ,FrsErrorAccess , FrsSeverityServiceFatal, "Cannot access file"},
{ JET_errIllegalOperation ,"IllegalOperation" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Operation not supported on table"},
{ JET_errIndexInvalidDef ,"IndexInvalidDef" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Illegal/invalid index definition"},
{ JET_errInvalidBufferSize ,"InvalidBufferSize" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Data buffer doesn't match column size"},
{ JET_errInvalidColumnType ,"InvalidColumnType" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Invalid column data type"},
{ JET_errInvalidDatabase ,"InvalidDatabase" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Not a database file"},
{ JET_errInvalidFilename ,"InvalidFilename" ,FrsErrorAccess , FrsSeverityServiceFatal, "Filename is invalid"},
{ JET_errInvalidName ,"InvalidName" ,FrsErrorAccess , FrsSeverityServiceFatal, "Invalid name"},
{ JET_errInvalidObject ,"InvalidObject" ,FrsErrorAccess , FrsSeverityWarning, "Object is invalid for operation"},
{ JET_errInvalidParameter ,"InvalidParameter" ,FrsErrorBadParam , FrsSeverityReplicaFatal, "Invalid API parameter"},
{ JET_errInvalidPath ,"InvalidPath" ,FrsErrorAccess , FrsSeverityServiceFatal, "Invalid file path"},
{ JET_errInvalidSesid ,"InvalidSesid" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "System parameters were set improperly"},
{ JET_errInvalidSettings ,"InvalidSettings" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "Invalid session handle"},
{ JET_errInvalidTableId ,"InvalidTableId" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "Invalid table id"},
{ JET_errLogCorrupted ,"LogCorrupted" ,FrsErrorDatabaseCorrupted, FrsSeverityServiceFatal, "Logs could not be interpreted"},
{ JET_errLogDiskFull ,"LogDiskFull" ,FrsErrorDiskSpace , FrsSeverityServiceFatal, "Log disk full"},
{ JET_errLogWriteFail ,"LogWriteFail" ,FrsErrorDiskSpace , FrsSeverityServiceFatal, "Fail when writing to log file"},
{ JET_errMissingLogFile ,"MissingLogFile" ,FrsErrorDatabaseNotFound , FrsSeverityServiceFatal, "current log file missing"},
{ JET_errNoCurrentRecord ,"NoCurrentRecord" ,FrsErrorInternalError , FrsSeverityWarning, "Currency not on a record"},
{ JET_errNotInitialized ,"NotInitialized" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "JetInit not yet called"},
{ JET_errObjectNotFound ,"ObjectNotFound" ,FrsErrorNotFound , FrsSeverityInfo , "No such table or object"},
{ JET_errOutOfCursors ,"OutOfCursors" ,FrsErrorResource , FrsSeverityServiceFatal, "Out of table cursors"},
{ JET_errOutOfDatabaseSpace ,"OutOfDatabaseSpace" ,FrsErrorDiskSpace , FrsSeverityServiceFatal, "Maximum database size reached"},
{ JET_errOutOfFileHandles ,"OutOfFileHandles" ,FrsErrorResource , FrsSeverityServiceFatal, "Out of file handles"},
{ JET_errOutOfMemory ,"OutOfMemory" ,FrsErrorResource , FrsSeverityServiceFatal, "Out of Memory"},
{ JET_errOutOfSessions ,"OutOfSessions" ,FrsErrorResource , FrsSeverityServiceFatal, "Out of sessions"},
{ JET_errPermissionDenied ,"PermissionDenied" ,FrsErrorAccess , FrsSeverityServiceFatal, "Permission denied"},
{ JET_errReadVerifyFailure ,"ReadVerifyFailure" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Read verification error"},
{ JET_errRecordDeleted ,"RecordDeleted" ,FrsErrorNotFound , FrsSeverityInfo , "Record has been deleted"},
{ JET_errRecordPrimaryChanged ,"RecordPrimaryChanged" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Primary key may not change"},
{ JET_errRecordNotFound ,"RecordNotFound" ,FrsErrorNotFound , FrsSeverityInfo , "The key was not found"},
{ JET_errRecordTooBig ,"RecordTooBig" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "Record larger than maximum size"},
{ JET_errSecondaryIndexCorrupted ,"SecondaryIndexCorrupted" ,FrsErrorJetSecIndexCorrupted, FrsSeverityWarning , "Jet non-error (upgrade/collating thing)"},
{ JET_errTableLocked ,"TableLocked" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "Table is exclusively locked"},
{ JET_errTableDuplicate ,"TableDuplicate" ,FrsErrorConflict , FrsSeverityInfo , "Table already exists"},
{ JET_errTableInUse ,"TableInUse" ,FrsErrorInternalError , FrsSeverityIgnore , "Table is in use, cannot lock"},
{ JET_errTempFileOpenError ,"TempFileOpenError" ,FrsErrorAccess , FrsSeverityReplicaFatal, "Temp file could not be opened"},
{ JET_errTermInProgress ,"TermInProgress" ,FrsErrorShuttingDown , FrsSeverityReplicaFatal, "Termination in progress"},
{ JET_errTooManyAttachedDatabases ,"TooManyAttachedDatabases" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Too many attached databases"},
{ JET_errTooManyOpenDatabases ,"TooManyOpenDatabases" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Too many open databases"},
{ JET_errTooManyOpenTables ,"TooManyOpenTables" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Cannot open any more tables"},
{ JET_errVersionStoreOutOfMemory ,"VersionStoreOutOfMemory" ,FrsErrorInternalError , FrsSeverityServiceFatal, "Version store out of memory"},
{ JET_errWriteConflict ,"WriteConflict" ,FrsErrorDbWriteConflict , FrsSeverityInfo , "Write lock failed due to outstanding write lock"},
{ JET_wrnBufferTruncated ,"BufferTruncated" ,FrsErrorInfo , FrsSeverityInfo , "Buffer too small for data"},
{ JET_wrnColumnNull ,"ColumnNull" ,FrsErrorNotFound , FrsSeverityInfo , "Column is NULL-valued"},
{ JET_wrnDatabaseAttached ,"DatabaseAttached" ,FrsErrorInternalError , FrsSeverityReplicaFatal, "Database is already attached"},
{ JET_wrnFileOpenReadOnly ,"FileOpenReadOnly" ,FrsErrorAccess , FrsSeverityServiceFatal, "Database file is read only"},
{ JET_wrnSeekNotEqual ,"SeekNotEqual" ,FrsErrorInfo , FrsSeverityInfo , "SeekLE or SeekGE didn't find exact match"},
{ JET_wrnTableEmpty ,"TableEmpty" ,FrsErrorAccess , FrsSeverityIgnore , "Open an empty table"},
{ JET_errSuccess ,"Success" ,FrsErrorSuccess , FrsSeverityIgnore , "Success"} // MUST BE LAST.
};
//
// If code does not appear in above list it gets added to this list.
//
#define SIZE_OF_JET_EXTENDED_MSG_TABLE 20
FRS_JET_ERROR_MSG_TABLE FrsJetErrorMsgTableExt[SIZE_OF_JET_EXTENDED_MSG_TABLE];
ULONG FrsJetErrorMsgTableExtUsed = 0;
//
// Win32 to FRS error code translation table.
//
typedef struct _FRS_WIN32_ERROR_MAP {
DWORD Win32ErrorCode;
FRS_ERROR_CODE FrsErrorCode;
} FRS_WIN32_ERROR_MAP, *PFRS_WIN32_ERROR_MAP;
FRS_WIN32_ERROR_MAP FrsWin32ErrorMap[] = {
{ ERROR_ACCESS_DENIED ,FrsErrorAccess },
{ ERROR_BAD_PATHNAME ,FrsErrorBadPathname },
{ ERROR_DIR_NOT_EMPTY ,FrsErrorDirNotEmpty },
{ ERROR_DISK_FULL ,FrsErrorDiskSpace },
{ ERROR_FILE_EXISTS ,FrsErrorFileExists },
{ ERROR_FILE_NOT_FOUND ,FrsErrorNotFound },
{ ERROR_GEN_FAILURE ,FrsErrorInternalError },
{ ERROR_HANDLE_DISK_FULL ,FrsErrorDiskSpace },
{ ERROR_INSUFFICIENT_BUFFER ,FrsErrorBufferOverflow },
{ ERROR_INVALID_FUNCTION ,FrsErrorInvalidOperation },
{ ERROR_INVALID_PARAMETER ,FrsErrorBadParam },
{ ERROR_MORE_DATA ,FrsErrorBufferOverflow },
{ ERROR_OPERATION_ABORTED ,FrsErrorRequestCancelled },
{ ERROR_OPLOCK_NOT_GRANTED ,FrsErrorOplockNotGranted },
{ ERROR_RETRY ,FrsErrorRetry },
{ ERROR_SHARING_VIOLATION ,FrsErrorSharingViolation },
{ ERROR_SUCCESS ,FrsErrorSuccess } // MUST BE LAST.
};
FRS_ERROR_CODE
FrsTranslateWin32Error(
IN DWORD WStatus
)
/*++
Routine Description:
This routine translates a Win32 error code to an FRS error code.
It returns the FRS error code.
Arguments:
WStatus - The Win32 error code.
Return Value:
FRS error code.
--*/
{
#undef DEBSUB
#define DEBSUB "FrsTranslateWin32Error:"
PFRS_WIN32_ERROR_MAP FrsErrTable = FrsWin32ErrorMap;
//
// skip lookup if called with success status.
//
if (WIN_SUCCESS(WStatus)) {
return FrsErrorSuccess;
}
//
// Look thru the table for a match on the Win32 error code.
// The table ends with a ERROR_SUCCESS entry in the Win32ErrorCode field.
//
while (FrsErrTable->Win32ErrorCode != ERROR_SUCCESS) {
if (FrsErrTable->Win32ErrorCode == WStatus) {
break;
}
FrsErrTable += 1;
}
if (FrsErrTable->Win32ErrorCode != ERROR_SUCCESS) {
return FrsErrTable->FrsErrorCode;
}
//
// Win32 error code not in the table.
//
DPRINT1(1, "Win32 Error code, %08x, Not present in FrsWin32ErrorMap.\n", WStatus);
return FrsErrorInternalError;
}
FRS_ERROR_CODE
FrsTranslateNtError(
IN NTSTATUS Status,
IN BOOL BPrint
)
/*++
Routine Description:
This routine translates NT error codes to a smaller set of FRS error codes
and optionally prints a message. It returns the FRS error code.
Arguments:
Status - The NT error code.
BPrint - If true print the error message.
Return Value:
FRS error code.
--*/
{
#undef DEBSUB
#define DEBSUB "FrsTranslateNtError:"
USHORT Severity;
USHORT Level[FRS_MAX_ERROR_SEVERITY];
PFRS_NT_ERROR_MSG_TABLE FrsErrTable = FrsNtErrorMsgTable;
//
// skip lookup if called with success status.
//
if (NT_SUCCESS(Status)) {
return FrsErrorSuccess;
}
//
// Look thru the table for a match on the NT error code.
// The table ends with a STATUS_SUCCESS entry in the Status field.
//
while (FrsErrTable->Status != STATUS_SUCCESS) {
if (FrsErrTable->Status == Status) {
break;
}
FrsErrTable += 1;
}
if (FrsErrTable->Status != STATUS_SUCCESS) {
//
// Found a match.
//
if (BPrint) {
//
// Translate the FRS severity to a DPRINT serverity level
//
Level[FrsSeverityServiceFatal] = 0;
Level[FrsSeverityReplicaFatal] = 0;
Level[FrsSeverityException] = 1;
Level[FrsSeverityWarning] = 3;
Level[FrsSeverityInfo] = 5;
Level[FrsSeverityIgnore] = 5;
Severity = Level[FrsErrTable->FrsErrorSeverity];
DPRINT2(Severity, "NTStatus %08x -- %s\n", Status, FrsErrTable->ErrorMsg);
}
return FrsErrTable->FrsErrorCode;
}
//
// NT error code not in the table so be happy.
//
DPRINT1(1, "NT Error: %08x, Not present in FrsNtErrorMsgTable. \n", Status);
return FrsErrorInternalError;
}
ULONG
DisplayNTStatusSev(
IN ULONG Sev,
IN NTSTATUS Status
)
/*++
Routine Description:
This routine translates NT error codes to a smaller set of FRS error codes
and prints a message describing the NT status. It returns the FRS error code.
Nothing is printed if NT_SUCCESS(Status) is true.
If NT_SUCCESS(Status) is not TRUE then GetLastError is called and the
Win32 message is printed.
The message is printed at the indicated severity level.
Arguments:
Sev - dprint severity
Status - The NT error code.
Return Value:
FRS error code.
--*/
{
#undef DEBSUB
#define DEBSUB "DisplayNTStatusSev:"
ULONG WStatus;
ULONG FStatus;
FStatus = FrsTranslateNtError(Status, TRUE);
if (FStatus != FrsErrorSuccess) {
//
// Check for a win32 error.
//
WStatus = GetLastError();
if (!WIN_SUCCESS(WStatus)) {
DPRINT1(Sev, "GetLastError returned (dec): %d\n", WStatus );
DisplayErrorMsg(Sev, WStatus);
}
return FStatus;
}
return FrsErrorSuccess;
}
ULONG
DisplayNTStatus(
IN NTSTATUS Status
)
/*++
Routine Description:
This routine translates NT error codes to a smaller set of FRS error codes
and prints a message describing the NT status. It returns the FRS error code.
Nothing is printed if NT_SUCCESS(Status) is true.
If NT_SUCCESS(Status) is not TRUE then GetLastError is called and the
Win32 message is printed.
Arguments:
Status - The NT error code.
Return Value:
FRS error code.
--*/
{
#undef DEBSUB
#define DEBSUB "DisplayNTStatus:"
return (DisplayNTStatusSev(0, Status));
}
ULONG
FrsSetLastNTError(
NTSTATUS Status
)
/*++
Routine Description:
Translate NT status codes to WIN32 status codes for those functions that
make NT calls. Map a few status values differently.
Arguments:
Status - the NTstatus to map.
Return Value:
The WIN32 status. Also puts this into LastError.
--*/
{
#undef DEBSUB
#define DEBSUB "FrsSetLastNTError:"
ULONG WStatus;
//
// Do the standard system mapping first.
//
WStatus = RtlNtStatusToDosError( Status );
//
// If we try to generate a staging file and get the NT status that delete
// is pending or the file is deleted then treat it as file not found
// rather than Access Denied. The later is a hard failure that will stop
// file replication if it happens on a directory. FileNotFound just means
// the user deleted the file before we could do the propagation.
//
// Currently (March, 98) the following NT errors map into ERROR_ACCESS_DENIED.
// STATUS_INVALID_LOCK_SEQUENCE STATUS_THREAD_IS_TERMINATING
// STATUS_INVALID_VIEW_SIZE STATUS_DELETE_PENDING
// STATUS_ALREADY_COMMITTED STATUS_FILE_IS_A_DIRECTORY
// STATUS_ACCESS_DENIED STATUS_PROCESS_IS_TERMINATING
// STATUS_PORT_CONNECTION_REFUSED STATUS_CANNOT_DELETE
// STATUS_FILE_DELETED
// Update: Currently (Feb, 2001) STATUS_DELETE_PENDING maps to
// ERROR_DELETE_PENDING. This change has broken some code. We need to
// handle it here. The macro WIN_NOT_FOUND was updated too.
//
if (WStatus == ERROR_ACCESS_DENIED) {
if (Status == STATUS_FILE_DELETED) {
WStatus = ERROR_FILE_NOT_FOUND;
} else if (Status == STATUS_DELETE_PENDING) {
WStatus = ERROR_DELETE_PENDING;
}
}
SetLastError( WStatus );
return WStatus;
}
//
// Dump out the windows error message string.
//
VOID
DisplayErrorMsg(
IN ULONG Severity,
IN ULONG WindowsErrorCode
)
{
#undef DEBSUB
#define DEBSUB "DisplayErrorMsg:"
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
WindowsErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL
);
DPRINT1(Severity, "Msg: %S\n", lpMsgBuf);
LocalFree( lpMsgBuf );
}
PCHAR
ErrLabelW32(
ULONG WStatus
)
/*++
Routine Description:
Return a ptr to the Win32 error code label.
Arguments:
WStatus - a win32 error status.
Return Value:
Ptr to the win 32 error status label string.
--*/
{
#undef DEBSUB
#define DEBSUB "ErrLabelW32:"
PFRS_WIN32_ERROR_MSG_TABLE Entry;
ULONG i;
Entry = FrsWin32ErrorMsgTable;
//
// Scan table looking for match. Null msg ends table.
//
while (Entry->ErrorMsg != NULL) {
if (Entry->ErrorCode == WStatus) {
return Entry->ErrorMsg;
}
Entry++;
}
//
// Scan the extended error table where new entries are put.
//
Entry = FrsWin32ErrorMsgTableExt;
for (i = 0; i < FrsWin32ErrorMsgTableExtUsed; i++) {
if (Entry->ErrorCode == WStatus) {
return Entry->ErrorMsg;
}
Entry++;
}
//
// Out of space?
//
if (FrsWin32ErrorMsgTableExtUsed >= SIZE_OF_FRSWIN32_EXTENDED_MSG_TABLE) {
return "???";
}
i = InterlockedIncrement(&FrsWin32ErrorMsgTableExtUsed) - 1;
if (i >= SIZE_OF_FRSWIN32_EXTENDED_MSG_TABLE) {
return "???";
}
//
// Create new entry.
//
Entry = &FrsWin32ErrorMsgTableExt[i];
Entry->ErrorCode = WStatus;
Entry->ErrorMsg = FrsAlloc(16);
_snprintf(Entry->ErrorMsg, 16, "%d-???", WStatus);
Entry->ErrorMsg[15] = '\0';
return Entry->ErrorMsg;
}
PCHAR
ErrLabelNT(
NTSTATUS Status
)
/*++
Routine Description:
Return a ptr to the NT error code label.
Arguments:
Status - an NTStatus error status.
Return Value:
Ptr to the NT error status label string.
--*/
{
#undef DEBSUB
#define DEBSUB "ErrLabelNT:"
PFRS_NT_ERROR_MSG_TABLE Entry;
ULONG i;
Entry = FrsNtErrorMsgTable;
//
// skip lookup if called with success status.
//
if (Status == STATUS_SUCCESS) {
return "Success";
}
//
// Look thru the table for a match on the NT error code.
// The table ends with a STATUS_SUCCESS entry.
//
while (Entry->Status != STATUS_SUCCESS) {
if (Entry->Status == Status) {
return Entry->ErrorMsg;
}
Entry += 1;
}
//
// Scan the extended error table where new entries are put.
//
Entry = FrsNtErrorMsgTableExt;
for (i = 0; i < FrsNtErrorMsgTableExtUsed; i++) {
if (Entry->Status == Status) {
return Entry->ErrorMsg;
}
Entry += 1;
}
//
// Out of space?
//
if (FrsNtErrorMsgTableExtUsed >= SIZE_OF_NT_EXTENDED_MSG_TABLE) {
return "???";
}
i = InterlockedIncrement(&FrsNtErrorMsgTableExtUsed) - 1;
if (i >= SIZE_OF_NT_EXTENDED_MSG_TABLE) {
return "???";
}
//
// Create new entry.
//
Entry = &FrsNtErrorMsgTableExt[i];
Entry->Status = Status;
Entry->ErrorMsg = FrsAlloc(16);
_snprintf(Entry->ErrorMsg, 16, "%08x-???", Status);
Entry->ErrorMsg[15] = '\0';
return Entry->ErrorMsg;
}
PCHAR
ErrLabelFrs(
ULONG FStatus
)
/*++
Routine Description:
Return a ptr to the Frs error code label.
Arguments:
FStatus - an FRS error status.
Return Value:
Ptr to the Frs error status label string.
--*/
{
#undef DEBSUB
#define DEBSUB "ErrLabelFrs:"
PFRS_ERROR_MSG_TABLE Entry;
ULONG i;
Entry = FrsErrorMsgTable;
//
// Scan table looking for match. Null msg ends table.
//
while (Entry->ErrorMsg != NULL) {
if (Entry->ErrorCode == FStatus) {
return Entry->ErrorMsg;
}
Entry++;
}
//
// Scan the extended error table where new entries are put.
//
Entry = FrsErrorMsgTableExt;
for (i = 0; i < FrsErrorMsgTableExtUsed; i++) {
if (Entry->ErrorCode == FStatus) {
return Entry->ErrorMsg;
}
Entry++;
}
//
// Out of space?
//
if (FrsErrorMsgTableExtUsed >= SIZE_OF_FRS_EXTENDED_MSG_TABLE) {
return "???";
}
i = InterlockedIncrement(&FrsErrorMsgTableExtUsed) - 1;
if (i >= SIZE_OF_FRS_EXTENDED_MSG_TABLE) {
return "???";
}
//
// Create new entry.
//
Entry = &FrsErrorMsgTableExt[i];
Entry->ErrorCode = FStatus;
Entry->ErrorMsg = FrsAlloc(16);
_snprintf(Entry->ErrorMsg, 16, "%d-???", FStatus);
Entry->ErrorMsg[15] = '\0';
return Entry->ErrorMsg;
}
PCHAR
ErrLabelJet(
LONG jerr
)
/*++
Routine Description:
Return a ptr to the Jet error code label.
Arguments:
jerr - the jet error status.
Return Value:
Ptr to the jet error status label string.
--*/
{
#undef DEBSUB
#define DEBSUB "ErrLabelJet:"
PFRS_JET_ERROR_MSG_TABLE Entry = FrsJetErrorMsgTable;
ULONG i;
//
// skip lookup if called with success status.
//
if (JET_SUCCESS(jerr)) {
return "Success";
}
//
// Look thru the table for a match on the jet error code.
// The table ends with a JER_errSuccess entry in the JetErrorCode field.
//
while (!JET_SUCCESS(Entry->JetErrorCode)) {
if (Entry->JetErrorCode == jerr) {
return Entry->JetErrorMsgTag;
}
Entry += 1;
}
//
// Scan the extended error table where new entries are put.
//
Entry = FrsJetErrorMsgTableExt;
for (i = 0; i < FrsJetErrorMsgTableExtUsed; i++) {
if (Entry->JetErrorCode == jerr) {
return Entry->JetErrorMsgTag;
}
Entry += 1;
}
//
// Out of space?
//
if (FrsJetErrorMsgTableExtUsed >= SIZE_OF_JET_EXTENDED_MSG_TABLE) {
return "???";
}
i = InterlockedIncrement(&FrsJetErrorMsgTableExtUsed) - 1;
if (i >= SIZE_OF_JET_EXTENDED_MSG_TABLE) {
return "???";
}
//
// Create new entry.
//
Entry = &FrsJetErrorMsgTableExt[i];
Entry->JetErrorCode = jerr;
Entry->JetErrorMsgTag = FrsAlloc(16);
_snprintf(Entry->JetErrorMsgTag, 16, "%d-???", jerr);
Entry->JetErrorMsgTag[15] = '\0';
return Entry->JetErrorMsgTag;
}
FRS_ERROR_CODE
DbsTranslateJetError0(
IN JET_ERR jerr,
IN BOOL BPrint
)
/*++
Routine Description:
This routine translates jet error codes to a smaller set of FRS error codes
and optionally prints a message. It returns the FRS error code.
Arguments:
jerr - The jet error code.
BPrint - If true print the error message.
Return Value:
FRS error code.
--*/
{
#undef DEBSUB
#define DEBSUB "DbsTranslateJetError0:"
USHORT Severity;
USHORT Level[FRS_MAX_ERROR_SEVERITY];
PFRS_JET_ERROR_MSG_TABLE FrsErrTable = FrsJetErrorMsgTable;
//
// skip lookup if called with success status.
//
if (JET_SUCCESS(jerr)) {
return FrsErrorSuccess;
}
//
// Look thru the table for a match on the jet error code.
// The table ends with a JER_errSuccess entry in the JetErrorCode field.
//
while (FrsErrTable->JetErrorCode != JET_errSuccess) {
if (FrsErrTable->JetErrorCode == jerr) {
break;
}
FrsErrTable += 1;
}
if (!JET_SUCCESS(FrsErrTable->JetErrorCode)) {
//
// Found a match.
//
if (BPrint) {
//
// Translate the FRS severity to a DPRINT serverity level
//
Level[FrsSeverityServiceFatal] = 0;
Level[FrsSeverityReplicaFatal] = 0;
Level[FrsSeverityException] = 1;
Level[FrsSeverityWarning] = 3;
Level[FrsSeverityInfo] = 5;
Level[FrsSeverityIgnore] = 5;
Severity = Level[FrsErrTable->FrsErrorSeverity];
DPRINT2(Severity, "Jet related FRS error: %d - %s\n",
jerr, FrsErrTable->JetErrorMsg);
}
return FrsErrTable->FrsErrorCode;
}
//
// Jet error code not in the table so be happy.
//
DPRINT1(0, "Jet Error: %d, Not present in FrsJetErrorMsgTable. Treated as service fatal.\n", jerr);
return FrsErrorInternalError;
}