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. 37613a2f6bSGordon Ross */ 384bff34e3Sthurlow 394bff34e3Sthurlow #include <sys/param.h> 404bff34e3Sthurlow #include <sys/systm.h> 414bff34e3Sthurlow #include <sys/kmem.h> 424bff34e3Sthurlow #include <sys/proc.h> 434bff34e3Sthurlow #include <sys/lock.h> 444bff34e3Sthurlow #include <sys/socket.h> 454bff34e3Sthurlow #include <sys/isa_defs.h> 464bff34e3Sthurlow #include <sys/stream.h> 474bff34e3Sthurlow #include <sys/strsun.h> 484bff34e3Sthurlow #include <sys/sunddi.h> 494bff34e3Sthurlow #include <sys/cmn_err.h> 504bff34e3Sthurlow #include <sys/sdt.h> 514bff34e3Sthurlow #include <sys/priv.h> 524bff34e3Sthurlow #include <sys/u8_textprep.h> 534bff34e3Sthurlow 544bff34e3Sthurlow #include <netsmb/smb_osdep.h> 554bff34e3Sthurlow #include <netsmb/smb.h> 564bff34e3Sthurlow #include <netsmb/smb_conn.h> 574bff34e3Sthurlow #include <netsmb/smb_rq.h> 584bff34e3Sthurlow #include <netsmb/smb_subr.h> 594bff34e3Sthurlow 604bff34e3Sthurlow /* 614bff34e3Sthurlow * XXX:This conversion might not be fully MS-Compatible 624bff34e3Sthurlow * for calculating hashes. The output length may differ 634bff34e3Sthurlow * for some locales and needs to be handled from where 644bff34e3Sthurlow * the call is made. 654bff34e3Sthurlow */ 664bff34e3Sthurlow int 674bff34e3Sthurlow smb_toupper(const char *inbuf, char *outbuf, size_t outlen) 684bff34e3Sthurlow { 694bff34e3Sthurlow int err = 0; 704bff34e3Sthurlow size_t inlen, inrem, outrem; 714bff34e3Sthurlow 724bff34e3Sthurlow inrem = inlen = strlen(inbuf); 734bff34e3Sthurlow outrem = outlen; 744bff34e3Sthurlow (void) u8_textprep_str((char *)inbuf, &inrem, outbuf, &outrem, 754bff34e3Sthurlow U8_TEXTPREP_TOUPPER, U8_UNICODE_LATEST, &err); 764bff34e3Sthurlow /* inrem, outrem are bytes unused, remaining */ 774bff34e3Sthurlow if (inrem) { 784bff34e3Sthurlow SMBSDEBUG("input %d remains: %s\n", (int)inrem, inbuf); 794bff34e3Sthurlow inlen -= inrem; 804bff34e3Sthurlow } 814bff34e3Sthurlow if (outrem) { 824bff34e3Sthurlow outlen -= outrem; 834bff34e3Sthurlow outbuf[outlen] = '\0'; 844bff34e3Sthurlow } 854bff34e3Sthurlow if (outlen > inlen) { 864bff34e3Sthurlow SMBSDEBUG("outlen > inlen! (%d > %d)\n", 874bff34e3Sthurlow (int)outlen, (int)inlen); 884bff34e3Sthurlow /* Truncate to inlen here? */ 894bff34e3Sthurlow } 904bff34e3Sthurlow 914bff34e3Sthurlow return (err); 924bff34e3Sthurlow } 934bff34e3Sthurlow 944bff34e3Sthurlow void 95613a2f6bSGordon Ross smb_credinit(struct smb_cred *scred, cred_t *cr) 964bff34e3Sthurlow { 97613a2f6bSGordon Ross /* cr arg is optional */ 98613a2f6bSGordon Ross if (cr == NULL) 99613a2f6bSGordon Ross cr = ddi_get_cred(); 1004bff34e3Sthurlow if (is_system_labeled()) { 101613a2f6bSGordon Ross cr = crdup(cr); 102613a2f6bSGordon Ross (void) setpflags(NET_MAC_AWARE, 1, cr); 1034bff34e3Sthurlow } else { 104613a2f6bSGordon Ross crhold(cr); 1054bff34e3Sthurlow } 106613a2f6bSGordon Ross scred->scr_cred = cr; 1074bff34e3Sthurlow } 1084bff34e3Sthurlow 1094bff34e3Sthurlow void 1104bff34e3Sthurlow smb_credrele(struct smb_cred *scred) 1114bff34e3Sthurlow { 112613a2f6bSGordon Ross if (scred->scr_cred != NULL) { 113613a2f6bSGordon Ross crfree(scred->scr_cred); 114613a2f6bSGordon Ross scred->scr_cred = NULL; 1154bff34e3Sthurlow } 1164bff34e3Sthurlow } 1174bff34e3Sthurlow 1184bff34e3Sthurlow /* 1194bff34e3Sthurlow * Helper for the SMBERROR macro, etc. 1204bff34e3Sthurlow * This is also a good place for a breakpoint 1214bff34e3Sthurlow * or a dtrace probe, i.e. fbt:nsmb:smb_errmsg 1224bff34e3Sthurlow */ 1234bff34e3Sthurlow void 1244bff34e3Sthurlow smb_errmsg(int cel, const char *func_name, const char *fmt, ...) 1254bff34e3Sthurlow { 1264bff34e3Sthurlow va_list adx; 1274bff34e3Sthurlow char buf[100]; 1284bff34e3Sthurlow 1294bff34e3Sthurlow va_start(adx, fmt); 1304bff34e3Sthurlow if (cel == CE_CONT) { 1314bff34e3Sthurlow /* 1324bff34e3Sthurlow * This is one of our xxxDEBUG macros. 1334bff34e3Sthurlow * Don't bother to log these, but just 1344bff34e3Sthurlow * fire a dtrace probe with the message. 1354bff34e3Sthurlow */ 13602d09e03SGordon Ross (void) vsnprintf(buf, sizeof (buf), fmt, adx); 1374bff34e3Sthurlow DTRACE_PROBE2(debugmsg2, 1384bff34e3Sthurlow (char *), func_name, 1394bff34e3Sthurlow (char *), buf); 1404bff34e3Sthurlow } else { 1414bff34e3Sthurlow /* 1424bff34e3Sthurlow * This is one of our xxxERROR macros. 1434bff34e3Sthurlow * Add a prefix to the fmt string, 1444bff34e3Sthurlow * then let vcmn_err do the args. 1454bff34e3Sthurlow */ 14602d09e03SGordon Ross (void) snprintf(buf, sizeof (buf), "?%s: %s", func_name, fmt); 1474bff34e3Sthurlow DTRACE_PROBE3(debugmsg3, 1484bff34e3Sthurlow (char *), func_name, 1494bff34e3Sthurlow (char *), buf, 1504bff34e3Sthurlow va_list, adx); 1514bff34e3Sthurlow vcmn_err(cel, buf, adx); 1524bff34e3Sthurlow } 1534bff34e3Sthurlow va_end(adx); 1544bff34e3Sthurlow } 1554bff34e3Sthurlow 1564bff34e3Sthurlow #if 1 /* def SMB_SOCKETDATA_DEBUG */ 1574bff34e3Sthurlow void 1584bff34e3Sthurlow m_dumpm(mblk_t *m) 1594bff34e3Sthurlow { 1604bff34e3Sthurlow int len, seg; 1614bff34e3Sthurlow 1624bff34e3Sthurlow len = msgdsize(m); 1634bff34e3Sthurlow DTRACE_PROBE2(dsize, int, len, (mblk_t *), m); 1644bff34e3Sthurlow 1654bff34e3Sthurlow for (seg = 0; m; seg++) { 1664bff34e3Sthurlow DTRACE_PROBE2(mblk, int, seg, (mblk_t *), m); 1674bff34e3Sthurlow m = m->b_cont; 1684bff34e3Sthurlow } 1694bff34e3Sthurlow } 1704bff34e3Sthurlow #endif 1714bff34e3Sthurlow 1724bff34e3Sthurlow #ifndef EPROTO 1734bff34e3Sthurlow #define EPROTO ECONNABORTED 1744bff34e3Sthurlow #endif 1754bff34e3Sthurlow #ifndef ELIBACC 1764bff34e3Sthurlow #define ELIBACC ENOENT 1774bff34e3Sthurlow #endif 1784bff34e3Sthurlow #ifndef ENODATA 1794bff34e3Sthurlow #define ENODATA EINVAL 1804bff34e3Sthurlow #endif 1814bff34e3Sthurlow #ifndef ENOTUNIQ 1824bff34e3Sthurlow #define ENOTUNIQ EADDRINUSE 1834bff34e3Sthurlow #endif 1844bff34e3Sthurlow #ifndef ECOMM 1854bff34e3Sthurlow #define ECOMM EIO 1864bff34e3Sthurlow #endif 1874bff34e3Sthurlow #ifndef ENOMEDIUM 18802d09e03SGordon Ross #define ENOMEDIUM ENXIO 1894bff34e3Sthurlow #endif 1904bff34e3Sthurlow #ifndef ETIME 1914bff34e3Sthurlow #define ETIME ETIMEDOUT 1924bff34e3Sthurlow #endif 1934bff34e3Sthurlow 194*ae3d7f90SGordon Ross /* 195*ae3d7f90SGordon Ross * Log any un-handled NT or DOS errors we encounter. 196*ae3d7f90SGordon Ross * Make these log NOTICE in a debug build to ensure 197*ae3d7f90SGordon Ross * they get noticed during tests. In the field these 198*ae3d7f90SGordon Ross * are unimportant, so just fire a Dtrace probe. 199*ae3d7f90SGordon Ross */ 200*ae3d7f90SGordon Ross static int unknown_err_logpri = 201*ae3d7f90SGordon Ross #ifdef DEBUG 202*ae3d7f90SGordon Ross CE_NOTE; 203*ae3d7f90SGordon Ross #else 204*ae3d7f90SGordon Ross CE_CONT; 205*ae3d7f90SGordon Ross #endif 206*ae3d7f90SGordon Ross 207148c5f43SAlan Wright typedef struct nt2errno { 20802d09e03SGordon Ross unsigned int nterr; 209148c5f43SAlan Wright int errno; 210148c5f43SAlan Wright } nt2errno_t; 211148c5f43SAlan Wright 212148c5f43SAlan Wright static const nt2errno_t nt2errno[] = { 21302d09e03SGordon Ross /* Alphabetical order. */ 2144bff34e3Sthurlow {NT_STATUS_ACCESS_DENIED, EACCES}, 2154bff34e3Sthurlow {NT_STATUS_ACCESS_VIOLATION, EACCES}, 2164bff34e3Sthurlow {NT_STATUS_ACCOUNT_DISABLED, EACCES}, 21702d09e03SGordon Ross {NT_STATUS_ACCOUNT_EXPIRED, EACCES}, 21802d09e03SGordon Ross {NT_STATUS_ACCOUNT_LOCKED_OUT, EACCES}, 2194bff34e3Sthurlow {NT_STATUS_ACCOUNT_RESTRICTION, EACCES}, 2204bff34e3Sthurlow {NT_STATUS_ADDRESS_ALREADY_EXISTS, EADDRINUSE}, 2214bff34e3Sthurlow {NT_STATUS_BAD_NETWORK_NAME, ENOENT}, 2224bff34e3Sthurlow {NT_STATUS_BUFFER_TOO_SMALL, EMOREDATA}, 2234bff34e3Sthurlow {NT_STATUS_CANNOT_DELETE, EACCES}, 2244bff34e3Sthurlow {NT_STATUS_CONFLICTING_ADDRESSES, EADDRINUSE}, 2254bff34e3Sthurlow {NT_STATUS_CONNECTION_ABORTED, ECONNABORTED}, 2264bff34e3Sthurlow {NT_STATUS_CONNECTION_DISCONNECTED, ECONNABORTED}, 2274bff34e3Sthurlow {NT_STATUS_CONNECTION_REFUSED, ECONNREFUSED}, 2284bff34e3Sthurlow {NT_STATUS_CONNECTION_RESET, ENETRESET}, 22902d09e03SGordon Ross {NT_STATUS_DELETE_PENDING, EACCES}, 2304bff34e3Sthurlow {NT_STATUS_DEVICE_DOES_NOT_EXIST, ENODEV}, 2314bff34e3Sthurlow {NT_STATUS_DEVICE_PROTOCOL_ERROR, EPROTO}, 2324bff34e3Sthurlow {NT_STATUS_DIRECTORY_NOT_EMPTY, ENOTEMPTY}, 2334bff34e3Sthurlow {NT_STATUS_DISK_FULL, ENOSPC}, 2344bff34e3Sthurlow {NT_STATUS_DLL_NOT_FOUND, ELIBACC}, 235*ae3d7f90SGordon Ross {NT_STATUS_DUPLICATE_NAME, EINVAL}, 2364bff34e3Sthurlow {NT_STATUS_END_OF_FILE, ENODATA}, 2374bff34e3Sthurlow {NT_STATUS_FILE_IS_A_DIRECTORY, EISDIR}, 23802d09e03SGordon Ross {NT_STATUS_FILE_LOCK_CONFLICT, EAGAIN}, 2394bff34e3Sthurlow {NT_STATUS_FLOAT_INEXACT_RESULT, ERANGE}, 2404bff34e3Sthurlow {NT_STATUS_FLOAT_OVERFLOW, ERANGE}, 2414bff34e3Sthurlow {NT_STATUS_FLOAT_UNDERFLOW, ERANGE}, 2424bff34e3Sthurlow {NT_STATUS_HOST_UNREACHABLE, EHOSTUNREACH}, 2434bff34e3Sthurlow {NT_STATUS_ILL_FORMED_PASSWORD, EACCES}, 2444bff34e3Sthurlow {NT_STATUS_INTEGER_OVERFLOW, ERANGE}, 24502d09e03SGordon Ross {NT_STATUS_INVALID_ACCOUNT_NAME, EACCES}, 2464bff34e3Sthurlow {NT_STATUS_INVALID_HANDLE, EBADF}, 24702d09e03SGordon Ross {NT_STATUS_INVALID_LEVEL, ENOTSUP}, 2484bff34e3Sthurlow {NT_STATUS_INVALID_LOGON_HOURS, EACCES}, 249148c5f43SAlan Wright {NT_STATUS_INVALID_OWNER, EINVAL}, 2504bff34e3Sthurlow {NT_STATUS_INVALID_PARAMETER, EINVAL}, 2514bff34e3Sthurlow {NT_STATUS_INVALID_PIPE_STATE, EPIPE}, 252148c5f43SAlan Wright {NT_STATUS_INVALID_PRIMARY_GROUP, EINVAL}, 2534bff34e3Sthurlow {NT_STATUS_INVALID_WORKSTATION, EACCES}, 2544bff34e3Sthurlow {NT_STATUS_IN_PAGE_ERROR, EFAULT}, 2554bff34e3Sthurlow {NT_STATUS_IO_TIMEOUT, ETIMEDOUT}, 2564bff34e3Sthurlow {NT_STATUS_IP_ADDRESS_CONFLICT1, ENOTUNIQ}, 2574bff34e3Sthurlow {NT_STATUS_IP_ADDRESS_CONFLICT2, ENOTUNIQ}, 2584bff34e3Sthurlow {NT_STATUS_LICENSE_QUOTA_EXCEEDED, EDQUOT}, 25902d09e03SGordon Ross {NT_STATUS_LOCK_NOT_GRANTED, EAGAIN}, 26002d09e03SGordon Ross {NT_STATUS_LOGIN_TIME_RESTRICTION, EACCES}, 2614bff34e3Sthurlow {NT_STATUS_LOGON_FAILURE, EACCES}, 2624bff34e3Sthurlow {NT_STATUS_MEDIA_WRITE_PROTECTED, EROFS}, 2634bff34e3Sthurlow {NT_STATUS_MEMORY_NOT_ALLOCATED, EFAULT}, 2644bff34e3Sthurlow {NT_STATUS_NAME_TOO_LONG, ENAMETOOLONG}, 2654bff34e3Sthurlow {NT_STATUS_NETWORK_ACCESS_DENIED, EACCES}, 2664bff34e3Sthurlow {NT_STATUS_NETWORK_BUSY, EBUSY}, 2674bff34e3Sthurlow {NT_STATUS_NETWORK_UNREACHABLE, ENETUNREACH}, 2684bff34e3Sthurlow {NT_STATUS_NET_WRITE_FAULT, ECOMM}, 2694bff34e3Sthurlow {NT_STATUS_NONEXISTENT_SECTOR, ESPIPE}, 27002d09e03SGordon Ross {NT_STATUS_NONE_MAPPED, EINVAL}, 2714bff34e3Sthurlow {NT_STATUS_NOT_A_DIRECTORY, ENOTDIR}, 272*ae3d7f90SGordon Ross {NT_STATUS_NOT_IMPLEMENTED, ENOTSUP}, 2734bff34e3Sthurlow {NT_STATUS_NOT_MAPPED_VIEW, EINVAL}, 274*ae3d7f90SGordon Ross {NT_STATUS_NOT_SUPPORTED, ENOTSUP}, 2754bff34e3Sthurlow {NT_STATUS_NO_MEDIA, ENOMEDIUM}, 2764bff34e3Sthurlow {NT_STATUS_NO_MEDIA_IN_DEVICE, ENOMEDIUM}, 2774bff34e3Sthurlow {NT_STATUS_NO_MEMORY, ENOMEM}, 2784bff34e3Sthurlow {NT_STATUS_NO_SUCH_DEVICE, ENODEV}, 2794bff34e3Sthurlow {NT_STATUS_NO_SUCH_FILE, ENOENT}, 2804bff34e3Sthurlow {NT_STATUS_OBJECT_NAME_COLLISION, EEXIST}, 28191d632c8Sgwr {NT_STATUS_OBJECT_NAME_INVALID, EINVAL}, 28202d09e03SGordon Ross {NT_STATUS_OBJECT_NAME_NOT_FOUND, ENOENT}, 2834bff34e3Sthurlow {NT_STATUS_OBJECT_PATH_INVALID, ENOTDIR}, 28402d09e03SGordon Ross {NT_STATUS_OBJECT_PATH_NOT_FOUND, ENOENT}, 2854bff34e3Sthurlow {NT_STATUS_PAGEFILE_QUOTA, EDQUOT}, 2864bff34e3Sthurlow {NT_STATUS_PASSWORD_EXPIRED, EACCES}, 28702d09e03SGordon Ross {NT_STATUS_PASSWORD_MUST_CHANGE, EACCES}, 2884bff34e3Sthurlow {NT_STATUS_PASSWORD_RESTRICTION, EACCES}, 2894bff34e3Sthurlow {NT_STATUS_PATH_NOT_COVERED, ENOENT}, 2904bff34e3Sthurlow {NT_STATUS_PIPE_BROKEN, EPIPE}, 2914bff34e3Sthurlow {NT_STATUS_PIPE_BUSY, EPIPE}, 2924bff34e3Sthurlow {NT_STATUS_PIPE_CONNECTED, EISCONN}, 2934bff34e3Sthurlow {NT_STATUS_PIPE_DISCONNECTED, EPIPE}, 294*ae3d7f90SGordon Ross {NT_STATUS_PIPE_NOT_AVAILABLE, EBUSY}, 2954bff34e3Sthurlow {NT_STATUS_PORT_CONNECTION_REFUSED, ECONNREFUSED}, 2964bff34e3Sthurlow {NT_STATUS_PORT_MESSAGE_TOO_LONG, EMSGSIZE}, 2974bff34e3Sthurlow {NT_STATUS_PORT_UNREACHABLE, EHOSTUNREACH}, 2984bff34e3Sthurlow {NT_STATUS_PROTOCOL_UNREACHABLE, ENOPROTOOPT}, 2994bff34e3Sthurlow {NT_STATUS_QUOTA_EXCEEDED, EDQUOT}, 30002d09e03SGordon Ross {NT_STATUS_RANGE_NOT_LOCKED, EIO}, 3014bff34e3Sthurlow {NT_STATUS_REGISTRY_QUOTA_LIMIT, EDQUOT}, 3024bff34e3Sthurlow {NT_STATUS_REMOTE_DISCONNECT, ESHUTDOWN}, 3034bff34e3Sthurlow {NT_STATUS_REMOTE_NOT_LISTENING, ECONNREFUSED}, 3044bff34e3Sthurlow {NT_STATUS_REQUEST_NOT_ACCEPTED, EACCES}, 3054bff34e3Sthurlow {NT_STATUS_RETRY, EAGAIN}, 3064bff34e3Sthurlow {NT_STATUS_SHARING_VIOLATION, EBUSY}, 3074bff34e3Sthurlow {NT_STATUS_TIMER_NOT_CANCELED, ETIME}, 3084bff34e3Sthurlow {NT_STATUS_TOO_MANY_LINKS, EMLINK}, 3094bff34e3Sthurlow {NT_STATUS_TOO_MANY_OPENED_FILES, EMFILE}, 3104bff34e3Sthurlow {NT_STATUS_UNABLE_TO_FREE_VM, EADDRINUSE}, 3114bff34e3Sthurlow {NT_STATUS_UNSUCCESSFUL, EINVAL}, 3124bff34e3Sthurlow {NT_STATUS_WRONG_PASSWORD, EACCES}, 3134bff34e3Sthurlow {0, 0} 3144bff34e3Sthurlow }; 3154bff34e3Sthurlow 316148c5f43SAlan Wright /* 317148c5f43SAlan Wright * Table for converting NT STATUS values to DOS class/code. 318148c5f43SAlan Wright * Rows ordered by integer value of last column (NT STATUS) 319148c5f43SAlan Wright */ 320148c5f43SAlan Wright typedef struct nt2doserr { 32102d09e03SGordon Ross unsigned short dclass; 32202d09e03SGordon Ross unsigned short derr; 32302d09e03SGordon Ross unsigned int nterr; 324148c5f43SAlan Wright } nt2doserr_t; 325148c5f43SAlan Wright 326148c5f43SAlan Wright static const nt2doserr_t nt2doserr[] = { 3274bff34e3Sthurlow {ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL}, 3284bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED}, 329148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_INFO_CLASS}, 330148c5f43SAlan Wright {ERRDOS, ERROR_BAD_LENGTH, NT_STATUS_INFO_LENGTH_MISMATCH}, 3314bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION}, 3324bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR}, 3334bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA}, 3344bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_INVALID_HANDLE}, 3354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_INITIAL_STACK}, 336148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_BAD_INITIAL_PC}, 337148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_CID}, 3384bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TIMER_NOT_CANCELED}, 339148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER}, 3404bff34e3Sthurlow {ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_DEVICE}, 3414bff34e3Sthurlow {ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_FILE}, 3424bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_INVALID_DEVICE_REQUEST}, 343148c5f43SAlan Wright {ERRDOS, ERROR_HANDLE_EOF, NT_STATUS_END_OF_FILE}, 344148c5f43SAlan Wright {ERRDOS, ERROR_WRONG_DISK, NT_STATUS_WRONG_VOLUME}, 345148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_NO_MEDIA_IN_DEVICE}, 3464bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_MEDIA}, 347148c5f43SAlan Wright {ERRDOS, ERROR_SECTOR_NOT_FOUND, NT_STATUS_NONEXISTENT_SECTOR}, 3484bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY}, 349148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_CONFLICTING_ADDRESSES}, 350148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_MAPPED_VIEW}, 351148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_UNABLE_TO_FREE_VM}, 352148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_UNABLE_TO_DELETE_SECTION}, 353148c5f43SAlan Wright {ERRDOS, NERR_InvalidAPI, NT_STATUS_INVALID_SYSTEM_SERVICE}, 3544bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_INSTRUCTION}, 3554bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_INVALID_LOCK_SEQUENCE}, 3564bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_INVALID_VIEW_SIZE}, 357148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_FILE_FOR_SECTION}, 3584bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ALREADY_COMMITTED}, 3594bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED}, 360148c5f43SAlan Wright {ERRDOS, ERROR_BUFFER_OVERFLOW, NT_STATUS_BUFFER_TOO_SMALL}, 3614bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_OBJECT_TYPE_MISMATCH}, 3624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NONCONTINUABLE_EXCEPTION}, 3634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DISPOSITION}, 3644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNWIND}, 3654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_STACK}, 3664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_UNWIND_TARGET}, 367148c5f43SAlan Wright {ERRDOS, ERROR_NOT_LOCKED, NT_STATUS_NOT_LOCKED}, 3684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PARITY_ERROR}, 369148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_UNABLE_TO_DECOMMIT_VM}, 370148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_COMMITTED}, 3714bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PORT_ATTRIBUTES}, 3724bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PORT_MESSAGE_TOO_LONG}, 373148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_MIX}, 3744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_QUOTA_LOWER}, 3754bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_CORRUPT_ERROR}, 376148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_NAME, NT_STATUS_OBJECT_NAME_INVALID}, 3774bff34e3Sthurlow {ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND}, 378148c5f43SAlan Wright {ERRDOS, ERROR_ALREADY_EXISTS, NT_STATUS_OBJECT_NAME_COLLISION}, 3794bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_PORT_DISCONNECTED}, 3804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_ALREADY_ATTACHED}, 381148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_OBJECT_PATH_INVALID}, 3824bff34e3Sthurlow {ERRDOS, ERRbadpath, NT_STATUS_OBJECT_PATH_NOT_FOUND}, 383148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_OBJECT_PATH_SYNTAX_BAD}, 3844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DATA_OVERRUN}, 3854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DATA_LATE_ERROR}, 386148c5f43SAlan Wright {ERRDOS, ERROR_CRC, NT_STATUS_DATA_ERROR}, 387148c5f43SAlan Wright {ERRDOS, ERROR_CRC, NT_STATUS_CRC_ERROR}, 3884bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_SECTION_TOO_BIG}, 3894bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_PORT_CONNECTION_REFUSED}, 3904bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_INVALID_PORT_HANDLE}, 391148c5f43SAlan Wright {ERRDOS, ERROR_SHARING_VIOLATION, NT_STATUS_SHARING_VIOLATION}, 3924bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_QUOTA_EXCEEDED}, 393148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PAGE_PROTECTION}, 394148c5f43SAlan Wright {ERRDOS, ERROR_NOT_OWNER, NT_STATUS_MUTANT_NOT_OWNED}, 395148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_POSTS, NT_STATUS_SEMAPHORE_LIMIT_EXCEEDED}, 396148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_PORT_ALREADY_SET}, 397148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_SECTION_NOT_IMAGE}, 398148c5f43SAlan Wright {ERRDOS, ERROR_SIGNAL_REFUSED, NT_STATUS_SUSPEND_COUNT_EXCEEDED}, 3994bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_THREAD_IS_TERMINATING}, 400148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_BAD_WORKING_SET_LIMIT}, 401148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INCOMPATIBLE_FILE_MAP}, 402148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_SECTION_PROTECTION}, 403148c5f43SAlan Wright {ERRDOS, ERROR_EAS_NOT_SUPPORTED, NT_STATUS_EAS_NOT_SUPPORTED}, 404148c5f43SAlan Wright {ERRDOS, ERROR_EA_LIST_INCONSISTENT, NT_STATUS_EA_TOO_LARGE}, 4054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NONEXISTENT_EA_ENTRY}, 4064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_EAS_ON_FILE}, 4074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EA_CORRUPT_ERROR}, 408148c5f43SAlan Wright {ERRDOS, ERROR_LOCK_VIOLATION, NT_STATUS_FILE_LOCK_CONFLICT}, 409148c5f43SAlan Wright {ERRDOS, ERROR_LOCK_VIOLATION, NT_STATUS_LOCK_NOT_GRANTED}, 4104bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_DELETE_PENDING}, 411148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_CTL_FILE_NOT_SUPPORTED}, 4124bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNKNOWN_REVISION}, 4134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REVISION_MISMATCH}, 4144bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_OWNER}, 4154bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PRIMARY_GROUP}, 4164bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_IMPERSONATION_TOKEN}, 4174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_DISABLE_MANDATORY}, 418148c5f43SAlan Wright {ERRDOS, NERR_LogonServerNotFound, NT_STATUS_NO_LOGON_SERVERS}, 4194bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_LOGON_SESSION}, 4204bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PRIVILEGE}, 4214bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_PRIVILEGE_NOT_HELD}, 4224bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACCOUNT_NAME}, 4234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_USER_EXISTS}, 4244bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_SUCH_USER}, 4254bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_GROUP_EXISTS}, 4264bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_GROUP}, 4274bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_GROUP}, 4284bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_GROUP}, 4294bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LAST_ADMIN}, 4304bff34e3Sthurlow {ERRSRV, ERRbadpw, NT_STATUS_WRONG_PASSWORD}, 4314bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_PASSWORD}, 4324bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PASSWORD_RESTRICTION}, 4334bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_LOGON_FAILURE}, 4344bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ACCOUNT_RESTRICTION}, 435148c5f43SAlan Wright {ERRSRV, NERR_InvalidLogonHours, NT_STATUS_INVALID_LOGON_HOURS}, 436148c5f43SAlan Wright {ERRSRV, NERR_InvalidWorkstation, NT_STATUS_INVALID_WORKSTATION}, 437148c5f43SAlan Wright {ERRSRV, NERR_PasswordExpired, NT_STATUS_PASSWORD_EXPIRED}, 438148c5f43SAlan Wright {ERRSRV, NERR_AccountExpired, NT_STATUS_ACCOUNT_DISABLED}, 4394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NONE_MAPPED}, 4404bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LUIDS_REQUESTED}, 4414bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LUIDS_EXHAUSTED}, 4424bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SUB_AUTHORITY}, 4434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACL}, 4444bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SID}, 4454bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SECURITY_DESCR}, 446148c5f43SAlan Wright {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_PROCEDURE_NOT_FOUND}, 447148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_FORMAT}, 4484bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_TOKEN}, 4494bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_INHERITANCE_ACL}, 450148c5f43SAlan Wright {ERRDOS, ERROR_NOT_LOCKED, NT_STATUS_RANGE_NOT_LOCKED}, 451148c5f43SAlan Wright {ERRDOS, ERROR_DISK_FULL, NT_STATUS_DISK_FULL}, 4524bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SERVER_DISABLED}, 4534bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SERVER_NOT_DISABLED}, 454148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_GUIDS_REQUESTED}, 455148c5f43SAlan Wright {ERRDOS, ERROR_NO_MORE_ITEMS, NT_STATUS_GUIDS_EXHAUSTED}, 4564bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ID_AUTHORITY}, 457148c5f43SAlan Wright {ERRDOS, ERROR_NO_MORE_ITEMS, NT_STATUS_AGENTS_EXHAUSTED}, 458148c5f43SAlan Wright {ERRDOS, ERROR_LABEL_TOO_LONG, NT_STATUS_INVALID_VOLUME_LABEL}, 459148c5f43SAlan Wright {ERRDOS, ERROR_OUTOFMEMORY, NT_STATUS_SECTION_NOT_EXTENDED}, 460148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_MAPPED_DATA}, 4614bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_DATA_NOT_FOUND}, 4624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_TYPE_NOT_FOUND}, 4634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_NAME_NOT_FOUND}, 4644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ARRAY_BOUNDS_EXCEEDED}, 4654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DENORMAL_OPERAND}, 4664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DIVIDE_BY_ZERO}, 4674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INEXACT_RESULT}, 4684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INVALID_OPERATION}, 4694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_OVERFLOW}, 4704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_STACK_CHECK}, 4714bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_UNDERFLOW}, 4724bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTEGER_DIVIDE_BY_ZERO}, 473148c5f43SAlan Wright {ERRDOS, ERROR_ARITHMETIC_OVERFLOW, NT_STATUS_INTEGER_OVERFLOW}, 4744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PRIVILEGED_INSTRUCTION}, 4754bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_TOO_MANY_PAGING_FILES}, 4764bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FILE_INVALID}, 4774bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ALLOTTED_SPACE_EXCEEDED}, 4784bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_INSUFFICIENT_RESOURCES}, 4794bff34e3Sthurlow {ERRDOS, ERRbadpath, NT_STATUS_DFS_EXIT_PATH_FOUND}, 480148c5f43SAlan Wright {ERRDOS, ERROR_CRC, NT_STATUS_DEVICE_DATA_ERROR}, 4814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_CONNECTED}, 482148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_DEVICE_POWER_FAILURE}, 483148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_FREE_VM_NOT_AT_BASE}, 484148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_MEMORY_NOT_ALLOCATED}, 4854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_WORKING_SET_QUOTA}, 486148c5f43SAlan Wright {ERRDOS, ERROR_WRITE_PROTECT, NT_STATUS_MEDIA_WRITE_PROTECTED}, 487148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_DEVICE_NOT_READY}, 4884bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_GROUP_ATTRIBUTES}, 4894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_IMPERSONATION_LEVEL}, 4904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_OPEN_ANONYMOUS}, 4914bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_VALIDATION_CLASS}, 4924bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_TOKEN_TYPE}, 493148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_BAD_MASTER_BOOT_RECORD}, 4944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INSTRUCTION_MISALIGNMENT}, 495148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_INSTANCE_NOT_AVAILABLE}, 496148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_PIPE_NOT_AVAILABLE}, 497148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PIPE, NT_STATUS_INVALID_PIPE_STATE}, 498148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_PIPE_BUSY}, 4994bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_ILLEGAL_FUNCTION}, 500148c5f43SAlan Wright {ERRDOS, ERROR_PIPE_NOT_CONNECTED, NT_STATUS_PIPE_DISCONNECTED}, 501148c5f43SAlan Wright {ERRDOS, ERROR_NO_DATA, NT_STATUS_PIPE_CLOSING}, 5024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PIPE_CONNECTED}, 5034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PIPE_LISTENING}, 504148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PIPE, NT_STATUS_INVALID_READ_MODE}, 505148c5f43SAlan Wright {ERRDOS, ERROR_SEM_TIMEOUT, NT_STATUS_IO_TIMEOUT}, 506148c5f43SAlan Wright {ERRDOS, ERROR_HANDLE_EOF, NT_STATUS_FILE_FORCED_CLOSED}, 5074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STARTED}, 5084bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STOPPED}, 5094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_COULD_NOT_INTERPRET}, 5104bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_FILE_IS_A_DIRECTORY}, 511148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_SUPPORTED}, 512148c5f43SAlan Wright {ERRDOS, ERROR_REM_NOT_LIST, NT_STATUS_REMOTE_NOT_LISTENING}, 513148c5f43SAlan Wright {ERRDOS, ERROR_DUP_NAME, NT_STATUS_DUPLICATE_NAME}, 514148c5f43SAlan Wright {ERRDOS, ERROR_BAD_NETPATH, NT_STATUS_BAD_NETWORK_PATH}, 515148c5f43SAlan Wright {ERRDOS, ERROR_NETWORK_BUSY, NT_STATUS_NETWORK_BUSY}, 516148c5f43SAlan Wright {ERRDOS, ERROR_DEV_NOT_EXIST, NT_STATUS_DEVICE_DOES_NOT_EXIST}, 517148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_CMDS, NT_STATUS_TOO_MANY_COMMANDS}, 518148c5f43SAlan Wright {ERRDOS, ERROR_ADAP_HDW_ERR, NT_STATUS_ADAPTER_HARDWARE_ERROR}, 519148c5f43SAlan Wright {ERRDOS, ERROR_BAD_NET_RESP, NT_STATUS_INVALID_NETWORK_RESPONSE}, 520148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_UNEXPECTED_NETWORK_ERROR}, 521148c5f43SAlan Wright {ERRDOS, ERROR_BAD_REM_ADAP, NT_STATUS_BAD_REMOTE_ADAPTER}, 522148c5f43SAlan Wright {ERRDOS, ERROR_PRINTQ_FULL, NT_STATUS_PRINT_QUEUE_FULL}, 523148c5f43SAlan Wright {ERRDOS, ERROR_NO_SPOOL_SPACE, NT_STATUS_NO_SPOOL_SPACE}, 524148c5f43SAlan Wright {ERRDOS, ERROR_PRINT_CANCELLED, NT_STATUS_PRINT_CANCELLED}, 525148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_NETWORK_NAME_DELETED}, 526148c5f43SAlan Wright {ERRDOS, ERROR_NETWORK_ACCESS_DENIED, NT_STATUS_NETWORK_ACCESS_DENIED}, 527148c5f43SAlan Wright {ERRDOS, ERROR_BAD_DEV_TYPE, NT_STATUS_BAD_DEVICE_TYPE}, 528148c5f43SAlan Wright {ERRDOS, ERROR_BAD_NET_NAME, NT_STATUS_BAD_NETWORK_NAME}, 529148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_NAMES}, 530148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_SESS, NT_STATUS_TOO_MANY_SESSIONS}, 531148c5f43SAlan Wright {ERRDOS, ERROR_SHARING_PAUSED, NT_STATUS_SHARING_PAUSED}, 532148c5f43SAlan Wright {ERRDOS, ERROR_REQ_NOT_ACCEP, NT_STATUS_REQUEST_NOT_ACCEPTED}, 533148c5f43SAlan Wright {ERRDOS, ERROR_REDIR_PAUSED, NT_STATUS_REDIRECTOR_PAUSED}, 534148c5f43SAlan Wright {ERRDOS, ERROR_NET_WRITE_FAULT, NT_STATUS_NET_WRITE_FAULT}, 5354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_AT_LIMIT}, 536148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SAME_DEVICE, NT_STATUS_NOT_SAME_DEVICE}, 5374bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_FILE_RENAMED}, 538148c5f43SAlan Wright {ERRDOS, ERROR_VC_DISCONNECTED, NT_STATUS_VIRTUAL_CIRCUIT_CLOSED}, 5394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SECURITY_ON_OBJECT}, 5404bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_WAIT}, 541148c5f43SAlan Wright {ERRDOS, ERROR_NO_DATA, NT_STATUS_PIPE_EMPTY}, 5424bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_ACCESS_DOMAIN_INFO}, 5434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANT_TERMINATE_SELF}, 5444bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SERVER_STATE}, 5454bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_STATE}, 5464bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_ROLE}, 5474bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_DOMAIN}, 5484bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_EXISTS}, 5494bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_LIMIT_EXCEEDED}, 550148c5f43SAlan Wright {ERRDOS, ERROR_OPLOCK_NOT_GRANTED, NT_STATUS_OPLOCK_NOT_GRANTED}, 551148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_OPLOCK_PROTOCOL, 552148c5f43SAlan Wright NT_STATUS_INVALID_OPLOCK_PROTOCOL}, 5534bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_CORRUPTION}, 5544bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_ERROR}, 5554bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_GENERIC_NOT_MAPPED}, 5564bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_DESCRIPTOR_FORMAT}, 5574bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_USER_BUFFER}, 5584bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_IO_ERROR}, 5594bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_CREATE_ERR}, 5604bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_MAP_ERROR}, 5614bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_EXTEND_ERR}, 5624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_LOGON_PROCESS}, 5634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_EXISTS}, 564148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_1}, 565148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_2}, 566148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_3}, 567148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_4}, 568148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_5}, 569148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_6}, 570148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_7}, 571148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_8}, 572148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_9}, 573148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_10}, 574148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_11}, 575148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_12}, 5764bff34e3Sthurlow {ERRDOS, ERRbadpath, NT_STATUS_REDIRECTOR_NOT_STARTED}, 5774bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REDIRECTOR_STARTED}, 5784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW}, 5794bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PACKAGE}, 5804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_FUNCTION_TABLE}, 581148c5f43SAlan Wright {ERRDOS, ERROR_ENVVAR_NOT_FOUND, NT_STATUS_VARIABLE_NOT_FOUND}, 582148c5f43SAlan Wright {ERRDOS, ERROR_DIR_NOT_EMPTY, NT_STATUS_DIRECTORY_NOT_EMPTY}, 5834bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FILE_CORRUPT_ERROR}, 584148c5f43SAlan Wright {ERRDOS, ERROR_DIRECTORY, NT_STATUS_NOT_A_DIRECTORY}, 5854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_LOGON_SESSION_STATE}, 5864bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_COLLISION}, 587148c5f43SAlan Wright {ERRDOS, ERROR_FILENAME_EXCED_RANGE, NT_STATUS_NAME_TOO_LONG}, 588148c5f43SAlan Wright {ERRDOS, NERR_OpenFiles, NT_STATUS_FILES_OPEN}, 589148c5f43SAlan Wright {ERRDOS, NERR_DevInUse, NT_STATUS_CONNECTION_IN_USE}, 5904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MESSAGE_NOT_FOUND}, 5914bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_PROCESS_IS_TERMINATING}, 5924bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LOGON_TYPE}, 5934bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_GUID_TRANSLATION}, 5944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANNOT_IMPERSONATE}, 5954bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IMAGE_ALREADY_LOADED}, 5964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_PRESENT}, 5974bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_NOT_EXIST}, 5984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_ALREADY_OWNED}, 5994bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_LID_OWNER}, 6004bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_COMMAND}, 6014bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_LID}, 6024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_SELECTOR_NOT_AVAILABLE}, 6034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_SELECTOR}, 6044bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_LDT}, 6054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_SIZE}, 6064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_OFFSET}, 6074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_DESCRIPTOR}, 608148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_NE_FORMAT}, 6094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RXACT_INVALID_STATE}, 6104bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RXACT_COMMIT_FAILURE}, 6114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MAPPED_FILE_SIZE_ZERO}, 6124bff34e3Sthurlow {ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES}, 6134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANCELLED}, 6144bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_CANNOT_DELETE}, 6154bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_COMPUTER_NAME}, 6164bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_FILE_DELETED}, 6174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_ACCOUNT}, 6184bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_GROUP}, 6194bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_USER}, 6204bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBERS_PRIMARY_GROUP}, 6214bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_FILE_CLOSED}, 6224bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_THREADS}, 6234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_THREAD_NOT_IN_PROCESS}, 6244bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOKEN_ALREADY_IN_USE}, 6254bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA_EXCEEDED}, 6264bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_COMMITMENT_LIMIT}, 627148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_LE_FORMAT}, 628148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_NOT_MZ}, 629148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_PROTECT}, 630148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_WIN_16}, 6314bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SERVER_CONFLICT}, 6324bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TIME_DIFFERENCE_AT_DC}, 6334bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SYNCHRONIZATION_REQUIRED}, 634148c5f43SAlan Wright {ERRDOS, ERROR_MOD_NOT_FOUND, NT_STATUS_DLL_NOT_FOUND}, 6354bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_OPEN_FAILED}, 6364bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IO_PRIVILEGE_FAILED}, 637148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ORDINAL, NT_STATUS_ORDINAL_NOT_FOUND}, 638148c5f43SAlan Wright {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_ENTRYPOINT_NOT_FOUND}, 6394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONTROL_C_EXIT}, 640148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_LOCAL_DISCONNECT}, 641148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_REMOTE_DISCONNECT}, 642148c5f43SAlan Wright {ERRDOS, ERROR_REM_NOT_LIST, NT_STATUS_REMOTE_RESOURCES}, 643148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_LINK_FAILED}, 644148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_LINK_TIMEOUT}, 645148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_INVALID_CONNECTION}, 646148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_INVALID_ADDRESS}, 6474bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DLL_INIT_FAILED}, 6484bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MISSING_SYSTEMFILE}, 6494bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNHANDLED_EXCEPTION}, 6504bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_APP_INIT_FAILURE}, 6514bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_CREATE_FAILED}, 6524bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_PAGEFILE}, 653148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_LEVEL, NT_STATUS_INVALID_LEVEL}, 654148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PASSWORD, NT_STATUS_WRONG_PASSWORD_CORE}, 6554bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_FLOAT_CONTEXT}, 656148c5f43SAlan Wright {ERRDOS, ERROR_BROKEN_PIPE, NT_STATUS_PIPE_BROKEN}, 6574bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_CORRUPT}, 6584bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_IO_FAILED}, 6594bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_EVENT_PAIR}, 6604bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_VOLUME}, 6614bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SERIAL_NO_DEVICE_INITED}, 6624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_ALIAS}, 6634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_ALIAS}, 6644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_ALIAS}, 6654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ALIAS_EXISTS}, 6664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGON_NOT_GRANTED}, 6674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SECRETS}, 6684bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SECRET_TOO_LONG}, 6694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_ERROR}, 6704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FULLSCREEN_MODE}, 6714bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_CONTEXT_IDS}, 6724bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_LOGON_TYPE_NOT_GRANTED}, 6734bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_REGISTRY_FILE}, 6744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NT_CROSS_ENCRYPTION_REQUIRED}, 6754bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CTRLR_CONFIG_ERROR}, 6764bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FT_MISSING_MEMBER}, 6774bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_SERVICE_ENTRY}, 6784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_CHARACTER}, 6794bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNMAPPABLE_CHARACTER}, 6804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNDEFINED_CHARACTER}, 6814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_VOLUME}, 6824bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_ID_MARK_NOT_FOUND}, 6834bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_WRONG_CYLINDER}, 6844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_UNKNOWN_ERROR}, 6854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_BAD_REGISTERS}, 6864bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_RECALIBRATE_FAILED}, 6874bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_OPERATION_FAILED}, 6884bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DISK_RESET_FAILED}, 6894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SHARED_IRQ_BUSY}, 6904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FT_ORPHANING}, 69102d09e03SGordon Ross {ERRHRD, ERRgeneral, 69202d09e03SGordon Ross NT_STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT}, 6934bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PARTITION_FAILURE}, 6944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_BLOCK_LENGTH}, 6954bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_PARTITIONED}, 6964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_LOCK_MEDIA}, 6974bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_UNLOAD_MEDIA}, 6984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EOM_OVERFLOW}, 6994bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_MEDIA}, 7004bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_MEMBER}, 7014bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_MEMBER}, 7024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_KEY_DELETED}, 7034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_LOG_SPACE}, 7044bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SIDS}, 7054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LM_CROSS_ENCRYPTION_REQUIRED}, 7064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_KEY_HAS_CHILDREN}, 7074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CHILD_MUST_BE_VOLATILE}, 708148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_DEVICE_CONFIGURATION_ERROR}, 7094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DRIVER_INTERNAL_ERROR}, 710148c5f43SAlan Wright {ERRDOS, ERROR_BAD_COMMAND, NT_STATUS_INVALID_DEVICE_STATE}, 7114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR}, 7124bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_PROTOCOL_ERROR}, 7134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BACKUP_CONTROLLER}, 7144bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOG_FILE_FULL}, 715148c5f43SAlan Wright {ERRDOS, ERROR_WRITE_PROTECT, NT_STATUS_TOO_LATE}, 7164bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_LSA_SECRET}, 7174bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_SAM_ACCOUNT}, 7184bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_DOMAIN_FAILURE}, 7194bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE}, 7204bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CORRUPT}, 7214bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_CANT_START}, 7224bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_TRUST_FAILURE}, 7234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MUTANT_LIMIT_EXCEEDED}, 724148c5f43SAlan Wright {ERRDOS, NERR_NetlogonNotStarted, NT_STATUS_NETLOGON_NOT_STARTED}, 725148c5f43SAlan Wright {ERRSRV, NERR_AccountExpired, NT_STATUS_ACCOUNT_EXPIRED}, 7264bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_POSSIBLE_DEADLOCK}, 7274bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NETWORK_CREDENTIAL_CONFLICT}, 7284bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REMOTE_SESSION_LIMIT}, 7294bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CHANGED}, 7304bff34e3Sthurlow {ERRDOS, ERRnoaccess, 73102d09e03SGordon Ross NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT}, 7324bff34e3Sthurlow {ERRDOS, ERRnoaccess, 7334bff34e3Sthurlow NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT}, 7344bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT}, 7354bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_DOMAIN_TRUST_INCONSISTENT}, 7364bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FS_DRIVER_REQUIRED}, 7374bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_USER_SESSION_KEY}, 738148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_USER_SESSION_DELETED}, 7394bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_LANG_NOT_FOUND}, 7404bff34e3Sthurlow {ERRDOS, ERRnomem, NT_STATUS_INSUFF_SERVER_RESOURCES}, 7414bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_BUFFER_SIZE}, 7424bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_COMPONENT}, 7434bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_WILDCARD}, 744148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_ADDRESSES}, 745148c5f43SAlan Wright {ERRDOS, ERROR_DUP_NAME, NT_STATUS_ADDRESS_ALREADY_EXISTS}, 746148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_ADDRESS_CLOSED}, 747148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_CONNECTION_DISCONNECTED}, 748148c5f43SAlan Wright {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_CONNECTION_RESET}, 749148c5f43SAlan Wright {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_NODES}, 750148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_ABORTED}, 751148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_TIMED_OUT}, 752148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_NO_RELEASE}, 753148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_NO_MATCH}, 754148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_RESPONDED}, 755148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_INVALID_ID}, 756148c5f43SAlan Wright {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_INVALID_TYPE}, 757148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_SERVER_SESSION}, 758148c5f43SAlan Wright {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_CLIENT_SESSION}, 7594bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CANNOT_LOAD_REGISTRY_FILE}, 7604bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DEBUG_ATTACH_FAILED}, 7614bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_SYSTEM_PROCESS_TERMINATED}, 7624bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DATA_NOT_ACCEPTED}, 7634bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_BROWSER_SERVERS_FOUND}, 7644bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_VDM_HARD_ERROR}, 7654bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DRIVER_CANCEL_TIMEOUT}, 7664bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REPLY_MESSAGE_MISMATCH}, 7674bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MAPPED_ALIGNMENT}, 768148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_IMAGE_CHECKSUM_MISMATCH}, 7694bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOST_WRITEBEHIND_DATA}, 7704bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CLIENT_SERVER_PARAMETERS_INVALID}, 771148c5f43SAlan Wright {ERRSRV, NERR_PasswordExpired, NT_STATUS_PASSWORD_MUST_CHANGE}, 7724bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_FOUND}, 7734bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NOT_TINY_STREAM}, 7744bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RECOVERY_FAILURE}, 7754bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW_READ}, 7764bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FAIL_CHECK}, 7774bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DUPLICATE_OBJECTID}, 7784bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_OBJECTID_EXISTS}, 7794bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONVERT_TO_LARGE}, 7804bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RETRY}, 7814bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FOUND_OUT_OF_SCOPE}, 7824bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ALLOCATE_BUCKET}, 7834bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROPSET_NOT_FOUND}, 7844bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_MARSHALL_OVERFLOW}, 7854bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_VARIANT}, 7864bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND}, 7874bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ACCOUNT_LOCKED_OUT}, 7884bff34e3Sthurlow {ERRDOS, ERRbadfid, NT_STATUS_HANDLE_NOT_CLOSABLE}, 7894bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_REFUSED}, 7904bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_GRACEFUL_DISCONNECT}, 7914bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_ALREADY_ASSOCIATED}, 7924bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_NOT_ASSOCIATED}, 7934bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_INVALID}, 7944bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ACTIVE}, 7954bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NETWORK_UNREACHABLE}, 7964bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_HOST_UNREACHABLE}, 7974bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PROTOCOL_UNREACHABLE}, 7984bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PORT_UNREACHABLE}, 7994bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REQUEST_ABORTED}, 8004bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ABORTED}, 8014bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_COMPRESSION_BUFFER}, 8024bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_USER_MAPPED_FILE}, 8034bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_AUDIT_FAILED}, 8044bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TIMER_RESOLUTION_NOT_SET}, 8054bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_COUNT_LIMIT}, 8064bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGIN_TIME_RESTRICTION}, 8074bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LOGIN_WKSTA_RESTRICTION}, 808148c5f43SAlan Wright {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_IMAGE_MP_UP_MISMATCH}, 8094bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INSUFFICIENT_LOGON_INFO}, 8104bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_DLL_ENTRYPOINT}, 8114bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_BAD_SERVICE_ENTRYPOINT}, 8124bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LPC_REPLY_LOST}, 8134bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT1}, 8144bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT2}, 8154bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_QUOTA_LIMIT}, 8164bff34e3Sthurlow {ERRSRV, ERRbadtype, NT_STATUS_PATH_NOT_COVERED}, 8174bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_NO_CALLBACK_ACTIVE}, 8184bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_LICENSE_QUOTA_EXCEEDED}, 8194bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_SHORT}, 8204bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_RECENT}, 8214bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PWD_HISTORY_CONFLICT}, 8224bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_PLUGPLAY_NO_DEVICE}, 8234bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_UNSUPPORTED_COMPRESSION}, 8244bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_HW_PROFILE}, 8254bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PLUGPLAY_DEVICE_PATH}, 826148c5f43SAlan Wright {ERRDOS, ERROR_INVALID_ORDINAL, NT_STATUS_DRIVER_ORDINAL_NOT_FOUND}, 827148c5f43SAlan Wright {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND}, 828148c5f43SAlan Wright {ERRDOS, ERROR_NOT_OWNER, NT_STATUS_RESOURCE_NOT_OWNED}, 8294bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LINKS}, 8304bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_QUOTA_LIST_INCONSISTENT}, 8314bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_FILE_IS_OFFLINE}, 832148c5f43SAlan Wright {ERRDOS, ERROR_NOT_READY, NT_STATUS_VOLUME_DISMOUNTED}, 833148c5f43SAlan Wright {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_DIRECTORY_IS_A_REPARSE_POINT}, 8344bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_ENCRYPTION_FAILED}, 8354bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_DECRYPTION_FAILED}, 8364bff34e3Sthurlow {ERRHRD, ERRgeneral, NT_STATUS_RANGE_NOT_FOUND}, 8374bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_RECOVERY_POLICY}, 8384bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_EFS}, 8394bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_WRONG_EFS}, 8404bff34e3Sthurlow {ERRDOS, ERRnoaccess, NT_STATUS_NO_USER_KEYS}, 8414bff34e3Sthurlow {ERRDOS, ERRbadfunc, NT_STATUS_VOLUME_NOT_UPGRADED}, 842148c5f43SAlan Wright {0, 0, 0} 8434bff34e3Sthurlow }; 8444bff34e3Sthurlow 845148c5f43SAlan Wright int 846148c5f43SAlan Wright smb_maperr32(uint32_t nterr) 8474bff34e3Sthurlow { 848148c5f43SAlan Wright const nt2errno_t *nt2e; 849148c5f43SAlan Wright const nt2doserr_t *nt2d; 8504bff34e3Sthurlow 851148c5f43SAlan Wright switch (NT_SC_SEVERITY(nterr)) { 852148c5f43SAlan Wright case NT_STATUS_SEVERITY_SUCCESS: 853148c5f43SAlan Wright case NT_STATUS_SEVERITY_INFORMATIONAL: 8544bff34e3Sthurlow return (0); 855148c5f43SAlan Wright } 8564bff34e3Sthurlow 8574bff34e3Sthurlow /* first try direct map to unix */ 858148c5f43SAlan Wright for (nt2e = nt2errno; nt2e->errno; nt2e++) 859148c5f43SAlan Wright if (nt2e->nterr == nterr) 860148c5f43SAlan Wright return (nt2e->errno); 861*ae3d7f90SGordon Ross smb_errmsg(unknown_err_logpri, "smb_maperr32", 862*ae3d7f90SGordon Ross "No direct map for 32 bit server error (0x%x)\n", nterr); 8634bff34e3Sthurlow 8644bff34e3Sthurlow /* ok, then try mapping to dos to unix */ 865148c5f43SAlan Wright for (nt2d = nt2doserr; nt2d->nterr; nt2d++) 866148c5f43SAlan Wright if (nt2d->nterr == nterr) 867148c5f43SAlan Wright return (smb_maperror(nt2d->dclass, nt2d->derr)); 868148c5f43SAlan Wright return (EIO); 8694bff34e3Sthurlow } 8704bff34e3Sthurlow 8714bff34e3Sthurlow 8724bff34e3Sthurlow int 8734bff34e3Sthurlow smb_maperror(int eclass, int eno) 8744bff34e3Sthurlow { 8754bff34e3Sthurlow if (eclass == 0 && eno == 0) 8764bff34e3Sthurlow return (0); 8774bff34e3Sthurlow switch (eclass) { 8784bff34e3Sthurlow case ERRDOS: 8794bff34e3Sthurlow switch (eno) { 880148c5f43SAlan Wright case ERROR_INVALID_LEVEL: 88102d09e03SGordon Ross return (ENOTSUP); 8824bff34e3Sthurlow case ERRbadfunc: 8834bff34e3Sthurlow case ERRbadenv: 8844bff34e3Sthurlow case ERRbadformat: 8854bff34e3Sthurlow case ERRremcd: 8864bff34e3Sthurlow case ERRrmuns: 8874bff34e3Sthurlow return (EINVAL); 8884bff34e3Sthurlow case ERRbadfile: 8894bff34e3Sthurlow case ERRbadpath: 890148c5f43SAlan Wright case ERROR_BAD_DEV_TYPE: 891148c5f43SAlan Wright case ERROR_BAD_NET_NAME: 8924bff34e3Sthurlow return (ENOENT); 8934bff34e3Sthurlow case ERRnofids: 8944bff34e3Sthurlow return (EMFILE); 8954bff34e3Sthurlow case ERRnoaccess: 8964bff34e3Sthurlow /* 8974bff34e3Sthurlow * XXX CSM Reported on samba-technical 12/7/2002 8984bff34e3Sthurlow * 8994bff34e3Sthurlow * There is a case for which server(s) return 9004bff34e3Sthurlow * ERRnoaccess but should return ERRdiskfull: When 9014bff34e3Sthurlow * the offset for a write is exactly the server 9024bff34e3Sthurlow * file size limit then Samba (at least) thinks 9034bff34e3Sthurlow * the reason for zero bytes having been written 9044bff34e3Sthurlow * must have been "access denied" from the local 9054bff34e3Sthurlow * filesystem. This cannot be easily worked 9064bff34e3Sthurlow * around since the server behaviour is 9074bff34e3Sthurlow * indistinguishable from actual access denied. 9084bff34e3Sthurlow * An incomplete workaround: attempt a 2 byte write 9094bff34e3Sthurlow * from "offset-1". (That may require reading at 9104bff34e3Sthurlow * offset-1 first.) The flaw is that reading or 9114bff34e3Sthurlow * writing at offset-1 could cause an 9124bff34e3Sthurlow * unrelated error (due to a byte range lock 9134bff34e3Sthurlow * for instance) and we can't presume the 9144bff34e3Sthurlow * order servers check errors in. 9154bff34e3Sthurlow */ 9164bff34e3Sthurlow case ERRbadaccess: 9174bff34e3Sthurlow return (EACCES); 9184bff34e3Sthurlow case ERRbadshare: 9194bff34e3Sthurlow return (EBUSY); 9204bff34e3Sthurlow case ERRbadfid: 9214bff34e3Sthurlow return (EBADF); 9224bff34e3Sthurlow case ERRbadmcb: 9234bff34e3Sthurlow return (EIO); 9244bff34e3Sthurlow case ERRnomem: 9254bff34e3Sthurlow return (ENOMEM); /* actually remote no mem... */ 9264bff34e3Sthurlow case ERRbadmem: 9274bff34e3Sthurlow return (EFAULT); 9284bff34e3Sthurlow case ERRbaddata: 9294bff34e3Sthurlow return (E2BIG); 9304bff34e3Sthurlow case ERRbaddrive: 9314bff34e3Sthurlow case ERRnotready: /* nt */ 9324bff34e3Sthurlow return (ENXIO); 9334bff34e3Sthurlow case ERRdiffdevice: 9344bff34e3Sthurlow return (EXDEV); 9354bff34e3Sthurlow case ERRnofiles: 9364bff34e3Sthurlow return (0); /* eeof ? */ 9374bff34e3Sthurlow case ERRlock: 93802d09e03SGordon Ross return (EAGAIN); 9394bff34e3Sthurlow case ERRfilexists: 9404bff34e3Sthurlow return (EEXIST); 941148c5f43SAlan Wright case ERROR_INVALID_NAME: 9424bff34e3Sthurlow return (ENOENT); 943148c5f43SAlan Wright case ERROR_DIR_NOT_EMPTY: 9444bff34e3Sthurlow return (ENOTEMPTY); 945148c5f43SAlan Wright case ERROR_NOT_LOCKED: 946148c5f43SAlan Wright return (0); /* we unlock on any close */ 947148c5f43SAlan Wright case ERROR_ALREADY_EXISTS: 9484bff34e3Sthurlow return (EEXIST); 9494bff34e3Sthurlow case ERRmoredata: 9504bff34e3Sthurlow return (EMOREDATA); 9514bff34e3Sthurlow } 9524bff34e3Sthurlow break; 9534bff34e3Sthurlow case ERRSRV: 9544bff34e3Sthurlow switch (eno) { 9554bff34e3Sthurlow case ERRerror: 9564bff34e3Sthurlow return (EINVAL); 9574bff34e3Sthurlow case ERRbadpw: 9584bff34e3Sthurlow return (EAUTH); 9594bff34e3Sthurlow case ERRaccess: 9604bff34e3Sthurlow case ERRbaduid: 9614bff34e3Sthurlow return (EACCES); 9624bff34e3Sthurlow case ERRinvnid: 9634bff34e3Sthurlow return (ENETRESET); 9644bff34e3Sthurlow case ERRinvnetname: 96502d09e03SGordon Ross return (ENXIO); 9664bff34e3Sthurlow case ERRbadtype: /* reserved and returned */ 9674bff34e3Sthurlow return (EIO); 968148c5f43SAlan Wright case NERR_AccountExpired: /* account exists but disabled */ 9694bff34e3Sthurlow return (EPERM); 9704bff34e3Sthurlow } 9714bff34e3Sthurlow break; 9724bff34e3Sthurlow case ERRHRD: 9734bff34e3Sthurlow switch (eno) { 9744bff34e3Sthurlow case ERRnowrite: 9754bff34e3Sthurlow return (EROFS); 9764bff34e3Sthurlow case ERRbadunit: 9774bff34e3Sthurlow return (ENODEV); 9784bff34e3Sthurlow case ERRbadreq: 9794bff34e3Sthurlow return (EBADRPC); 9804bff34e3Sthurlow case ERRbadshare: 9814bff34e3Sthurlow return (ETXTBSY); 9824bff34e3Sthurlow case ERRlock: 98302d09e03SGordon Ross return (EAGAIN); 9844bff34e3Sthurlow case ERRdiskfull: 9854bff34e3Sthurlow return (EFBIG); 9864bff34e3Sthurlow case ERRnotready: 9874bff34e3Sthurlow case ERRbadcmd: 9884bff34e3Sthurlow case ERRdata: 9894bff34e3Sthurlow case ERRgeneral: 9904bff34e3Sthurlow return (EIO); 9914bff34e3Sthurlow } 9924bff34e3Sthurlow } 993*ae3d7f90SGordon Ross 994*ae3d7f90SGordon Ross smb_errmsg(unknown_err_logpri, "smb_maperror", 995*ae3d7f90SGordon Ross "Unknown DOS error %d/%d\n", eclass, eno); 996*ae3d7f90SGordon Ross return (EIO); 9974bff34e3Sthurlow } 9984bff34e3Sthurlow 9994bff34e3Sthurlow #if defined(NOICONVSUPPORT) || defined(lint) 10004bff34e3Sthurlow extern int iconv_conv(void *handle, const char **inbuf, 10014bff34e3Sthurlow size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 10024bff34e3Sthurlow #endif 10034bff34e3Sthurlow 10044bff34e3Sthurlow #define SMALL_CONV 256 10054bff34e3Sthurlow 10064bff34e3Sthurlow /*ARGSUSED*/ 10074bff34e3Sthurlow int 10084bff34e3Sthurlow smb_put_dmem(struct mbchain *mbp, struct smb_vc *vcp, const char *src, 10094bff34e3Sthurlow int size, int caseopt, int *lenp) 10104bff34e3Sthurlow { 10114bff34e3Sthurlow uint16_t convbuf[SMALL_CONV]; 10124bff34e3Sthurlow uint16_t *cbuf; 10134bff34e3Sthurlow size_t cbufalloc, inlen, outlen; 10144bff34e3Sthurlow int error; 10154bff34e3Sthurlow 10164bff34e3Sthurlow if (size <= 0) 10174bff34e3Sthurlow return (0); 10184bff34e3Sthurlow 10194bff34e3Sthurlow /* 10204bff34e3Sthurlow * Handle the easy case (non-unicode). 10214bff34e3Sthurlow * XXX: Technically, we should convert 10224bff34e3Sthurlow * the string to OEM codeset first... 10234bff34e3Sthurlow * Modern servers all use Unicode, so 10244bff34e3Sthurlow * this is good enough. 10254bff34e3Sthurlow */ 10264bff34e3Sthurlow if (SMB_UNICODE_STRINGS(vcp) == 0) { 10274bff34e3Sthurlow error = mb_put_mem(mbp, src, size, MB_MSYSTEM); 10284bff34e3Sthurlow if (!error && lenp) 10294bff34e3Sthurlow *lenp += size; 10304bff34e3Sthurlow return (error); 10314bff34e3Sthurlow } 10324bff34e3Sthurlow 10334bff34e3Sthurlow /* 10344bff34e3Sthurlow * Convert to UCS-2 (really UTF-16). 10354bff34e3Sthurlow * Use stack buffer if the string is 10364bff34e3Sthurlow * small enough, else allocate. 10374bff34e3Sthurlow */ 10384bff34e3Sthurlow if (size <= SMALL_CONV) { 10394bff34e3Sthurlow cbufalloc = 0; 10404bff34e3Sthurlow outlen = SMALL_CONV; 10414bff34e3Sthurlow cbuf = convbuf; 10424bff34e3Sthurlow } else { 10434bff34e3Sthurlow outlen = size; /* in utf-16 characters */ 10444bff34e3Sthurlow cbufalloc = outlen * 2; 10454bff34e3Sthurlow cbuf = kmem_alloc(cbufalloc, KM_SLEEP); 10464bff34e3Sthurlow } 10474bff34e3Sthurlow 10484bff34e3Sthurlow inlen = size; 10494bff34e3Sthurlow error = uconv_u8tou16((uchar_t *)src, &inlen, cbuf, &outlen, 10504bff34e3Sthurlow UCONV_OUT_LITTLE_ENDIAN | UCONV_IGNORE_NULL); 10514bff34e3Sthurlow outlen *= 2; /* convert to bytes */ 10524bff34e3Sthurlow 10534bff34e3Sthurlow if (!error) { 10544bff34e3Sthurlow (void) mb_put_padbyte(mbp); /* align */ 10554bff34e3Sthurlow error = mb_put_mem(mbp, (char *)cbuf, outlen, MB_MSYSTEM); 10564bff34e3Sthurlow } 10574bff34e3Sthurlow if (!error && lenp) 10584bff34e3Sthurlow *lenp += outlen; 10594bff34e3Sthurlow 10604bff34e3Sthurlow if (cbufalloc) 10614bff34e3Sthurlow kmem_free(cbuf, cbufalloc); 10624bff34e3Sthurlow 10634bff34e3Sthurlow return (error); 10644bff34e3Sthurlow } 10654bff34e3Sthurlow 10664bff34e3Sthurlow int 10674bff34e3Sthurlow smb_put_dstring(struct mbchain *mbp, struct smb_vc *vcp, const char *src, 10684bff34e3Sthurlow int caseopt) 10694bff34e3Sthurlow { 10704bff34e3Sthurlow int error, len; 10714bff34e3Sthurlow 10724bff34e3Sthurlow /* 10734bff34e3Sthurlow * Let smb_put_dmem put both the string 10744bff34e3Sthurlow * and the terminating null. 10754bff34e3Sthurlow */ 10764bff34e3Sthurlow len = strlen(src) + 1; 10774bff34e3Sthurlow error = smb_put_dmem(mbp, vcp, src, len, caseopt, NULL); 10784bff34e3Sthurlow if (error) 10794bff34e3Sthurlow return (error); 10804bff34e3Sthurlow 10814bff34e3Sthurlow return (error); 10824bff34e3Sthurlow } 1083