14bff34e3Sthurlow /* 24bff34e3Sthurlow * Copyright (c) 2000-2001 Boris Popov 34bff34e3Sthurlow * All rights reserved. 44bff34e3Sthurlow * 54bff34e3Sthurlow * Redistribution and use in source and binary forms, with or without 64bff34e3Sthurlow * modification, are permitted provided that the following conditions 74bff34e3Sthurlow * are met: 84bff34e3Sthurlow * 1. Redistributions of source code must retain the above copyright 94bff34e3Sthurlow * notice, this list of conditions and the following disclaimer. 104bff34e3Sthurlow * 2. Redistributions in binary form must reproduce the above copyright 114bff34e3Sthurlow * notice, this list of conditions and the following disclaimer in the 124bff34e3Sthurlow * documentation and/or other materials provided with the distribution. 134bff34e3Sthurlow * 3. All advertising materials mentioning features or use of this software 144bff34e3Sthurlow * must display the following acknowledgement: 154bff34e3Sthurlow * This product includes software developed by Boris Popov. 164bff34e3Sthurlow * 4. Neither the name of the author nor the names of any co-contributors 174bff34e3Sthurlow * may be used to endorse or promote products derived from this software 184bff34e3Sthurlow * without specific prior written permission. 194bff34e3Sthurlow * 204bff34e3Sthurlow * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 214bff34e3Sthurlow * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 224bff34e3Sthurlow * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 234bff34e3Sthurlow * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 244bff34e3Sthurlow * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 254bff34e3Sthurlow * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 264bff34e3Sthurlow * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 274bff34e3Sthurlow * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 284bff34e3Sthurlow * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 294bff34e3Sthurlow * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 304bff34e3Sthurlow * SUCH DAMAGE. 314bff34e3Sthurlow * 324bff34e3Sthurlow * $Id: smb_subr.c,v 1.27.108.1 2005/06/02 00:55:39 lindak Exp $ 334bff34e3Sthurlow */ 344bff34e3Sthurlow 35613a2f6bSGordon Ross /* 36148c5f43SAlan Wright * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 37*40c0e231SGordon Ross * Portions Copyright (C) 2001 - 2013 Apple Inc. All rights reserved. 38*40c0e231SGordon Ross * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 39613a2f6bSGordon Ross */ 404bff34e3Sthurlow 414bff34e3Sthurlow #include <sys/param.h> 424bff34e3Sthurlow #include <sys/systm.h> 434bff34e3Sthurlow #include <sys/kmem.h> 444bff34e3Sthurlow #include <sys/proc.h> 454bff34e3Sthurlow #include <sys/lock.h> 464bff34e3Sthurlow #include <sys/socket.h> 474bff34e3Sthurlow #include <sys/isa_defs.h> 484bff34e3Sthurlow #include <sys/stream.h> 494bff34e3Sthurlow #include <sys/strsun.h> 504bff34e3Sthurlow #include <sys/sunddi.h> 514bff34e3Sthurlow #include <sys/cmn_err.h> 524bff34e3Sthurlow #include <sys/sdt.h> 534bff34e3Sthurlow #include <sys/priv.h> 544bff34e3Sthurlow #include <sys/u8_textprep.h> 554bff34e3Sthurlow 564bff34e3Sthurlow #include <netsmb/smb_osdep.h> 574bff34e3Sthurlow #include <netsmb/smb.h> 584bff34e3Sthurlow #include <netsmb/smb_conn.h> 594bff34e3Sthurlow #include <netsmb/smb_rq.h> 604bff34e3Sthurlow #include <netsmb/smb_subr.h> 614bff34e3Sthurlow 624bff34e3Sthurlow void 63613a2f6bSGordon Ross smb_credinit(struct smb_cred *scred, cred_t *cr) 644bff34e3Sthurlow { 65613a2f6bSGordon Ross /* cr arg is optional */ 66613a2f6bSGordon Ross if (cr == NULL) 67613a2f6bSGordon Ross cr = ddi_get_cred(); 688329232eSGordon Ross #ifdef _KERNEL 694bff34e3Sthurlow if (is_system_labeled()) { 70613a2f6bSGordon Ross cr = crdup(cr); 71613a2f6bSGordon Ross (void) setpflags(NET_MAC_AWARE, 1, cr); 728329232eSGordon Ross } else 738329232eSGordon Ross #endif 748329232eSGordon Ross { 75613a2f6bSGordon Ross crhold(cr); 764bff34e3Sthurlow } 77613a2f6bSGordon Ross scred->scr_cred = cr; 784bff34e3Sthurlow } 794bff34e3Sthurlow 804bff34e3Sthurlow void 814bff34e3Sthurlow smb_credrele(struct smb_cred *scred) 824bff34e3Sthurlow { 83613a2f6bSGordon Ross if (scred->scr_cred != NULL) { 84613a2f6bSGordon Ross crfree(scred->scr_cred); 85613a2f6bSGordon Ross scred->scr_cred = NULL; 864bff34e3Sthurlow } 874bff34e3Sthurlow } 884bff34e3Sthurlow 894bff34e3Sthurlow /* 904bff34e3Sthurlow * Helper for the SMBERROR macro, etc. 914bff34e3Sthurlow * This is also a good place for a breakpoint 924bff34e3Sthurlow * or a dtrace probe, i.e. fbt:nsmb:smb_errmsg 934bff34e3Sthurlow */ 944bff34e3Sthurlow void 954bff34e3Sthurlow smb_errmsg(int cel, const char *func_name, const char *fmt, ...) 964bff34e3Sthurlow { 974bff34e3Sthurlow va_list adx; 984bff34e3Sthurlow char buf[100]; 994bff34e3Sthurlow 1004bff34e3Sthurlow va_start(adx, fmt); 1014bff34e3Sthurlow if (cel == CE_CONT) { 1024bff34e3Sthurlow /* 1034bff34e3Sthurlow * This is one of our xxxDEBUG macros. 1044bff34e3Sthurlow * Don't bother to log these, but just 1054bff34e3Sthurlow * fire a dtrace probe with the message. 1064bff34e3Sthurlow */ 10702d09e03SGordon Ross (void) vsnprintf(buf, sizeof (buf), fmt, adx); 1084bff34e3Sthurlow DTRACE_PROBE2(debugmsg2, 1094bff34e3Sthurlow (char *), func_name, 1104bff34e3Sthurlow (char *), buf); 1114bff34e3Sthurlow } else { 1124bff34e3Sthurlow /* 1134bff34e3Sthurlow * This is one of our xxxERROR macros. 1144bff34e3Sthurlow * Add a prefix to the fmt string, 1154bff34e3Sthurlow * then let vcmn_err do the args. 1164bff34e3Sthurlow */ 11702d09e03SGordon Ross (void) snprintf(buf, sizeof (buf), "?%s: %s", func_name, fmt); 1184bff34e3Sthurlow DTRACE_PROBE3(debugmsg3, 1194bff34e3Sthurlow (char *), func_name, 1204bff34e3Sthurlow (char *), buf, 1214bff34e3Sthurlow va_list, adx); 1224bff34e3Sthurlow vcmn_err(cel, buf, adx); 1234bff34e3Sthurlow } 1244bff34e3Sthurlow va_end(adx); 1254bff34e3Sthurlow } 1264bff34e3Sthurlow 1274bff34e3Sthurlow #if 1 /* def SMB_SOCKETDATA_DEBUG */ 1284bff34e3Sthurlow void 1294bff34e3Sthurlow m_dumpm(mblk_t *m) 1304bff34e3Sthurlow { 1314bff34e3Sthurlow int len, seg; 1324bff34e3Sthurlow 1334bff34e3Sthurlow len = msgdsize(m); 1344bff34e3Sthurlow DTRACE_PROBE2(dsize, int, len, (mblk_t *), m); 1354bff34e3Sthurlow 1364bff34e3Sthurlow for (seg = 0; m; seg++) { 1374bff34e3Sthurlow DTRACE_PROBE2(mblk, int, seg, (mblk_t *), m); 1384bff34e3Sthurlow m = m->b_cont; 1394bff34e3Sthurlow } 1404bff34e3Sthurlow } 1414bff34e3Sthurlow #endif 1424bff34e3Sthurlow 1434bff34e3Sthurlow #ifndef EPROTO 1444bff34e3Sthurlow #define EPROTO ECONNABORTED 1454bff34e3Sthurlow #endif 1464bff34e3Sthurlow #ifndef ELIBACC 1474bff34e3Sthurlow #define ELIBACC ENOENT 1484bff34e3Sthurlow #endif 1494bff34e3Sthurlow #ifndef ENODATA 1504bff34e3Sthurlow #define ENODATA EINVAL 1514bff34e3Sthurlow #endif 1524bff34e3Sthurlow #ifndef ENOTUNIQ 1534bff34e3Sthurlow #define ENOTUNIQ EADDRINUSE 1544bff34e3Sthurlow #endif 1554bff34e3Sthurlow #ifndef ECOMM 1564bff34e3Sthurlow #define ECOMM EIO 1574bff34e3Sthurlow #endif 1584bff34e3Sthurlow #ifndef ENOMEDIUM 15902d09e03SGordon Ross #define ENOMEDIUM ENXIO 1604bff34e3Sthurlow #endif 1614bff34e3Sthurlow #ifndef ETIME 1624bff34e3Sthurlow #define ETIME ETIMEDOUT 1634bff34e3Sthurlow #endif 1644bff34e3Sthurlow 165ae3d7f90SGordon Ross /* 166ae3d7f90SGordon Ross * Log any un-handled NT or DOS errors we encounter. 167ae3d7f90SGordon Ross * Make these log NOTICE in a debug build to ensure 168ae3d7f90SGordon Ross * they get noticed during tests. In the field these 169ae3d7f90SGordon Ross * are unimportant, so just fire a Dtrace probe. 170ae3d7f90SGordon Ross */ 171ae3d7f90SGordon Ross static int unknown_err_logpri = 172ae3d7f90SGordon Ross #ifdef DEBUG 173ae3d7f90SGordon Ross CE_NOTE; 174ae3d7f90SGordon Ross #else 175ae3d7f90SGordon Ross CE_CONT; 176ae3d7f90SGordon Ross #endif 177ae3d7f90SGordon Ross 178148c5f43SAlan Wright typedef struct nt2errno { 17902d09e03SGordon Ross unsigned int nterr; 180148c5f43SAlan Wright int errno; 181148c5f43SAlan Wright } nt2errno_t; 182148c5f43SAlan Wright 183148c5f43SAlan Wright static const nt2errno_t nt2errno[] = { 18402d09e03SGordon Ross /* Alphabetical order. */ 1854bff34e3Sthurlow {NT_STATUS_ACCESS_DENIED, EACCES}, 1864bff34e3Sthurlow {NT_STATUS_ACCESS_VIOLATION, EACCES}, 1874bff34e3Sthurlow {NT_STATUS_ACCOUNT_DISABLED, EACCES}, 18802d09e03SGordon Ross {NT_STATUS_ACCOUNT_EXPIRED, EACCES}, 18902d09e03SGordon Ross {NT_STATUS_ACCOUNT_LOCKED_OUT, EACCES}, 1904bff34e3Sthurlow {NT_STATUS_ACCOUNT_RESTRICTION, EACCES}, 1914bff34e3Sthurlow {NT_STATUS_ADDRESS_ALREADY_EXISTS, EADDRINUSE}, 1924bff34e3Sthurlow {NT_STATUS_BAD_NETWORK_NAME, ENOENT}, 193*40c0e231SGordon Ross {NT_STATUS_BAD_NETWORK_PATH, ENOENT}, 194*40c0e231SGordon Ross {NT_STATUS_BUFFER_TOO_SMALL, E2BIG}, 195*40c0e231SGordon Ross {NT_STATUS_CANCELLED, ECANCELED}, 1964bff34e3Sthurlow {NT_STATUS_CANNOT_DELETE, EACCES}, 1974bff34e3Sthurlow {NT_STATUS_CONFLICTING_ADDRESSES, EADDRINUSE}, 1984bff34e3Sthurlow {NT_STATUS_CONNECTION_ABORTED, ECONNABORTED}, 1994bff34e3Sthurlow {NT_STATUS_CONNECTION_DISCONNECTED, ECONNABORTED}, 2004bff34e3Sthurlow {NT_STATUS_CONNECTION_REFUSED, ECONNREFUSED}, 2014bff34e3Sthurlow {NT_STATUS_CONNECTION_RESET, ENETRESET}, 20202d09e03SGordon Ross {NT_STATUS_DELETE_PENDING, EACCES}, 2034bff34e3Sthurlow {NT_STATUS_DEVICE_DOES_NOT_EXIST, ENODEV}, 2044bff34e3Sthurlow {NT_STATUS_DEVICE_PROTOCOL_ERROR, EPROTO}, 2054bff34e3Sthurlow {NT_STATUS_DIRECTORY_NOT_EMPTY, ENOTEMPTY}, 2064bff34e3Sthurlow {NT_STATUS_DISK_FULL, ENOSPC}, 2074bff34e3Sthurlow {NT_STATUS_DLL_NOT_FOUND, ELIBACC}, 208ae3d7f90SGordon Ross {NT_STATUS_DUPLICATE_NAME, EINVAL}, 209*40c0e231SGordon Ross {NT_STATUS_EAS_NOT_SUPPORTED, ENOTSUP}, 210*40c0e231SGordon Ross {NT_STATUS_EA_TOO_LARGE, E2BIG}, 2114bff34e3Sthurlow {NT_STATUS_END_OF_FILE, ENODATA}, 212*40c0e231SGordon Ross {NT_STATUS_FILE_CLOSED, EBADF}, 213*40c0e231SGordon Ross {NT_STATUS_FILE_DELETED, ENOENT}, 214*40c0e231SGordon Ross {NT_STATUS_FILE_INVALID, EIO}, 2154bff34e3Sthurlow {NT_STATUS_FILE_IS_A_DIRECTORY, EISDIR}, 21602d09e03SGordon Ross {NT_STATUS_FILE_LOCK_CONFLICT, EAGAIN}, 217*40c0e231SGordon Ross {NT_STATUS_FILE_RENAMED, ENOENT}, 2184bff34e3Sthurlow {NT_STATUS_FLOAT_INEXACT_RESULT, ERANGE}, 2194bff34e3Sthurlow {NT_STATUS_FLOAT_OVERFLOW, ERANGE}, 2204bff34e3Sthurlow {NT_STATUS_FLOAT_UNDERFLOW, ERANGE}, 2214bff34e3Sthurlow {NT_STATUS_HOST_UNREACHABLE, EHOSTUNREACH}, 222*40c0e231SGordon Ross {NT_STATUS_ILL_FORMED_PASSWORD, EAUTH}, 223*40c0e231SGordon Ross {NT_STATUS_INFO_LENGTH_MISMATCH, EINVAL}, 224*40c0e231SGordon Ross {NT_STATUS_INSUFFICIENT_RESOURCES, EAGAIN}, 225*40c0e231SGordon Ross {NT_STATUS_INSUFF_SERVER_RESOURCES, EAGAIN}, 2264bff34e3Sthurlow {NT_STATUS_INTEGER_OVERFLOW, ERANGE}, 227*40c0e231SGordon Ross {NT_STATUS_INVALID_ACCOUNT_NAME, EAUTH}, 228*40c0e231SGordon Ross {NT_STATUS_INVALID_BUFFER_SIZE, EIO}, 229*40c0e231SGordon Ross {NT_STATUS_INVALID_DEVICE_REQUEST, EINVAL}, 2304bff34e3Sthurlow {NT_STATUS_INVALID_HANDLE, EBADF}, 231*40c0e231SGordon Ross {NT_STATUS_INVALID_INFO_CLASS, EINVAL}, 23202d09e03SGordon Ross {NT_STATUS_INVALID_LEVEL, ENOTSUP}, 233*40c0e231SGordon Ross {NT_STATUS_INVALID_LOCK_SEQUENCE, EINVAL}, 234*40c0e231SGordon Ross {NT_STATUS_INVALID_LOGON_HOURS, EAUTH}, 235148c5f43SAlan Wright {NT_STATUS_INVALID_OWNER, EINVAL}, 2364bff34e3Sthurlow {NT_STATUS_INVALID_PARAMETER, EINVAL}, 2374bff34e3Sthurlow {NT_STATUS_INVALID_PIPE_STATE, EPIPE}, 238148c5f43SAlan Wright {NT_STATUS_INVALID_PRIMARY_GROUP, EINVAL}, 2394bff34e3Sthurlow {NT_STATUS_INVALID_WORKSTATION, EACCES}, 2404bff34e3Sthurlow {NT_STATUS_IN_PAGE_ERROR, EFAULT}, 241*40c0e231SGordon Ross {NT_STATUS_IO_DEVICE_ERROR, EIO}, 2424bff34e3Sthurlow {NT_STATUS_IO_TIMEOUT, ETIMEDOUT}, 243*40c0e231SGordon Ross {NT_STATUS_IP_ADDRESS_CONFLICT1, EADDRINUSE}, 244*40c0e231SGordon Ross {NT_STATUS_IP_ADDRESS_CONFLICT2, EADDRINUSE}, 2454bff34e3Sthurlow {NT_STATUS_LICENSE_QUOTA_EXCEEDED, EDQUOT}, 24602d09e03SGordon Ross {NT_STATUS_LOCK_NOT_GRANTED, EAGAIN}, 247*40c0e231SGordon Ross {NT_STATUS_LOGIN_TIME_RESTRICTION, EAUTH}, 248*40c0e231SGordon Ross {NT_STATUS_LOGON_FAILURE, EAUTH}, 249*40c0e231SGordon Ross {NT_STATUS_LOGON_TYPE_NOT_GRANTED, EAUTH}, 2504bff34e3Sthurlow {NT_STATUS_MEDIA_WRITE_PROTECTED, EROFS}, 2514bff34e3Sthurlow {NT_STATUS_MEMORY_NOT_ALLOCATED, EFAULT}, 252*40c0e231SGordon Ross {NT_STATUS_MORE_PROCESSING_REQUIRED, EINPROGRESS}, 2534bff34e3Sthurlow {NT_STATUS_NAME_TOO_LONG, ENAMETOOLONG}, 2544bff34e3Sthurlow {NT_STATUS_NETWORK_ACCESS_DENIED, EACCES}, 2554bff34e3Sthurlow {NT_STATUS_NETWORK_BUSY, EBUSY}, 256*40c0e231SGordon Ross {NT_STATUS_NETWORK_NAME_DELETED, ENOENT}, 2574bff34e3Sthurlow {NT_STATUS_NETWORK_UNREACHABLE, ENETUNREACH}, 2584bff34e3Sthurlow {NT_STATUS_NET_WRITE_FAULT, ECOMM}, 259*40c0e231SGordon Ross {NT_STATUS_NONEXISTENT_EA_ENTRY, ENOENT}, 2604bff34e3Sthurlow {NT_STATUS_NONEXISTENT_SECTOR, ESPIPE}, 26102d09e03SGordon Ross {NT_STATUS_NONE_MAPPED, EINVAL}, 2624bff34e3Sthurlow {NT_STATUS_NOT_A_DIRECTORY, ENOTDIR}, 263*40c0e231SGordon Ross {NT_STATUS_NOT_FOUND, ENOENT}, 264ae3d7f90SGordon Ross {NT_STATUS_NOT_IMPLEMENTED, ENOTSUP}, 265*40c0e231SGordon Ross {NT_STATUS_NOT_LOCKED, ENOLCK}, 2664bff34e3Sthurlow {NT_STATUS_NOT_MAPPED_VIEW, EINVAL}, 267ae3d7f90SGordon Ross {NT_STATUS_NOT_SUPPORTED, ENOTSUP}, 268*40c0e231SGordon Ross {NT_STATUS_NO_EAS_ON_FILE, ENOENT}, 269*40c0e231SGordon Ross {NT_STATUS_NO_LOGON_SERVERS, EAUTH}, 2704bff34e3Sthurlow {NT_STATUS_NO_MEDIA, ENOMEDIUM}, 2714bff34e3Sthurlow {NT_STATUS_NO_MEDIA_IN_DEVICE, ENOMEDIUM}, 2724bff34e3Sthurlow {NT_STATUS_NO_MEMORY, ENOMEM}, 2734bff34e3Sthurlow {NT_STATUS_NO_SUCH_DEVICE, ENODEV}, 2744bff34e3Sthurlow {NT_STATUS_NO_SUCH_FILE, ENOENT}, 275*40c0e231SGordon Ross {NT_STATUS_NO_SUCH_LOGON_SESSION, EAUTH}, 276*40c0e231SGordon Ross {NT_STATUS_NO_SUCH_USER, EAUTH}, 277*40c0e231SGordon Ross {NT_STATUS_NO_TRUST_LSA_SECRET, EAUTH}, 278*40c0e231SGordon Ross {NT_STATUS_NO_TRUST_SAM_ACCOUNT, EAUTH}, 2794bff34e3Sthurlow {NT_STATUS_OBJECT_NAME_COLLISION, EEXIST}, 28091d632c8Sgwr {NT_STATUS_OBJECT_NAME_INVALID, EINVAL}, 28102d09e03SGordon Ross {NT_STATUS_OBJECT_NAME_NOT_FOUND, ENOENT}, 2824bff34e3Sthurlow {NT_STATUS_OBJECT_PATH_INVALID, ENOTDIR}, 28302d09e03SGordon Ross {NT_STATUS_OBJECT_PATH_NOT_FOUND, ENOENT}, 284*40c0e231SGordon Ross {NT_STATUS_OBJECT_PATH_SYNTAX_BAD, EINVAL}, 285*40c0e231SGordon Ross {NT_STATUS_OBJECT_TYPE_MISMATCH, EBADF}, 2864bff34e3Sthurlow {NT_STATUS_PAGEFILE_QUOTA, EDQUOT}, 287*40c0e231SGordon Ross {NT_STATUS_PASSWORD_EXPIRED, EAUTH}, 288*40c0e231SGordon Ross {NT_STATUS_PASSWORD_MUST_CHANGE, EAUTH}, 289*40c0e231SGordon Ross {NT_STATUS_PASSWORD_RESTRICTION, EAUTH}, 2904bff34e3Sthurlow {NT_STATUS_PATH_NOT_COVERED, ENOENT}, 2914bff34e3Sthurlow {NT_STATUS_PIPE_BROKEN, EPIPE}, 2924bff34e3Sthurlow {NT_STATUS_PIPE_BUSY, EPIPE}, 2934bff34e3Sthurlow {NT_STATUS_PIPE_CONNECTED, EISCONN}, 2944bff34e3Sthurlow {NT_STATUS_PIPE_DISCONNECTED, EPIPE}, 295ae3d7f90SGordon Ross {NT_STATUS_PIPE_NOT_AVAILABLE, EBUSY}, 2964bff34e3Sthurlow {NT_STATUS_PORT_CONNECTION_REFUSED, ECONNREFUSED}, 297*40c0e231SGordon Ross {NT_STATUS_PORT_DISCONNECTED, EBADF}, 2984bff34e3Sthurlow {NT_STATUS_PORT_MESSAGE_TOO_LONG, EMSGSIZE}, 2994bff34e3Sthurlow {NT_STATUS_PORT_UNREACHABLE, EHOSTUNREACH}, 3004bff34e3Sthurlow {NT_STATUS_PROTOCOL_UNREACHABLE, ENOPROTOOPT}, 3014bff34e3Sthurlow {NT_STATUS_QUOTA_EXCEEDED, EDQUOT}, 302*40c0e231SGordon Ross {NT_STATUS_RANGE_NOT_LOCKED, EAGAIN}, /* like F_SETLK */ 3034bff34e3Sthurlow {NT_STATUS_REGISTRY_QUOTA_LIMIT, EDQUOT}, 3044bff34e3Sthurlow {NT_STATUS_REMOTE_DISCONNECT, ESHUTDOWN}, 3054bff34e3Sthurlow {NT_STATUS_REMOTE_NOT_LISTENING, ECONNREFUSED}, 3064bff34e3Sthurlow {NT_STATUS_REQUEST_NOT_ACCEPTED, EACCES}, 3074bff34e3Sthurlow {NT_STATUS_RETRY, EAGAIN}, 3084bff34e3Sthurlow {NT_STATUS_SHARING_VIOLATION, EBUSY}, 3094bff34e3Sthurlow {NT_STATUS_TIMER_NOT_CANCELED, ETIME}, 3104bff34e3Sthurlow {NT_STATUS_TOO_MANY_LINKS, EMLINK}, 3114bff34e3Sthurlow {NT_STATUS_TOO_MANY_OPENED_FILES, EMFILE}, 312*40c0e231SGordon Ross {NT_STATUS_TRUSTED_DOMAIN_FAILURE, EAUTH}, 313*40c0e231SGordon Ross {NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE, EAUTH}, 3144bff34e3Sthurlow {NT_STATUS_UNABLE_TO_FREE_VM, EADDRINUSE}, 3154bff34e3Sthurlow {NT_STATUS_UNSUCCESSFUL, EINVAL}, 316*40c0e231SGordon Ross {NT_STATUS_WRONG_PASSWORD, EAUTH}, 3174bff34e3Sthurlow {0, 0} 3184bff34e3Sthurlow }; 3194bff34e3Sthurlow 320148c5f43SAlan Wright /* 321148c5f43SAlan Wright * Table for converting NT STATUS values to DOS class/code. 322148c5f43SAlan Wright * Rows ordered by integer value of last column (NT STATUS) 323148c5f43SAlan Wright */ 324148c5f43SAlan Wright typedef struct nt2doserr { 32502d09e03SGordon Ross unsigned short dclass; 32602d09e03SGordon Ross unsigned short derr; 32702d09e03SGordon Ross unsigned int nterr; 328148c5f43SAlan Wright } nt2doserr_t; 329148c5f43SAlan Wright 330148c5f43SAlan Wright static const nt2doserr_t nt2doserr[] = { 3314bff34e3Sthurlow {ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL}, 3324bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED}, 333148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_INFO_CLASS}, 334148c5f43SAlan Wright {ERRDOS, ERROR_BAD_LENGTH, NT_STATUS_INFO_LENGTH_MISMATCH}, 3354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION}, 3364bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR}, 3374bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA}, 3384bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_INVALID_HANDLE}, 3394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_INITIAL_STACK}, 340148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_BAD_INITIAL_PC}, 341148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_CID}, 3424bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TIMER_NOT_CANCELED}, 343148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER}, 3444bff34e3Sthurlow {ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_DEVICE}, 3454bff34e3Sthurlow {ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_FILE}, 3464bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_INVALID_DEVICE_REQUEST}, 347148c5f43SAlan Wright {ERRDOS, ERROR_HANDLE_EOF, NT_STATUS_END_OF_FILE}, 348148c5f43SAlan Wright {ERRDOS, ERROR_WRONG_DISK, NT_STATUS_WRONG_VOLUME}, 349148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_NO_MEDIA_IN_DEVICE}, 3504bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_MEDIA}, 351148c5f43SAlan Wright {ERRDOS, ERROR_SECTOR_NOT_FOUND, NT_STATUS_NONEXISTENT_SECTOR}, 3524bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY}, 353148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_CONFLICTING_ADDRESSES}, 354148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_MAPPED_VIEW}, 355148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_UNABLE_TO_FREE_VM}, 356148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_UNABLE_TO_DELETE_SECTION}, 357148c5f43SAlan Wright {ERRDOS, NERR_InvalidAPI, NT_STATUS_INVALID_SYSTEM_SERVICE}, 3584bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_INSTRUCTION}, 3594bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_INVALID_LOCK_SEQUENCE}, 3604bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_INVALID_VIEW_SIZE}, 361148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_FILE_FOR_SECTION}, 3624bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ALREADY_COMMITTED}, 3634bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED}, 364148c5f43SAlan Wright {ERRDOS, ERROR_BUFFER_OVERFLOW, NT_STATUS_BUFFER_TOO_SMALL}, 3654bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_OBJECT_TYPE_MISMATCH}, 3664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NONCONTINUABLE_EXCEPTION}, 3674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DISPOSITION}, 3684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNWIND}, 3694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_STACK}, 3704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_UNWIND_TARGET}, 371148c5f43SAlan Wright {ERRDOS, ERROR_NOT_LOCKED, NT_STATUS_NOT_LOCKED}, 3724bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PARITY_ERROR}, 373148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_UNABLE_TO_DECOMMIT_VM}, 374148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_COMMITTED}, 3754bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PORT_ATTRIBUTES}, 3764bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PORT_MESSAGE_TOO_LONG}, 377148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_MIX}, 3784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_QUOTA_LOWER}, 3794bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_CORRUPT_ERROR}, 380148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_NAME, NT_STATUS_OBJECT_NAME_INVALID}, 3814bff34e3Sthurlow {ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND}, 382148c5f43SAlan Wright {ERRDOS, ERROR_ALREADY_EXISTS, NT_STATUS_OBJECT_NAME_COLLISION}, 3834bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_PORT_DISCONNECTED}, 3844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_ALREADY_ATTACHED}, 385148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_OBJECT_PATH_INVALID}, 3864bff34e3Sthurlow {ERRDOS, ERRbadpath, NT_STATUS_OBJECT_PATH_NOT_FOUND}, 387148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_OBJECT_PATH_SYNTAX_BAD}, 3884bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DATA_OVERRUN}, 3894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DATA_LATE_ERROR}, 390148c5f43SAlan Wright {ERRDOS, ERROR_CRC, NT_STATUS_DATA_ERROR}, 391148c5f43SAlan Wright {ERRDOS, ERROR_CRC, NT_STATUS_CRC_ERROR}, 3924bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_SECTION_TOO_BIG}, 3934bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_PORT_CONNECTION_REFUSED}, 3944bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_INVALID_PORT_HANDLE}, 395148c5f43SAlan Wright {ERRDOS, ERROR_SHARING_VIOLATION, NT_STATUS_SHARING_VIOLATION}, 3964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_QUOTA_EXCEEDED}, 397148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PAGE_PROTECTION}, 398148c5f43SAlan Wright {ERRDOS, ERROR_NOT_OWNER, NT_STATUS_MUTANT_NOT_OWNED}, 399148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_POSTS, NT_STATUS_SEMAPHORE_LIMIT_EXCEEDED}, 400148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_PORT_ALREADY_SET}, 401148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_SECTION_NOT_IMAGE}, 402148c5f43SAlan Wright {ERRDOS, ERROR_SIGNAL_REFUSED, NT_STATUS_SUSPEND_COUNT_EXCEEDED}, 4034bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_THREAD_IS_TERMINATING}, 404148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_BAD_WORKING_SET_LIMIT}, 405148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INCOMPATIBLE_FILE_MAP}, 406148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_SECTION_PROTECTION}, 407148c5f43SAlan Wright {ERRDOS, ERROR_EAS_NOT_SUPPORTED, NT_STATUS_EAS_NOT_SUPPORTED}, 408148c5f43SAlan Wright {ERRDOS, ERROR_EA_LIST_INCONSISTENT, NT_STATUS_EA_TOO_LARGE}, 4094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NONEXISTENT_EA_ENTRY}, 4104bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_EAS_ON_FILE}, 4114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EA_CORRUPT_ERROR}, 412148c5f43SAlan Wright {ERRDOS, ERROR_LOCK_VIOLATION, NT_STATUS_FILE_LOCK_CONFLICT}, 413148c5f43SAlan Wright {ERRDOS, ERROR_LOCK_VIOLATION, NT_STATUS_LOCK_NOT_GRANTED}, 4144bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_DELETE_PENDING}, 415148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_CTL_FILE_NOT_SUPPORTED}, 4164bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNKNOWN_REVISION}, 4174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REVISION_MISMATCH}, 4184bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_OWNER}, 4194bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PRIMARY_GROUP}, 4204bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_IMPERSONATION_TOKEN}, 4214bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_DISABLE_MANDATORY}, 422148c5f43SAlan Wright {ERRDOS, NERR_LogonServerNotFound, NT_STATUS_NO_LOGON_SERVERS}, 4234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_LOGON_SESSION}, 4244bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PRIVILEGE}, 4254bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_PRIVILEGE_NOT_HELD}, 4264bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACCOUNT_NAME}, 4274bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_USER_EXISTS}, 4284bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_SUCH_USER}, 4294bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_GROUP_EXISTS}, 4304bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_GROUP}, 4314bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_GROUP}, 4324bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_GROUP}, 4334bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LAST_ADMIN}, 4344bff34e3Sthurlow {ERRSRV, ERRbadpw, NT_STATUS_WRONG_PASSWORD}, 4354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_PASSWORD}, 4364bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PASSWORD_RESTRICTION}, 4374bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_LOGON_FAILURE}, 4384bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ACCOUNT_RESTRICTION}, 439148c5f43SAlan Wright {ERRSRV, NERR_InvalidLogonHours, NT_STATUS_INVALID_LOGON_HOURS}, 440148c5f43SAlan Wright {ERRSRV, NERR_InvalidWorkstation, NT_STATUS_INVALID_WORKSTATION}, 441148c5f43SAlan Wright {ERRSRV, NERR_PasswordExpired, NT_STATUS_PASSWORD_EXPIRED}, 442148c5f43SAlan Wright {ERRSRV, NERR_AccountExpired, NT_STATUS_ACCOUNT_DISABLED}, 4434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NONE_MAPPED}, 4444bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LUIDS_REQUESTED}, 4454bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LUIDS_EXHAUSTED}, 4464bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SUB_AUTHORITY}, 4474bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACL}, 4484bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SID}, 4494bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SECURITY_DESCR}, 450148c5f43SAlan Wright {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_PROCEDURE_NOT_FOUND}, 451148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_FORMAT}, 4524bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_TOKEN}, 4534bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_INHERITANCE_ACL}, 454148c5f43SAlan Wright {ERRDOS, ERROR_NOT_LOCKED, NT_STATUS_RANGE_NOT_LOCKED}, 455148c5f43SAlan Wright {ERRDOS, ERROR_DISK_FULL, NT_STATUS_DISK_FULL}, 4564bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SERVER_DISABLED}, 4574bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SERVER_NOT_DISABLED}, 458148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_GUIDS_REQUESTED}, 459148c5f43SAlan Wright {ERRDOS, ERROR_NO_MORE_ITEMS, NT_STATUS_GUIDS_EXHAUSTED}, 4604bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ID_AUTHORITY}, 461148c5f43SAlan Wright {ERRDOS, ERROR_NO_MORE_ITEMS, NT_STATUS_AGENTS_EXHAUSTED}, 462148c5f43SAlan Wright {ERRDOS, ERROR_LABEL_TOO_LONG, NT_STATUS_INVALID_VOLUME_LABEL}, 463148c5f43SAlan Wright {ERRDOS, ERROR_OUTOFMEMORY, NT_STATUS_SECTION_NOT_EXTENDED}, 464148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_MAPPED_DATA}, 4654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_DATA_NOT_FOUND}, 4664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_TYPE_NOT_FOUND}, 4674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_NAME_NOT_FOUND}, 4684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ARRAY_BOUNDS_EXCEEDED}, 4694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DENORMAL_OPERAND}, 4704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DIVIDE_BY_ZERO}, 4714bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INEXACT_RESULT}, 4724bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INVALID_OPERATION}, 4734bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_OVERFLOW}, 4744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_STACK_CHECK}, 4754bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_UNDERFLOW}, 4764bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTEGER_DIVIDE_BY_ZERO}, 477148c5f43SAlan Wright {ERRDOS, ERROR_ARITHMETIC_OVERFLOW, NT_STATUS_INTEGER_OVERFLOW}, 4784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PRIVILEGED_INSTRUCTION}, 4794bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_TOO_MANY_PAGING_FILES}, 4804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FILE_INVALID}, 4814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ALLOTTED_SPACE_EXCEEDED}, 4824bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_INSUFFICIENT_RESOURCES}, 4834bff34e3Sthurlow {ERRDOS, ERRbadpath, NT_STATUS_DFS_EXIT_PATH_FOUND}, 484148c5f43SAlan Wright {ERRDOS, ERROR_CRC, NT_STATUS_DEVICE_DATA_ERROR}, 4854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_CONNECTED}, 486148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_DEVICE_POWER_FAILURE}, 487148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_FREE_VM_NOT_AT_BASE}, 488148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_MEMORY_NOT_ALLOCATED}, 4894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_WORKING_SET_QUOTA}, 490148c5f43SAlan Wright {ERRDOS, ERROR_WRITE_PROTECT, NT_STATUS_MEDIA_WRITE_PROTECTED}, 491148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_DEVICE_NOT_READY}, 4924bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_GROUP_ATTRIBUTES}, 4934bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_IMPERSONATION_LEVEL}, 4944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_OPEN_ANONYMOUS}, 4954bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_VALIDATION_CLASS}, 4964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_TOKEN_TYPE}, 497148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_BAD_MASTER_BOOT_RECORD}, 4984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INSTRUCTION_MISALIGNMENT}, 499148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_INSTANCE_NOT_AVAILABLE}, 500148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_PIPE_NOT_AVAILABLE}, 501148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PIPE, NT_STATUS_INVALID_PIPE_STATE}, 502148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_PIPE_BUSY}, 5034bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_ILLEGAL_FUNCTION}, 504148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_NOT_CONNECTED, NT_STATUS_PIPE_DISCONNECTED}, 505148c5f43SAlan Wright {ERRDOS, ERROR_NO_DATA, NT_STATUS_PIPE_CLOSING}, 5064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PIPE_CONNECTED}, 5074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PIPE_LISTENING}, 508148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PIPE, NT_STATUS_INVALID_READ_MODE}, 509148c5f43SAlan Wright {ERRDOS, ERROR_SEM_TIMEOUT, NT_STATUS_IO_TIMEOUT}, 510148c5f43SAlan Wright {ERRDOS, ERROR_HANDLE_EOF, NT_STATUS_FILE_FORCED_CLOSED}, 5114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STARTED}, 5124bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STOPPED}, 5134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_COULD_NOT_INTERPRET}, 5144bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_FILE_IS_A_DIRECTORY}, 515148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_SUPPORTED}, 516148c5f43SAlan Wright {ERRDOS, ERROR_REM_NOT_LIST, NT_STATUS_REMOTE_NOT_LISTENING}, 517148c5f43SAlan Wright {ERRDOS, ERROR_DUP_NAME, NT_STATUS_DUPLICATE_NAME}, 518148c5f43SAlan Wright {ERRDOS, ERROR_BAD_NETPATH, NT_STATUS_BAD_NETWORK_PATH}, 519148c5f43SAlan Wright {ERRDOS, ERROR_NETWORK_BUSY, NT_STATUS_NETWORK_BUSY}, 520148c5f43SAlan Wright {ERRDOS, ERROR_DEV_NOT_EXIST, NT_STATUS_DEVICE_DOES_NOT_EXIST}, 521148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_CMDS, NT_STATUS_TOO_MANY_COMMANDS}, 522148c5f43SAlan Wright {ERRDOS, ERROR_ADAP_HDW_ERR, NT_STATUS_ADAPTER_HARDWARE_ERROR}, 523148c5f43SAlan Wright {ERRDOS, ERROR_BAD_NET_RESP, NT_STATUS_INVALID_NETWORK_RESPONSE}, 524148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_UNEXPECTED_NETWORK_ERROR}, 525148c5f43SAlan Wright {ERRDOS, ERROR_BAD_REM_ADAP, NT_STATUS_BAD_REMOTE_ADAPTER}, 526148c5f43SAlan Wright {ERRDOS, ERROR_PRINTQ_FULL, NT_STATUS_PRINT_QUEUE_FULL}, 527148c5f43SAlan Wright {ERRDOS, ERROR_NO_SPOOL_SPACE, NT_STATUS_NO_SPOOL_SPACE}, 528148c5f43SAlan Wright {ERRDOS, ERROR_PRINT_CANCELLED, NT_STATUS_PRINT_CANCELLED}, 529148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_NETWORK_NAME_DELETED}, 530148c5f43SAlan Wright {ERRDOS, ERROR_NETWORK_ACCESS_DENIED, NT_STATUS_NETWORK_ACCESS_DENIED}, 531148c5f43SAlan Wright {ERRDOS, ERROR_BAD_DEV_TYPE, NT_STATUS_BAD_DEVICE_TYPE}, 532148c5f43SAlan Wright {ERRDOS, ERROR_BAD_NET_NAME, NT_STATUS_BAD_NETWORK_NAME}, 533148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_NAMES}, 534148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_SESS, NT_STATUS_TOO_MANY_SESSIONS}, 535148c5f43SAlan Wright {ERRDOS, ERROR_SHARING_PAUSED, NT_STATUS_SHARING_PAUSED}, 536148c5f43SAlan Wright {ERRDOS, ERROR_REQ_NOT_ACCEP, NT_STATUS_REQUEST_NOT_ACCEPTED}, 537148c5f43SAlan Wright {ERRDOS, ERROR_REDIR_PAUSED, NT_STATUS_REDIRECTOR_PAUSED}, 538148c5f43SAlan Wright {ERRDOS, ERROR_NET_WRITE_FAULT, NT_STATUS_NET_WRITE_FAULT}, 5394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_AT_LIMIT}, 540148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SAME_DEVICE, NT_STATUS_NOT_SAME_DEVICE}, 5414bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_FILE_RENAMED}, 542148c5f43SAlan Wright {ERRDOS, ERROR_VC_DISCONNECTED, NT_STATUS_VIRTUAL_CIRCUIT_CLOSED}, 5434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SECURITY_ON_OBJECT}, 5444bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_WAIT}, 545148c5f43SAlan Wright {ERRDOS, ERROR_NO_DATA, NT_STATUS_PIPE_EMPTY}, 5464bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_ACCESS_DOMAIN_INFO}, 5474bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_TERMINATE_SELF}, 5484bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SERVER_STATE}, 5494bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_STATE}, 5504bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_ROLE}, 5514bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_DOMAIN}, 5524bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_EXISTS}, 5534bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_LIMIT_EXCEEDED}, 554148c5f43SAlan Wright {ERRDOS, ERROR_OPLOCK_NOT_GRANTED, NT_STATUS_OPLOCK_NOT_GRANTED}, 555148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_OPLOCK_PROTOCOL, 556148c5f43SAlan Wright NT_STATUS_INVALID_OPLOCK_PROTOCOL}, 5574bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_CORRUPTION}, 5584bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_ERROR}, 5594bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_GENERIC_NOT_MAPPED}, 5604bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_DESCRIPTOR_FORMAT}, 5614bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_USER_BUFFER}, 5624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_IO_ERROR}, 5634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_CREATE_ERR}, 5644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_MAP_ERROR}, 5654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_EXTEND_ERR}, 5664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_LOGON_PROCESS}, 5674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_EXISTS}, 568148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_1}, 569148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_2}, 570148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_3}, 571148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_4}, 572148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_5}, 573148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_6}, 574148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_7}, 575148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_8}, 576148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_9}, 577148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_10}, 578148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_11}, 579148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_12}, 5804bff34e3Sthurlow {ERRDOS, ERRbadpath, NT_STATUS_REDIRECTOR_NOT_STARTED}, 5814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REDIRECTOR_STARTED}, 5824bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW}, 5834bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PACKAGE}, 5844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_FUNCTION_TABLE}, 585148c5f43SAlan Wright {ERRDOS, ERROR_ENVVAR_NOT_FOUND, NT_STATUS_VARIABLE_NOT_FOUND}, 586148c5f43SAlan Wright {ERRDOS, ERROR_DIR_NOT_EMPTY, NT_STATUS_DIRECTORY_NOT_EMPTY}, 5874bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FILE_CORRUPT_ERROR}, 588148c5f43SAlan Wright {ERRDOS, ERROR_DIRECTORY, NT_STATUS_NOT_A_DIRECTORY}, 5894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_LOGON_SESSION_STATE}, 5904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_COLLISION}, 591148c5f43SAlan Wright {ERRDOS, ERROR_FILENAME_EXCED_RANGE, NT_STATUS_NAME_TOO_LONG}, 592148c5f43SAlan Wright {ERRDOS, NERR_OpenFiles, NT_STATUS_FILES_OPEN}, 593148c5f43SAlan Wright {ERRDOS, NERR_DevInUse, NT_STATUS_CONNECTION_IN_USE}, 5944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MESSAGE_NOT_FOUND}, 5954bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_PROCESS_IS_TERMINATING}, 5964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LOGON_TYPE}, 5974bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_GUID_TRANSLATION}, 5984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANNOT_IMPERSONATE}, 5994bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IMAGE_ALREADY_LOADED}, 6004bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_PRESENT}, 6014bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_NOT_EXIST}, 6024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_ALREADY_OWNED}, 6034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_LID_OWNER}, 6044bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_COMMAND}, 6054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_LID}, 6064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_SELECTOR_NOT_AVAILABLE}, 6074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_SELECTOR}, 6084bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_LDT}, 6094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_SIZE}, 6104bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_OFFSET}, 6114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_DESCRIPTOR}, 612148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_NE_FORMAT}, 6134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RXACT_INVALID_STATE}, 6144bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RXACT_COMMIT_FAILURE}, 6154bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MAPPED_FILE_SIZE_ZERO}, 6164bff34e3Sthurlow {ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES}, 6174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANCELLED}, 6184bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_CANNOT_DELETE}, 6194bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_COMPUTER_NAME}, 6204bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_FILE_DELETED}, 6214bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_ACCOUNT}, 6224bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_GROUP}, 6234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_USER}, 6244bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBERS_PRIMARY_GROUP}, 6254bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_FILE_CLOSED}, 6264bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_THREADS}, 6274bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_THREAD_NOT_IN_PROCESS}, 6284bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOKEN_ALREADY_IN_USE}, 6294bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA_EXCEEDED}, 6304bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_COMMITMENT_LIMIT}, 631148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_LE_FORMAT}, 632148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_NOT_MZ}, 633148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_PROTECT}, 634148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_WIN_16}, 6354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SERVER_CONFLICT}, 6364bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TIME_DIFFERENCE_AT_DC}, 6374bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SYNCHRONIZATION_REQUIRED}, 638148c5f43SAlan Wright {ERRDOS, ERROR_MOD_NOT_FOUND, NT_STATUS_DLL_NOT_FOUND}, 6394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_OPEN_FAILED}, 6404bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IO_PRIVILEGE_FAILED}, 641148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ORDINAL, NT_STATUS_ORDINAL_NOT_FOUND}, 642148c5f43SAlan Wright {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_ENTRYPOINT_NOT_FOUND}, 6434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONTROL_C_EXIT}, 644148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_LOCAL_DISCONNECT}, 645148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_REMOTE_DISCONNECT}, 646148c5f43SAlan Wright {ERRDOS, ERROR_REM_NOT_LIST, NT_STATUS_REMOTE_RESOURCES}, 647148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_LINK_FAILED}, 648148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_LINK_TIMEOUT}, 649148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_INVALID_CONNECTION}, 650148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_INVALID_ADDRESS}, 6514bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DLL_INIT_FAILED}, 6524bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MISSING_SYSTEMFILE}, 6534bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNHANDLED_EXCEPTION}, 6544bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_APP_INIT_FAILURE}, 6554bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_CREATE_FAILED}, 6564bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_PAGEFILE}, 657148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_LEVEL, NT_STATUS_INVALID_LEVEL}, 658148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PASSWORD, NT_STATUS_WRONG_PASSWORD_CORE}, 6594bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_FLOAT_CONTEXT}, 660148c5f43SAlan Wright {ERRDOS, ERROR_BROKEN_PIPE, NT_STATUS_PIPE_BROKEN}, 6614bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_CORRUPT}, 6624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_IO_FAILED}, 6634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_EVENT_PAIR}, 6644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_VOLUME}, 6654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SERIAL_NO_DEVICE_INITED}, 6664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_ALIAS}, 6674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_ALIAS}, 6684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_ALIAS}, 6694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ALIAS_EXISTS}, 6704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_NOT_GRANTED}, 6714bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SECRETS}, 6724bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SECRET_TOO_LONG}, 6734bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_ERROR}, 6744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FULLSCREEN_MODE}, 6754bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_CONTEXT_IDS}, 6764bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_LOGON_TYPE_NOT_GRANTED}, 6774bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_REGISTRY_FILE}, 6784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NT_CROSS_ENCRYPTION_REQUIRED}, 6794bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CTRLR_CONFIG_ERROR}, 6804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FT_MISSING_MEMBER}, 6814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_SERVICE_ENTRY}, 6824bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_CHARACTER}, 6834bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNMAPPABLE_CHARACTER}, 6844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNDEFINED_CHARACTER}, 6854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_VOLUME}, 6864bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_ID_MARK_NOT_FOUND}, 6874bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_WRONG_CYLINDER}, 6884bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_UNKNOWN_ERROR}, 6894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_BAD_REGISTERS}, 6904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_RECALIBRATE_FAILED}, 6914bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_OPERATION_FAILED}, 6924bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_RESET_FAILED}, 6934bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SHARED_IRQ_BUSY}, 6944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FT_ORPHANING}, 69502d09e03SGordon Ross {ERRHRD, ERRgeneral, 69602d09e03SGordon Ross NT_STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT}, 6974bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PARTITION_FAILURE}, 6984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_BLOCK_LENGTH}, 6994bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_PARTITIONED}, 7004bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_LOCK_MEDIA}, 7014bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_UNLOAD_MEDIA}, 7024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EOM_OVERFLOW}, 7034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_MEDIA}, 7044bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_MEMBER}, 7054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_MEMBER}, 7064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_KEY_DELETED}, 7074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_LOG_SPACE}, 7084bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SIDS}, 7094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LM_CROSS_ENCRYPTION_REQUIRED}, 7104bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_KEY_HAS_CHILDREN}, 7114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CHILD_MUST_BE_VOLATILE}, 712148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_DEVICE_CONFIGURATION_ERROR}, 7134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DRIVER_INTERNAL_ERROR}, 714148c5f43SAlan Wright {ERRDOS, ERROR_BAD_COMMAND, NT_STATUS_INVALID_DEVICE_STATE}, 7154bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR}, 7164bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_PROTOCOL_ERROR}, 7174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BACKUP_CONTROLLER}, 7184bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOG_FILE_FULL}, 719148c5f43SAlan Wright {ERRDOS, ERROR_WRITE_PROTECT, NT_STATUS_TOO_LATE}, 7204bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_LSA_SECRET}, 7214bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_SAM_ACCOUNT}, 7224bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_DOMAIN_FAILURE}, 7234bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE}, 7244bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CORRUPT}, 7254bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_CANT_START}, 7264bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_TRUST_FAILURE}, 7274bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MUTANT_LIMIT_EXCEEDED}, 728148c5f43SAlan Wright {ERRDOS, NERR_NetlogonNotStarted, NT_STATUS_NETLOGON_NOT_STARTED}, 729148c5f43SAlan Wright {ERRSRV, NERR_AccountExpired, NT_STATUS_ACCOUNT_EXPIRED}, 7304bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_POSSIBLE_DEADLOCK}, 7314bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NETWORK_CREDENTIAL_CONFLICT}, 7324bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REMOTE_SESSION_LIMIT}, 7334bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CHANGED}, 7344bff34e3Sthurlow {ERRDOS, ERRnoaccess, 73502d09e03SGordon Ross NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT}, 7364bff34e3Sthurlow {ERRDOS, ERRnoaccess, 7374bff34e3Sthurlow NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT}, 7384bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT}, 7394bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_DOMAIN_TRUST_INCONSISTENT}, 7404bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FS_DRIVER_REQUIRED}, 7414bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_USER_SESSION_KEY}, 742148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_USER_SESSION_DELETED}, 7434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_LANG_NOT_FOUND}, 7444bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_INSUFF_SERVER_RESOURCES}, 7454bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_BUFFER_SIZE}, 7464bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_COMPONENT}, 7474bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_WILDCARD}, 748148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_ADDRESSES}, 749148c5f43SAlan Wright {ERRDOS, ERROR_DUP_NAME, NT_STATUS_ADDRESS_ALREADY_EXISTS}, 750148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_ADDRESS_CLOSED}, 751148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_CONNECTION_DISCONNECTED}, 752148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_CONNECTION_RESET}, 753148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_NODES}, 754148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_ABORTED}, 755148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_TIMED_OUT}, 756148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_NO_RELEASE}, 757148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_NO_MATCH}, 758148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_RESPONDED}, 759148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_INVALID_ID}, 760148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_INVALID_TYPE}, 761148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_SERVER_SESSION}, 762148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_CLIENT_SESSION}, 7634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANNOT_LOAD_REGISTRY_FILE}, 7644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEBUG_ATTACH_FAILED}, 7654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SYSTEM_PROCESS_TERMINATED}, 7664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DATA_NOT_ACCEPTED}, 7674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_BROWSER_SERVERS_FOUND}, 7684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_VDM_HARD_ERROR}, 7694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DRIVER_CANCEL_TIMEOUT}, 7704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REPLY_MESSAGE_MISMATCH}, 7714bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MAPPED_ALIGNMENT}, 772148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_IMAGE_CHECKSUM_MISMATCH}, 7734bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOST_WRITEBEHIND_DATA}, 7744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CLIENT_SERVER_PARAMETERS_INVALID}, 775148c5f43SAlan Wright {ERRSRV, NERR_PasswordExpired, NT_STATUS_PASSWORD_MUST_CHANGE}, 7764bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_FOUND}, 7774bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_TINY_STREAM}, 7784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RECOVERY_FAILURE}, 7794bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW_READ}, 7804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FAIL_CHECK}, 7814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DUPLICATE_OBJECTID}, 7824bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_OBJECTID_EXISTS}, 7834bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONVERT_TO_LARGE}, 7844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RETRY}, 7854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FOUND_OUT_OF_SCOPE}, 7864bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ALLOCATE_BUCKET}, 7874bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROPSET_NOT_FOUND}, 7884bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MARSHALL_OVERFLOW}, 7894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_VARIANT}, 7904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND}, 7914bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ACCOUNT_LOCKED_OUT}, 7924bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_HANDLE_NOT_CLOSABLE}, 7934bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_REFUSED}, 7944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_GRACEFUL_DISCONNECT}, 7954bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_ALREADY_ASSOCIATED}, 7964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_NOT_ASSOCIATED}, 7974bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_INVALID}, 7984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ACTIVE}, 7994bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NETWORK_UNREACHABLE}, 8004bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_HOST_UNREACHABLE}, 8014bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROTOCOL_UNREACHABLE}, 8024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PORT_UNREACHABLE}, 8034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REQUEST_ABORTED}, 8044bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ABORTED}, 8054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_COMPRESSION_BUFFER}, 8064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_USER_MAPPED_FILE}, 8074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_AUDIT_FAILED}, 8084bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TIMER_RESOLUTION_NOT_SET}, 8094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_COUNT_LIMIT}, 8104bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGIN_TIME_RESTRICTION}, 8114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGIN_WKSTA_RESTRICTION}, 812148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_IMAGE_MP_UP_MISMATCH}, 8134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INSUFFICIENT_LOGON_INFO}, 8144bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_DLL_ENTRYPOINT}, 8154bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_SERVICE_ENTRYPOINT}, 8164bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LPC_REPLY_LOST}, 8174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT1}, 8184bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT2}, 8194bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_QUOTA_LIMIT}, 8204bff34e3Sthurlow {ERRSRV, ERRbadtype, NT_STATUS_PATH_NOT_COVERED}, 8214bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_CALLBACK_ACTIVE}, 8224bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LICENSE_QUOTA_EXCEEDED}, 8234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_SHORT}, 8244bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_RECENT}, 8254bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PWD_HISTORY_CONFLICT}, 8264bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PLUGPLAY_NO_DEVICE}, 8274bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNSUPPORTED_COMPRESSION}, 8284bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_HW_PROFILE}, 8294bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PLUGPLAY_DEVICE_PATH}, 830148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ORDINAL, NT_STATUS_DRIVER_ORDINAL_NOT_FOUND}, 831148c5f43SAlan Wright {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND}, 832148c5f43SAlan Wright {ERRDOS, ERROR_NOT_OWNER, NT_STATUS_RESOURCE_NOT_OWNED}, 8334bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LINKS}, 8344bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_QUOTA_LIST_INCONSISTENT}, 8354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FILE_IS_OFFLINE}, 836148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_VOLUME_DISMOUNTED}, 837148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_DIRECTORY_IS_A_REPARSE_POINT}, 8384bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ENCRYPTION_FAILED}, 8394bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_DECRYPTION_FAILED}, 8404bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RANGE_NOT_FOUND}, 8414bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_RECOVERY_POLICY}, 8424bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_EFS}, 8434bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_WRONG_EFS}, 8444bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_USER_KEYS}, 8454bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_VOLUME_NOT_UPGRADED}, 846148c5f43SAlan Wright {0, 0, 0} 8474bff34e3Sthurlow }; 8484bff34e3Sthurlow 849148c5f43SAlan Wright int 850148c5f43SAlan Wright smb_maperr32(uint32_t nterr) 8514bff34e3Sthurlow { 852148c5f43SAlan Wright const nt2errno_t *nt2e; 853148c5f43SAlan Wright const nt2doserr_t *nt2d; 8544bff34e3Sthurlow 855148c5f43SAlan Wright switch (NT_SC_SEVERITY(nterr)) { 856148c5f43SAlan Wright case NT_STATUS_SEVERITY_SUCCESS: 857148c5f43SAlan Wright case NT_STATUS_SEVERITY_INFORMATIONAL: 8584bff34e3Sthurlow return (0); 859148c5f43SAlan Wright } 8604bff34e3Sthurlow 8614bff34e3Sthurlow /* first try direct map to unix */ 862148c5f43SAlan Wright for (nt2e = nt2errno; nt2e->errno; nt2e++) 863148c5f43SAlan Wright if (nt2e->nterr == nterr) 864148c5f43SAlan Wright return (nt2e->errno); 865ae3d7f90SGordon Ross smb_errmsg(unknown_err_logpri, "smb_maperr32", 866ae3d7f90SGordon Ross "No direct map for 32 bit server error (0x%x)\n", nterr); 8674bff34e3Sthurlow 8684bff34e3Sthurlow /* ok, then try mapping to dos to unix */ 869148c5f43SAlan Wright for (nt2d = nt2doserr; nt2d->nterr; nt2d++) 870148c5f43SAlan Wright if (nt2d->nterr == nterr) 871148c5f43SAlan Wright return (smb_maperror(nt2d->dclass, nt2d->derr)); 872148c5f43SAlan Wright return (EIO); 8734bff34e3Sthurlow } 8744bff34e3Sthurlow 875*40c0e231SGordon Ross uint_t 876*40c0e231SGordon Ross smb_doserr2status(int dclass, int derr) 877*40c0e231SGordon Ross { 878*40c0e231SGordon Ross const nt2doserr_t *nt2d; 879*40c0e231SGordon Ross 880*40c0e231SGordon Ross if (dclass == 0 && derr == 0) 881*40c0e231SGordon Ross return (0); 882*40c0e231SGordon Ross 883*40c0e231SGordon Ross for (nt2d = nt2doserr; nt2d->nterr; nt2d++) 884*40c0e231SGordon Ross if (nt2d->dclass == dclass && nt2d->derr == derr) 885*40c0e231SGordon Ross return (nt2d->nterr); 886*40c0e231SGordon Ross return (NT_STATUS_UNSUCCESSFUL); 887*40c0e231SGordon Ross } 8884bff34e3Sthurlow 8894bff34e3Sthurlow int 8904bff34e3Sthurlow smb_maperror(int eclass, int eno) 8914bff34e3Sthurlow { 8924bff34e3Sthurlow if (eclass == 0 && eno == 0) 8934bff34e3Sthurlow return (0); 8944bff34e3Sthurlow switch (eclass) { 8954bff34e3Sthurlow case ERRDOS: 8964bff34e3Sthurlow switch (eno) { 897148c5f43SAlan Wright case ERROR_INVALID_LEVEL: 89802d09e03SGordon Ross return (ENOTSUP); 8994bff34e3Sthurlow case ERRbadfunc: 9004bff34e3Sthurlow case ERRbadenv: 9014bff34e3Sthurlow case ERRbadformat: 9024bff34e3Sthurlow case ERRremcd: 9034bff34e3Sthurlow case ERRrmuns: 9044bff34e3Sthurlow return (EINVAL); 9054bff34e3Sthurlow case ERRbadfile: 9064bff34e3Sthurlow case ERRbadpath: 907148c5f43SAlan Wright case ERROR_BAD_DEV_TYPE: 908148c5f43SAlan Wright case ERROR_BAD_NET_NAME: 9094bff34e3Sthurlow return (ENOENT); 9104bff34e3Sthurlow case ERRnofids: 9114bff34e3Sthurlow return (EMFILE); 9124bff34e3Sthurlow case ERRnoaccess: 9134bff34e3Sthurlow /* 9144bff34e3Sthurlow * XXX CSM Reported on samba-technical 12/7/2002 9154bff34e3Sthurlow * 9164bff34e3Sthurlow * There is a case for which server(s) return 9174bff34e3Sthurlow * ERRnoaccess but should return ERRdiskfull: When 9184bff34e3Sthurlow * the offset for a write is exactly the server 9194bff34e3Sthurlow * file size limit then Samba (at least) thinks 9204bff34e3Sthurlow * the reason for zero bytes having been written 9214bff34e3Sthurlow * must have been "access denied" from the local 9224bff34e3Sthurlow * filesystem. This cannot be easily worked 9234bff34e3Sthurlow * around since the server behaviour is 9244bff34e3Sthurlow * indistinguishable from actual access denied. 9254bff34e3Sthurlow * An incomplete workaround: attempt a 2 byte write 9264bff34e3Sthurlow * from "offset-1". (That may require reading at 9274bff34e3Sthurlow * offset-1 first.) The flaw is that reading or 9284bff34e3Sthurlow * writing at offset-1 could cause an 9294bff34e3Sthurlow * unrelated error (due to a byte range lock 9304bff34e3Sthurlow * for instance) and we can't presume the 9314bff34e3Sthurlow * order servers check errors in. 9324bff34e3Sthurlow */ 9334bff34e3Sthurlow case ERRbadaccess: 9344bff34e3Sthurlow return (EACCES); 9354bff34e3Sthurlow case ERRbadshare: 9364bff34e3Sthurlow return (EBUSY); 9374bff34e3Sthurlow case ERRbadfid: 9384bff34e3Sthurlow return (EBADF); 9394bff34e3Sthurlow case ERRbadmcb: 9404bff34e3Sthurlow return (EIO); 9414bff34e3Sthurlow case ERRnomem: 9424bff34e3Sthurlow return (ENOMEM); /* actually remote no mem... */ 9434bff34e3Sthurlow case ERRbadmem: 9444bff34e3Sthurlow return (EFAULT); 9454bff34e3Sthurlow case ERRbaddata: 9464bff34e3Sthurlow return (E2BIG); 9474bff34e3Sthurlow case ERRbaddrive: 9484bff34e3Sthurlow case ERRnotready: /* nt */ 9494bff34e3Sthurlow return (ENXIO); 9504bff34e3Sthurlow case ERRdiffdevice: 9514bff34e3Sthurlow return (EXDEV); 9524bff34e3Sthurlow case ERRnofiles: 9534bff34e3Sthurlow return (0); /* eeof ? */ 9544bff34e3Sthurlow case ERRlock: 95502d09e03SGordon Ross return (EAGAIN); 9564bff34e3Sthurlow case ERRfilexists: 9574bff34e3Sthurlow return (EEXIST); 958148c5f43SAlan Wright case ERROR_INVALID_NAME: 9594bff34e3Sthurlow return (ENOENT); 960148c5f43SAlan Wright case ERROR_DIR_NOT_EMPTY: 9614bff34e3Sthurlow return (ENOTEMPTY); 962148c5f43SAlan Wright case ERROR_NOT_LOCKED: 963148c5f43SAlan Wright return (0); /* we unlock on any close */ 964148c5f43SAlan Wright case ERROR_ALREADY_EXISTS: 9654bff34e3Sthurlow return (EEXIST); 9664bff34e3Sthurlow case ERRmoredata: 9674bff34e3Sthurlow return (EMOREDATA); 9684bff34e3Sthurlow } 9694bff34e3Sthurlow break; 9704bff34e3Sthurlow case ERRSRV: 9714bff34e3Sthurlow switch (eno) { 9724bff34e3Sthurlow case ERRerror: 9734bff34e3Sthurlow return (EINVAL); 9744bff34e3Sthurlow case ERRbadpw: 9754bff34e3Sthurlow return (EAUTH); 9764bff34e3Sthurlow case ERRaccess: 9774bff34e3Sthurlow case ERRbaduid: 9784bff34e3Sthurlow return (EACCES); 9794bff34e3Sthurlow case ERRinvnid: 9804bff34e3Sthurlow return (ENETRESET); 9814bff34e3Sthurlow case ERRinvnetname: 98202d09e03SGordon Ross return (ENXIO); 9834bff34e3Sthurlow case ERRbadtype: /* reserved and returned */ 9844bff34e3Sthurlow return (EIO); 985148c5f43SAlan Wright case NERR_AccountExpired: /* account exists but disabled */ 9864bff34e3Sthurlow return (EPERM); 9874bff34e3Sthurlow } 9884bff34e3Sthurlow break; 9894bff34e3Sthurlow case ERRHRD: 9904bff34e3Sthurlow switch (eno) { 9914bff34e3Sthurlow case ERRnowrite: 9924bff34e3Sthurlow return (EROFS); 9934bff34e3Sthurlow case ERRbadunit: 9944bff34e3Sthurlow return (ENODEV); 9954bff34e3Sthurlow case ERRbadreq: 9964bff34e3Sthurlow return (EBADRPC); 9974bff34e3Sthurlow case ERRbadshare: 9984bff34e3Sthurlow return (ETXTBSY); 9994bff34e3Sthurlow case ERRlock: 100002d09e03SGordon Ross return (EAGAIN); 10014bff34e3Sthurlow case ERRdiskfull: 10024bff34e3Sthurlow return (EFBIG); 10034bff34e3Sthurlow case ERRnotready: 10044bff34e3Sthurlow case ERRbadcmd: 10054bff34e3Sthurlow case ERRdata: 10064bff34e3Sthurlow case ERRgeneral: 10074bff34e3Sthurlow return (EIO); 10084bff34e3Sthurlow } 10094bff34e3Sthurlow } 1010ae3d7f90SGordon Ross 1011ae3d7f90SGordon Ross smb_errmsg(unknown_err_logpri, "smb_maperror", 1012ae3d7f90SGordon Ross "Unknown DOS error %d/%d\n", eclass, eno); 1013ae3d7f90SGordon Ross return (EIO); 10144bff34e3Sthurlow } 10154bff34e3Sthurlow 10164bff34e3Sthurlow #if defined(NOICONVSUPPORT) || defined(lint) 10174bff34e3Sthurlow extern int iconv_conv(void *handle, const char **inbuf, 10184bff34e3Sthurlow size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 10194bff34e3Sthurlow #endif 10204bff34e3Sthurlow 10214bff34e3Sthurlow #define SMALL_CONV 256 10224bff34e3Sthurlow 10234bff34e3Sthurlow /*ARGSUSED*/ 10244bff34e3Sthurlow int 10254bff34e3Sthurlow smb_put_dmem(struct mbchain *mbp, struct smb_vc *vcp, const char *src, 10264bff34e3Sthurlow int size, int caseopt, int *lenp) 10274bff34e3Sthurlow { 10284bff34e3Sthurlow uint16_t convbuf[SMALL_CONV]; 10294bff34e3Sthurlow uint16_t *cbuf; 10304bff34e3Sthurlow size_t cbufalloc, inlen, outlen; 10314bff34e3Sthurlow int error; 10324bff34e3Sthurlow 10334bff34e3Sthurlow if (size <= 0) 10344bff34e3Sthurlow return (0); 10354bff34e3Sthurlow 10364bff34e3Sthurlow /* 10374bff34e3Sthurlow * Handle the easy case (non-unicode). 10384bff34e3Sthurlow * XXX: Technically, we should convert 10394bff34e3Sthurlow * the string to OEM codeset first... 10404bff34e3Sthurlow * Modern servers all use Unicode, so 10414bff34e3Sthurlow * this is good enough. 10424bff34e3Sthurlow */ 10434bff34e3Sthurlow if (SMB_UNICODE_STRINGS(vcp) == 0) { 10444bff34e3Sthurlow error = mb_put_mem(mbp, src, size, MB_MSYSTEM); 10454bff34e3Sthurlow if (!error && lenp) 10464bff34e3Sthurlow *lenp += size; 10474bff34e3Sthurlow return (error); 10484bff34e3Sthurlow } 10494bff34e3Sthurlow 10504bff34e3Sthurlow /* 10514bff34e3Sthurlow * Convert to UCS-2 (really UTF-16). 10524bff34e3Sthurlow * Use stack buffer if the string is 10534bff34e3Sthurlow * small enough, else allocate. 10544bff34e3Sthurlow */ 10554bff34e3Sthurlow if (size <= SMALL_CONV) { 10564bff34e3Sthurlow cbufalloc = 0; 10574bff34e3Sthurlow outlen = SMALL_CONV; 10584bff34e3Sthurlow cbuf = convbuf; 10594bff34e3Sthurlow } else { 10604bff34e3Sthurlow outlen = size; /* in utf-16 characters */ 10614bff34e3Sthurlow cbufalloc = outlen * 2; 10624bff34e3Sthurlow cbuf = kmem_alloc(cbufalloc, KM_SLEEP); 10634bff34e3Sthurlow } 10644bff34e3Sthurlow 10654bff34e3Sthurlow inlen = size; 10664bff34e3Sthurlow error = uconv_u8tou16((uchar_t *)src, &inlen, cbuf, &outlen, 10674bff34e3Sthurlow UCONV_OUT_LITTLE_ENDIAN | UCONV_IGNORE_NULL); 10684bff34e3Sthurlow outlen *= 2; /* convert to bytes */ 10694bff34e3Sthurlow 10704bff34e3Sthurlow if (!error) { 10714bff34e3Sthurlow (void) mb_put_padbyte(mbp); /* align */ 10724bff34e3Sthurlow error = mb_put_mem(mbp, (char *)cbuf, outlen, MB_MSYSTEM); 10734bff34e3Sthurlow } 10744bff34e3Sthurlow if (!error && lenp) 10754bff34e3Sthurlow *lenp += outlen; 10764bff34e3Sthurlow 10774bff34e3Sthurlow if (cbufalloc) 10784bff34e3Sthurlow kmem_free(cbuf, cbufalloc); 10794bff34e3Sthurlow 10804bff34e3Sthurlow return (error); 10814bff34e3Sthurlow } 10824bff34e3Sthurlow 10834bff34e3Sthurlow int 10844bff34e3Sthurlow smb_put_dstring(struct mbchain *mbp, struct smb_vc *vcp, const char *src, 10854bff34e3Sthurlow int caseopt) 10864bff34e3Sthurlow { 10874bff34e3Sthurlow int error, len; 10884bff34e3Sthurlow 10894bff34e3Sthurlow /* 10904bff34e3Sthurlow * Let smb_put_dmem put both the string 10914bff34e3Sthurlow * and the terminating null. 10924bff34e3Sthurlow */ 10934bff34e3Sthurlow len = strlen(src) + 1; 10944bff34e3Sthurlow error = smb_put_dmem(mbp, vcp, src, len, caseopt, NULL); 10954bff34e3Sthurlow if (error) 10964bff34e3Sthurlow return (error); 10974bff34e3Sthurlow 10984bff34e3Sthurlow return (error); 10994bff34e3Sthurlow } 1100