//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1992. // // File: mapsecer.cxx // // Contents: Map security error codes to NTSTATUS value // // Classes: // // Functions: SRtlMapErrorToString // // History: 18-Feb-93 PeterWi Created // //-------------------------------------------------------------------------- #include #pragma hdrstop NTSTATUS ErrorTable[] = { SEC_E_INSUFFICIENT_MEMORY, STATUS_INSUFFICIENT_RESOURCES, SEC_E_INVALID_HANDLE, STATUS_INVALID_HANDLE, SEC_E_UNSUPPORTED_FUNCTION, STATUS_NOT_IMPLEMENTED, SEC_E_TARGET_UNKNOWN, STATUS_BAD_NETWORK_PATH, SEC_E_INTERNAL_ERROR, STATUS_INTERNAL_ERROR, SEC_E_SECPKG_NOT_FOUND, STATUS_NO_SUCH_PACKAGE, SEC_E_NOT_OWNER, STATUS_INVALID_OWNER, SEC_E_CANNOT_INSTALL, STATUS_NO_SUCH_PACKAGE, SEC_E_INVALID_TOKEN, STATUS_INVALID_PARAMETER, SEC_E_CANNOT_PACK, STATUS_INVALID_PARAMETER, SEC_E_QOP_NOT_SUPPORTED, STATUS_NOT_IMPLEMENTED, SEC_E_NO_IMPERSONATION, STATUS_CANNOT_IMPERSONATE, SEC_E_LOGON_DENIED, STATUS_LOGON_FAILURE, SEC_E_UNKNOWN_CREDENTIALS, STATUS_INVALID_PARAMETER, SEC_E_NO_CREDENTIALS, STATUS_NO_SUCH_LOGON_SESSION, SEC_E_MESSAGE_ALTERED, STATUS_ACCESS_DENIED, SEC_E_OUT_OF_SEQUENCE, STATUS_ACCESS_DENIED, SEC_E_NO_AUTHENTICATING_AUTHORITY, STATUS_NO_LOGON_SERVERS, SEC_E_BAD_PKGID, STATUS_NO_SUCH_PACKAGE, 0xffffffff,0xffffffff }; extern "C" NTSTATUS MapSecError(HRESULT hrValue) { ULONG Index; // // Only map error codes // if (NT_SUCCESS(hrValue)) { return(hrValue); } // // Check for straight NT status codes // if ((hrValue & 0xf0000000) == 0xc0000000) { return(hrValue); } // // Then check for a masked NTSTATUS // if ((hrValue & 0xf0000000) == 0xd0000000) { return(hrValue & 0xcfffffff); } // // Next check for a masked Win32 error - convert them all to // STATUS_ACCESS_DENIED // if ((hrValue & 0xffff) == 0x80070000) { return(STATUS_ACCESS_DENIED); } // // Now map all the ISSP errors // for (Index = 0; ErrorTable[Index] != 0xffffffff ; Index+= 2 ) { if (ErrorTable[Index] == hrValue) { return(ErrorTable[Index+1]); } } // // Return the old standby. // return(STATUS_ACCESS_DENIED); } extern "C" NTSTATUS SecMapHresult( HRESULT hrRet ) { NTSTATUS Status = STATUS_INTERNAL_ERROR; if (SUCCEEDED(hrRet)) { Status = STATUS_SUCCESS; } else if ((hrRet & 0xc0000000) == 0xc0000000) { // // This was a NTSTATUS code at some point // Status = hrRet & 0xcfffffff; } else if (hrRet == E_OUTOFMEMORY) { Status = STATUS_INSUFFICIENT_RESOURCES; } else if (hrRet == STG_E_FILENOTFOUND) { Status = STATUS_OBJECT_NAME_NOT_FOUND; } else if (hrRet == HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER)) { Status = STATUS_INVALID_PARAMETER; } else if (hrRet == STG_E_FILEALREADYEXISTS) { Status = STATUS_OBJECT_NAME_COLLISION; } else if (hrRet == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { Status = STATUS_OBJECT_NAME_NOT_FOUND; } else { Status = STATUS_INTERNAL_ERROR; } return(Status); }