Print this page
NEX-14666 Need to provide SMB 2.1 Client
NEX-17187 panic in smbfs_acl_store
NEX-17231 smbfs create xattr files finds wrong file
NEX-17224 smbfs lookup EINVAL should be ENOENT
NEX-17260 SMB1 client fails to list directory after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
Reviewed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
and: (cleanup)
NEX-16824 SMB client connection setup rework
NEX-17232 SMB client reconnect failures
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (improve debug)
NEX-16818 Add fksmbcl development tool
NEX-17264 SMB client test tp_smbutil_013 fails after NEX-14666
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
and: (fix ref leaks)
NEX-6309 Update NT status codes
Update ntstatus.h from [MS-ERREF] October 2015
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/fs/smbclnt/netsmb/smb_subrs.c
+++ new/usr/src/uts/common/fs/smbclnt/netsmb/smb_subrs.c
1 1 /*
2 2 * Copyright (c) 2000-2001 Boris Popov
3 3 * All rights reserved.
4 4 *
5 5 * Redistribution and use in source and binary forms, with or without
6 6 * modification, are permitted provided that the following conditions
7 7 * are met:
8 8 * 1. Redistributions of source code must retain the above copyright
9 9 * notice, this list of conditions and the following disclaimer.
10 10 * 2. Redistributions in binary form must reproduce the above copyright
11 11 * notice, this list of conditions and the following disclaimer in the
12 12 * documentation and/or other materials provided with the distribution.
13 13 * 3. All advertising materials mentioning features or use of this software
14 14 * must display the following acknowledgement:
15 15 * This product includes software developed by Boris Popov.
16 16 * 4. Neither the name of the author nor the names of any co-contributors
17 17 * may be used to endorse or promote products derived from this software
18 18 * without specific prior written permission.
19 19 *
20 20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21 21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24 24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
↓ open down ↓ |
26 lines elided |
↑ open up ↑ |
27 27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 30 * SUCH DAMAGE.
31 31 *
32 32 * $Id: smb_subr.c,v 1.27.108.1 2005/06/02 00:55:39 lindak Exp $
33 33 */
34 34
35 35 /*
36 36 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
37 + * Portions Copyright (C) 2001 - 2013 Apple Inc. All rights reserved.
38 + * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
37 39 */
38 40
39 41 #include <sys/param.h>
40 42 #include <sys/systm.h>
41 43 #include <sys/kmem.h>
42 44 #include <sys/proc.h>
43 45 #include <sys/lock.h>
44 46 #include <sys/socket.h>
45 47 #include <sys/isa_defs.h>
46 48 #include <sys/stream.h>
47 49 #include <sys/strsun.h>
48 50 #include <sys/sunddi.h>
49 51 #include <sys/cmn_err.h>
|
↓ open down ↓ |
3 lines elided |
↑ open up ↑ |
50 52 #include <sys/sdt.h>
51 53 #include <sys/priv.h>
52 54 #include <sys/u8_textprep.h>
53 55
54 56 #include <netsmb/smb_osdep.h>
55 57 #include <netsmb/smb.h>
56 58 #include <netsmb/smb_conn.h>
57 59 #include <netsmb/smb_rq.h>
58 60 #include <netsmb/smb_subr.h>
59 61
60 -/*
61 - * XXX:This conversion might not be fully MS-Compatible
62 - * for calculating hashes. The output length may differ
63 - * for some locales and needs to be handled from where
64 - * the call is made.
65 - */
66 -int
67 -smb_toupper(const char *inbuf, char *outbuf, size_t outlen)
68 -{
69 - int err = 0;
70 - size_t inlen, inrem, outrem;
71 -
72 - inrem = inlen = strlen(inbuf);
73 - outrem = outlen;
74 - (void) u8_textprep_str((char *)inbuf, &inrem, outbuf, &outrem,
75 - U8_TEXTPREP_TOUPPER, U8_UNICODE_LATEST, &err);
76 - /* inrem, outrem are bytes unused, remaining */
77 - if (inrem) {
78 - SMBSDEBUG("input %d remains: %s\n", (int)inrem, inbuf);
79 - inlen -= inrem;
80 - }
81 - if (outrem) {
82 - outlen -= outrem;
83 - outbuf[outlen] = '\0';
84 - }
85 - if (outlen > inlen) {
86 - SMBSDEBUG("outlen > inlen! (%d > %d)\n",
87 - (int)outlen, (int)inlen);
88 - /* Truncate to inlen here? */
89 - }
90 -
91 - return (err);
92 -}
93 -
94 62 void
95 63 smb_credinit(struct smb_cred *scred, cred_t *cr)
96 64 {
97 65 /* cr arg is optional */
98 66 if (cr == NULL)
99 67 cr = ddi_get_cred();
68 +#ifdef _KERNEL
100 69 if (is_system_labeled()) {
101 70 cr = crdup(cr);
102 71 (void) setpflags(NET_MAC_AWARE, 1, cr);
103 - } else {
72 + } else
73 +#endif
74 + {
104 75 crhold(cr);
105 76 }
106 77 scred->scr_cred = cr;
107 78 }
108 79
109 80 void
110 81 smb_credrele(struct smb_cred *scred)
111 82 {
112 83 if (scred->scr_cred != NULL) {
113 84 crfree(scred->scr_cred);
114 85 scred->scr_cred = NULL;
115 86 }
116 87 }
117 88
89 +#ifndef _KERNEL
90 +/* ARGSUSED */
91 +void
92 +smb_debugmsg(const char *func, char *msg)
93 +{
94 +}
95 +#endif /* _KERNEL */
96 +
118 97 /*
119 98 * Helper for the SMBERROR macro, etc.
120 99 * This is also a good place for a breakpoint
121 100 * or a dtrace probe, i.e. fbt:nsmb:smb_errmsg
122 101 */
123 102 void
124 103 smb_errmsg(int cel, const char *func_name, const char *fmt, ...)
125 104 {
126 105 va_list adx;
127 106 char buf[100];
128 107
129 108 va_start(adx, fmt);
|
↓ open down ↓ |
2 lines elided |
↑ open up ↑ |
130 109 if (cel == CE_CONT) {
131 110 /*
132 111 * This is one of our xxxDEBUG macros.
133 112 * Don't bother to log these, but just
134 113 * fire a dtrace probe with the message.
135 114 */
136 115 (void) vsnprintf(buf, sizeof (buf), fmt, adx);
137 116 DTRACE_PROBE2(debugmsg2,
138 117 (char *), func_name,
139 118 (char *), buf);
119 +#ifndef _KERNEL
120 + smb_debugmsg(func_name, buf);
121 +#endif
140 122 } else {
141 123 /*
142 124 * This is one of our xxxERROR macros.
143 125 * Add a prefix to the fmt string,
144 126 * then let vcmn_err do the args.
145 127 */
146 128 (void) snprintf(buf, sizeof (buf), "?%s: %s", func_name, fmt);
147 129 DTRACE_PROBE3(debugmsg3,
148 130 (char *), func_name,
149 131 (char *), buf,
150 132 va_list, adx);
151 133 vcmn_err(cel, buf, adx);
152 134 }
153 135 va_end(adx);
154 136 }
155 137
156 138 #if 1 /* def SMB_SOCKETDATA_DEBUG */
157 139 void
158 140 m_dumpm(mblk_t *m)
159 141 {
160 142 int len, seg;
161 143
162 144 len = msgdsize(m);
163 145 DTRACE_PROBE2(dsize, int, len, (mblk_t *), m);
164 146
165 147 for (seg = 0; m; seg++) {
166 148 DTRACE_PROBE2(mblk, int, seg, (mblk_t *), m);
167 149 m = m->b_cont;
168 150 }
169 151 }
170 152 #endif
171 153
172 154 #ifndef EPROTO
173 155 #define EPROTO ECONNABORTED
174 156 #endif
175 157 #ifndef ELIBACC
176 158 #define ELIBACC ENOENT
177 159 #endif
178 160 #ifndef ENODATA
179 161 #define ENODATA EINVAL
180 162 #endif
181 163 #ifndef ENOTUNIQ
182 164 #define ENOTUNIQ EADDRINUSE
|
↓ open down ↓ |
33 lines elided |
↑ open up ↑ |
183 165 #endif
184 166 #ifndef ECOMM
185 167 #define ECOMM EIO
186 168 #endif
187 169 #ifndef ENOMEDIUM
188 170 #define ENOMEDIUM ENXIO
189 171 #endif
190 172 #ifndef ETIME
191 173 #define ETIME ETIMEDOUT
192 174 #endif
175 +#ifndef EMOREDATA
176 +#define EMOREDATA (0x7fff)
177 +#endif
193 178
194 179 /*
195 180 * Log any un-handled NT or DOS errors we encounter.
196 181 * Make these log NOTICE in a debug build to ensure
197 182 * they get noticed during tests. In the field these
198 183 * are unimportant, so just fire a Dtrace probe.
199 184 */
200 185 static int unknown_err_logpri =
201 186 #ifdef DEBUG
202 187 CE_NOTE;
203 188 #else
204 189 CE_CONT;
205 190 #endif
206 191
207 192 typedef struct nt2errno {
208 193 unsigned int nterr;
209 194 int errno;
210 195 } nt2errno_t;
211 196
|
↓ open down ↓ |
9 lines elided |
↑ open up ↑ |
212 197 static const nt2errno_t nt2errno[] = {
213 198 /* Alphabetical order. */
214 199 {NT_STATUS_ACCESS_DENIED, EACCES},
215 200 {NT_STATUS_ACCESS_VIOLATION, EACCES},
216 201 {NT_STATUS_ACCOUNT_DISABLED, EACCES},
217 202 {NT_STATUS_ACCOUNT_EXPIRED, EACCES},
218 203 {NT_STATUS_ACCOUNT_LOCKED_OUT, EACCES},
219 204 {NT_STATUS_ACCOUNT_RESTRICTION, EACCES},
220 205 {NT_STATUS_ADDRESS_ALREADY_EXISTS, EADDRINUSE},
221 206 {NT_STATUS_BAD_NETWORK_NAME, ENOENT},
222 - {NT_STATUS_BUFFER_TOO_SMALL, EMOREDATA},
207 + {NT_STATUS_BAD_NETWORK_PATH, ENOENT},
208 + {NT_STATUS_BUFFER_TOO_SMALL, E2BIG},
209 + {NT_STATUS_CANCELLED, ECANCELED},
223 210 {NT_STATUS_CANNOT_DELETE, EACCES},
224 211 {NT_STATUS_CONFLICTING_ADDRESSES, EADDRINUSE},
225 212 {NT_STATUS_CONNECTION_ABORTED, ECONNABORTED},
226 213 {NT_STATUS_CONNECTION_DISCONNECTED, ECONNABORTED},
227 214 {NT_STATUS_CONNECTION_REFUSED, ECONNREFUSED},
228 215 {NT_STATUS_CONNECTION_RESET, ENETRESET},
229 216 {NT_STATUS_DELETE_PENDING, EACCES},
230 217 {NT_STATUS_DEVICE_DOES_NOT_EXIST, ENODEV},
231 218 {NT_STATUS_DEVICE_PROTOCOL_ERROR, EPROTO},
232 219 {NT_STATUS_DIRECTORY_NOT_EMPTY, ENOTEMPTY},
233 220 {NT_STATUS_DISK_FULL, ENOSPC},
234 221 {NT_STATUS_DLL_NOT_FOUND, ELIBACC},
235 222 {NT_STATUS_DUPLICATE_NAME, EINVAL},
223 + {NT_STATUS_EAS_NOT_SUPPORTED, ENOTSUP},
224 + {NT_STATUS_EA_TOO_LARGE, E2BIG},
236 225 {NT_STATUS_END_OF_FILE, ENODATA},
226 + {NT_STATUS_FILE_CLOSED, EBADF},
227 + {NT_STATUS_FILE_DELETED, ENOENT},
228 + {NT_STATUS_FILE_INVALID, EIO},
237 229 {NT_STATUS_FILE_IS_A_DIRECTORY, EISDIR},
238 230 {NT_STATUS_FILE_LOCK_CONFLICT, EAGAIN},
231 + {NT_STATUS_FILE_RENAMED, ENOENT},
239 232 {NT_STATUS_FLOAT_INEXACT_RESULT, ERANGE},
240 233 {NT_STATUS_FLOAT_OVERFLOW, ERANGE},
241 234 {NT_STATUS_FLOAT_UNDERFLOW, ERANGE},
242 235 {NT_STATUS_HOST_UNREACHABLE, EHOSTUNREACH},
243 - {NT_STATUS_ILL_FORMED_PASSWORD, EACCES},
236 + {NT_STATUS_ILL_FORMED_PASSWORD, EAUTH},
237 + {NT_STATUS_INFO_LENGTH_MISMATCH, EINVAL},
238 + {NT_STATUS_INSUFFICIENT_RESOURCES, EAGAIN},
239 + {NT_STATUS_INSUFF_SERVER_RESOURCES, EAGAIN},
244 240 {NT_STATUS_INTEGER_OVERFLOW, ERANGE},
245 - {NT_STATUS_INVALID_ACCOUNT_NAME, EACCES},
241 + {NT_STATUS_INVALID_ACCOUNT_NAME, EAUTH},
242 + {NT_STATUS_INVALID_BUFFER_SIZE, EIO},
243 + {NT_STATUS_INVALID_DEVICE_REQUEST, EINVAL},
246 244 {NT_STATUS_INVALID_HANDLE, EBADF},
245 + {NT_STATUS_INVALID_INFO_CLASS, EINVAL},
247 246 {NT_STATUS_INVALID_LEVEL, ENOTSUP},
248 - {NT_STATUS_INVALID_LOGON_HOURS, EACCES},
247 + {NT_STATUS_INVALID_LOCK_SEQUENCE, EINVAL},
248 + {NT_STATUS_INVALID_LOGON_HOURS, EAUTH},
249 249 {NT_STATUS_INVALID_OWNER, EINVAL},
250 250 {NT_STATUS_INVALID_PARAMETER, EINVAL},
251 251 {NT_STATUS_INVALID_PIPE_STATE, EPIPE},
252 252 {NT_STATUS_INVALID_PRIMARY_GROUP, EINVAL},
253 253 {NT_STATUS_INVALID_WORKSTATION, EACCES},
254 254 {NT_STATUS_IN_PAGE_ERROR, EFAULT},
255 + {NT_STATUS_IO_DEVICE_ERROR, EIO},
255 256 {NT_STATUS_IO_TIMEOUT, ETIMEDOUT},
256 - {NT_STATUS_IP_ADDRESS_CONFLICT1, ENOTUNIQ},
257 - {NT_STATUS_IP_ADDRESS_CONFLICT2, ENOTUNIQ},
257 + {NT_STATUS_IP_ADDRESS_CONFLICT1, EADDRINUSE},
258 + {NT_STATUS_IP_ADDRESS_CONFLICT2, EADDRINUSE},
258 259 {NT_STATUS_LICENSE_QUOTA_EXCEEDED, EDQUOT},
259 260 {NT_STATUS_LOCK_NOT_GRANTED, EAGAIN},
260 - {NT_STATUS_LOGIN_TIME_RESTRICTION, EACCES},
261 - {NT_STATUS_LOGON_FAILURE, EACCES},
261 + {NT_STATUS_LOGIN_TIME_RESTRICTION, EAUTH},
262 + {NT_STATUS_LOGON_FAILURE, EAUTH},
263 + {NT_STATUS_LOGON_TYPE_NOT_GRANTED, EAUTH},
262 264 {NT_STATUS_MEDIA_WRITE_PROTECTED, EROFS},
263 265 {NT_STATUS_MEMORY_NOT_ALLOCATED, EFAULT},
266 + {NT_STATUS_MORE_PROCESSING_REQUIRED, EINPROGRESS},
264 267 {NT_STATUS_NAME_TOO_LONG, ENAMETOOLONG},
265 268 {NT_STATUS_NETWORK_ACCESS_DENIED, EACCES},
266 269 {NT_STATUS_NETWORK_BUSY, EBUSY},
270 + {NT_STATUS_NETWORK_NAME_DELETED, ENOENT},
267 271 {NT_STATUS_NETWORK_UNREACHABLE, ENETUNREACH},
268 272 {NT_STATUS_NET_WRITE_FAULT, ECOMM},
273 + {NT_STATUS_NONEXISTENT_EA_ENTRY, ENOENT},
269 274 {NT_STATUS_NONEXISTENT_SECTOR, ESPIPE},
270 275 {NT_STATUS_NONE_MAPPED, EINVAL},
271 276 {NT_STATUS_NOT_A_DIRECTORY, ENOTDIR},
277 + {NT_STATUS_NOT_FOUND, ENOENT},
272 278 {NT_STATUS_NOT_IMPLEMENTED, ENOTSUP},
279 + {NT_STATUS_NOT_LOCKED, ENOLCK},
273 280 {NT_STATUS_NOT_MAPPED_VIEW, EINVAL},
274 281 {NT_STATUS_NOT_SUPPORTED, ENOTSUP},
282 + {NT_STATUS_NO_EAS_ON_FILE, ENOENT},
283 + {NT_STATUS_NO_LOGON_SERVERS, EAUTH},
275 284 {NT_STATUS_NO_MEDIA, ENOMEDIUM},
276 285 {NT_STATUS_NO_MEDIA_IN_DEVICE, ENOMEDIUM},
277 286 {NT_STATUS_NO_MEMORY, ENOMEM},
278 287 {NT_STATUS_NO_SUCH_DEVICE, ENODEV},
279 288 {NT_STATUS_NO_SUCH_FILE, ENOENT},
289 + {NT_STATUS_NO_SUCH_LOGON_SESSION, EAUTH},
290 + {NT_STATUS_NO_SUCH_USER, EAUTH},
291 + {NT_STATUS_NO_TRUST_LSA_SECRET, EAUTH},
292 + {NT_STATUS_NO_TRUST_SAM_ACCOUNT, EAUTH},
280 293 {NT_STATUS_OBJECT_NAME_COLLISION, EEXIST},
281 294 {NT_STATUS_OBJECT_NAME_INVALID, EINVAL},
282 295 {NT_STATUS_OBJECT_NAME_NOT_FOUND, ENOENT},
283 296 {NT_STATUS_OBJECT_PATH_INVALID, ENOTDIR},
284 297 {NT_STATUS_OBJECT_PATH_NOT_FOUND, ENOENT},
298 + {NT_STATUS_OBJECT_PATH_SYNTAX_BAD, EINVAL},
299 + {NT_STATUS_OBJECT_TYPE_MISMATCH, EBADF},
285 300 {NT_STATUS_PAGEFILE_QUOTA, EDQUOT},
286 - {NT_STATUS_PASSWORD_EXPIRED, EACCES},
287 - {NT_STATUS_PASSWORD_MUST_CHANGE, EACCES},
288 - {NT_STATUS_PASSWORD_RESTRICTION, EACCES},
301 + {NT_STATUS_PASSWORD_EXPIRED, EAUTH},
302 + {NT_STATUS_PASSWORD_MUST_CHANGE, EAUTH},
303 + {NT_STATUS_PASSWORD_RESTRICTION, EAUTH},
289 304 {NT_STATUS_PATH_NOT_COVERED, ENOENT},
290 305 {NT_STATUS_PIPE_BROKEN, EPIPE},
291 306 {NT_STATUS_PIPE_BUSY, EPIPE},
292 307 {NT_STATUS_PIPE_CONNECTED, EISCONN},
293 308 {NT_STATUS_PIPE_DISCONNECTED, EPIPE},
294 309 {NT_STATUS_PIPE_NOT_AVAILABLE, EBUSY},
295 310 {NT_STATUS_PORT_CONNECTION_REFUSED, ECONNREFUSED},
311 + {NT_STATUS_PORT_DISCONNECTED, EBADF},
296 312 {NT_STATUS_PORT_MESSAGE_TOO_LONG, EMSGSIZE},
297 313 {NT_STATUS_PORT_UNREACHABLE, EHOSTUNREACH},
298 314 {NT_STATUS_PROTOCOL_UNREACHABLE, ENOPROTOOPT},
299 315 {NT_STATUS_QUOTA_EXCEEDED, EDQUOT},
300 - {NT_STATUS_RANGE_NOT_LOCKED, EIO},
316 + {NT_STATUS_RANGE_NOT_LOCKED, EAGAIN}, /* like F_SETLK */
301 317 {NT_STATUS_REGISTRY_QUOTA_LIMIT, EDQUOT},
302 318 {NT_STATUS_REMOTE_DISCONNECT, ESHUTDOWN},
303 319 {NT_STATUS_REMOTE_NOT_LISTENING, ECONNREFUSED},
304 320 {NT_STATUS_REQUEST_NOT_ACCEPTED, EACCES},
305 321 {NT_STATUS_RETRY, EAGAIN},
306 322 {NT_STATUS_SHARING_VIOLATION, EBUSY},
307 323 {NT_STATUS_TIMER_NOT_CANCELED, ETIME},
308 324 {NT_STATUS_TOO_MANY_LINKS, EMLINK},
309 325 {NT_STATUS_TOO_MANY_OPENED_FILES, EMFILE},
326 + {NT_STATUS_TRUSTED_DOMAIN_FAILURE, EAUTH},
327 + {NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE, EAUTH},
310 328 {NT_STATUS_UNABLE_TO_FREE_VM, EADDRINUSE},
311 329 {NT_STATUS_UNSUCCESSFUL, EINVAL},
312 - {NT_STATUS_WRONG_PASSWORD, EACCES},
330 + {NT_STATUS_WRONG_PASSWORD, EAUTH},
313 331 {0, 0}
314 332 };
315 333
316 334 /*
317 335 * Table for converting NT STATUS values to DOS class/code.
318 336 * Rows ordered by integer value of last column (NT STATUS)
319 337 */
320 338 typedef struct nt2doserr {
321 339 unsigned short dclass;
322 340 unsigned short derr;
323 341 unsigned int nterr;
324 342 } nt2doserr_t;
325 343
326 344 static const nt2doserr_t nt2doserr[] = {
327 345 {ERRDOS, ERRgeneral, NT_STATUS_UNSUCCESSFUL},
328 346 {ERRDOS, ERRbadfunc, NT_STATUS_NOT_IMPLEMENTED},
329 347 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_INFO_CLASS},
330 348 {ERRDOS, ERROR_BAD_LENGTH, NT_STATUS_INFO_LENGTH_MISMATCH},
331 349 {ERRHRD, ERRgeneral, NT_STATUS_ACCESS_VIOLATION},
332 350 {ERRHRD, ERRgeneral, NT_STATUS_IN_PAGE_ERROR},
333 351 {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA},
334 352 {ERRDOS, ERRbadfid, NT_STATUS_INVALID_HANDLE},
335 353 {ERRHRD, ERRgeneral, NT_STATUS_BAD_INITIAL_STACK},
336 354 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_BAD_INITIAL_PC},
337 355 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_CID},
338 356 {ERRHRD, ERRgeneral, NT_STATUS_TIMER_NOT_CANCELED},
339 357 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER},
340 358 {ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_DEVICE},
341 359 {ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_FILE},
342 360 {ERRDOS, ERRbadfunc, NT_STATUS_INVALID_DEVICE_REQUEST},
343 361 {ERRDOS, ERROR_HANDLE_EOF, NT_STATUS_END_OF_FILE},
344 362 {ERRDOS, ERROR_WRONG_DISK, NT_STATUS_WRONG_VOLUME},
345 363 {ERRDOS, ERROR_NOT_READY, NT_STATUS_NO_MEDIA_IN_DEVICE},
346 364 {ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_MEDIA},
347 365 {ERRDOS, ERROR_SECTOR_NOT_FOUND, NT_STATUS_NONEXISTENT_SECTOR},
348 366 {ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY},
349 367 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_CONFLICTING_ADDRESSES},
350 368 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_MAPPED_VIEW},
351 369 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_UNABLE_TO_FREE_VM},
352 370 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_UNABLE_TO_DELETE_SECTION},
353 371 {ERRDOS, NERR_InvalidAPI, NT_STATUS_INVALID_SYSTEM_SERVICE},
354 372 {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_INSTRUCTION},
355 373 {ERRDOS, ERRnoaccess, NT_STATUS_INVALID_LOCK_SEQUENCE},
356 374 {ERRDOS, ERRnoaccess, NT_STATUS_INVALID_VIEW_SIZE},
357 375 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_FILE_FOR_SECTION},
358 376 {ERRDOS, ERRnoaccess, NT_STATUS_ALREADY_COMMITTED},
359 377 {ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED},
360 378 {ERRDOS, ERROR_BUFFER_OVERFLOW, NT_STATUS_BUFFER_TOO_SMALL},
361 379 {ERRDOS, ERRbadfid, NT_STATUS_OBJECT_TYPE_MISMATCH},
362 380 {ERRHRD, ERRgeneral, NT_STATUS_NONCONTINUABLE_EXCEPTION},
363 381 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DISPOSITION},
364 382 {ERRHRD, ERRgeneral, NT_STATUS_UNWIND},
365 383 {ERRHRD, ERRgeneral, NT_STATUS_BAD_STACK},
366 384 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_UNWIND_TARGET},
367 385 {ERRDOS, ERROR_NOT_LOCKED, NT_STATUS_NOT_LOCKED},
368 386 {ERRHRD, ERRgeneral, NT_STATUS_PARITY_ERROR},
369 387 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_UNABLE_TO_DECOMMIT_VM},
370 388 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_COMMITTED},
371 389 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PORT_ATTRIBUTES},
372 390 {ERRHRD, ERRgeneral, NT_STATUS_PORT_MESSAGE_TOO_LONG},
373 391 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_MIX},
374 392 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_QUOTA_LOWER},
375 393 {ERRHRD, ERRgeneral, NT_STATUS_DISK_CORRUPT_ERROR},
376 394 {ERRDOS, ERROR_INVALID_NAME, NT_STATUS_OBJECT_NAME_INVALID},
377 395 {ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND},
378 396 {ERRDOS, ERROR_ALREADY_EXISTS, NT_STATUS_OBJECT_NAME_COLLISION},
379 397 {ERRDOS, ERRbadfid, NT_STATUS_PORT_DISCONNECTED},
380 398 {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_ALREADY_ATTACHED},
381 399 {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_OBJECT_PATH_INVALID},
382 400 {ERRDOS, ERRbadpath, NT_STATUS_OBJECT_PATH_NOT_FOUND},
383 401 {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_OBJECT_PATH_SYNTAX_BAD},
384 402 {ERRHRD, ERRgeneral, NT_STATUS_DATA_OVERRUN},
385 403 {ERRHRD, ERRgeneral, NT_STATUS_DATA_LATE_ERROR},
386 404 {ERRDOS, ERROR_CRC, NT_STATUS_DATA_ERROR},
387 405 {ERRDOS, ERROR_CRC, NT_STATUS_CRC_ERROR},
388 406 {ERRDOS, ERRnomem, NT_STATUS_SECTION_TOO_BIG},
389 407 {ERRDOS, ERRnoaccess, NT_STATUS_PORT_CONNECTION_REFUSED},
390 408 {ERRDOS, ERRbadfid, NT_STATUS_INVALID_PORT_HANDLE},
391 409 {ERRDOS, ERROR_SHARING_VIOLATION, NT_STATUS_SHARING_VIOLATION},
392 410 {ERRHRD, ERRgeneral, NT_STATUS_QUOTA_EXCEEDED},
393 411 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PAGE_PROTECTION},
394 412 {ERRDOS, ERROR_NOT_OWNER, NT_STATUS_MUTANT_NOT_OWNED},
395 413 {ERRDOS, ERROR_TOO_MANY_POSTS, NT_STATUS_SEMAPHORE_LIMIT_EXCEEDED},
396 414 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_PORT_ALREADY_SET},
397 415 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_SECTION_NOT_IMAGE},
398 416 {ERRDOS, ERROR_SIGNAL_REFUSED, NT_STATUS_SUSPEND_COUNT_EXCEEDED},
399 417 {ERRDOS, ERRnoaccess, NT_STATUS_THREAD_IS_TERMINATING},
400 418 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_BAD_WORKING_SET_LIMIT},
401 419 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INCOMPATIBLE_FILE_MAP},
402 420 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_SECTION_PROTECTION},
403 421 {ERRDOS, ERROR_EAS_NOT_SUPPORTED, NT_STATUS_EAS_NOT_SUPPORTED},
404 422 {ERRDOS, ERROR_EA_LIST_INCONSISTENT, NT_STATUS_EA_TOO_LARGE},
405 423 {ERRHRD, ERRgeneral, NT_STATUS_NONEXISTENT_EA_ENTRY},
406 424 {ERRHRD, ERRgeneral, NT_STATUS_NO_EAS_ON_FILE},
407 425 {ERRHRD, ERRgeneral, NT_STATUS_EA_CORRUPT_ERROR},
408 426 {ERRDOS, ERROR_LOCK_VIOLATION, NT_STATUS_FILE_LOCK_CONFLICT},
409 427 {ERRDOS, ERROR_LOCK_VIOLATION, NT_STATUS_LOCK_NOT_GRANTED},
410 428 {ERRDOS, ERRnoaccess, NT_STATUS_DELETE_PENDING},
411 429 {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_CTL_FILE_NOT_SUPPORTED},
412 430 {ERRHRD, ERRgeneral, NT_STATUS_UNKNOWN_REVISION},
413 431 {ERRHRD, ERRgeneral, NT_STATUS_REVISION_MISMATCH},
414 432 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_OWNER},
415 433 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PRIMARY_GROUP},
416 434 {ERRHRD, ERRgeneral, NT_STATUS_NO_IMPERSONATION_TOKEN},
417 435 {ERRHRD, ERRgeneral, NT_STATUS_CANT_DISABLE_MANDATORY},
418 436 {ERRDOS, NERR_LogonServerNotFound, NT_STATUS_NO_LOGON_SERVERS},
419 437 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_LOGON_SESSION},
420 438 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PRIVILEGE},
421 439 {ERRDOS, ERRnoaccess, NT_STATUS_PRIVILEGE_NOT_HELD},
422 440 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACCOUNT_NAME},
423 441 {ERRHRD, ERRgeneral, NT_STATUS_USER_EXISTS},
424 442 {ERRDOS, ERRnoaccess, NT_STATUS_NO_SUCH_USER},
425 443 {ERRHRD, ERRgeneral, NT_STATUS_GROUP_EXISTS},
426 444 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_GROUP},
427 445 {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_GROUP},
428 446 {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_GROUP},
429 447 {ERRHRD, ERRgeneral, NT_STATUS_LAST_ADMIN},
430 448 {ERRSRV, ERRbadpw, NT_STATUS_WRONG_PASSWORD},
431 449 {ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_PASSWORD},
432 450 {ERRHRD, ERRgeneral, NT_STATUS_PASSWORD_RESTRICTION},
433 451 {ERRDOS, ERRnoaccess, NT_STATUS_LOGON_FAILURE},
434 452 {ERRHRD, ERRgeneral, NT_STATUS_ACCOUNT_RESTRICTION},
435 453 {ERRSRV, NERR_InvalidLogonHours, NT_STATUS_INVALID_LOGON_HOURS},
436 454 {ERRSRV, NERR_InvalidWorkstation, NT_STATUS_INVALID_WORKSTATION},
437 455 {ERRSRV, NERR_PasswordExpired, NT_STATUS_PASSWORD_EXPIRED},
438 456 {ERRSRV, NERR_AccountExpired, NT_STATUS_ACCOUNT_DISABLED},
439 457 {ERRHRD, ERRgeneral, NT_STATUS_NONE_MAPPED},
440 458 {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LUIDS_REQUESTED},
441 459 {ERRHRD, ERRgeneral, NT_STATUS_LUIDS_EXHAUSTED},
442 460 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SUB_AUTHORITY},
443 461 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ACL},
444 462 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SID},
445 463 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SECURITY_DESCR},
446 464 {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_PROCEDURE_NOT_FOUND},
447 465 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_FORMAT},
448 466 {ERRHRD, ERRgeneral, NT_STATUS_NO_TOKEN},
449 467 {ERRHRD, ERRgeneral, NT_STATUS_BAD_INHERITANCE_ACL},
450 468 {ERRDOS, ERROR_NOT_LOCKED, NT_STATUS_RANGE_NOT_LOCKED},
451 469 {ERRDOS, ERROR_DISK_FULL, NT_STATUS_DISK_FULL},
452 470 {ERRHRD, ERRgeneral, NT_STATUS_SERVER_DISABLED},
453 471 {ERRHRD, ERRgeneral, NT_STATUS_SERVER_NOT_DISABLED},
454 472 {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_GUIDS_REQUESTED},
455 473 {ERRDOS, ERROR_NO_MORE_ITEMS, NT_STATUS_GUIDS_EXHAUSTED},
456 474 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ID_AUTHORITY},
457 475 {ERRDOS, ERROR_NO_MORE_ITEMS, NT_STATUS_AGENTS_EXHAUSTED},
458 476 {ERRDOS, ERROR_LABEL_TOO_LONG, NT_STATUS_INVALID_VOLUME_LABEL},
459 477 {ERRDOS, ERROR_OUTOFMEMORY, NT_STATUS_SECTION_NOT_EXTENDED},
460 478 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_NOT_MAPPED_DATA},
461 479 {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_DATA_NOT_FOUND},
462 480 {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_TYPE_NOT_FOUND},
463 481 {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_NAME_NOT_FOUND},
464 482 {ERRHRD, ERRgeneral, NT_STATUS_ARRAY_BOUNDS_EXCEEDED},
465 483 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DENORMAL_OPERAND},
466 484 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_DIVIDE_BY_ZERO},
467 485 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INEXACT_RESULT},
468 486 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_INVALID_OPERATION},
469 487 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_OVERFLOW},
470 488 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_STACK_CHECK},
471 489 {ERRHRD, ERRgeneral, NT_STATUS_FLOAT_UNDERFLOW},
472 490 {ERRHRD, ERRgeneral, NT_STATUS_INTEGER_DIVIDE_BY_ZERO},
473 491 {ERRDOS, ERROR_ARITHMETIC_OVERFLOW, NT_STATUS_INTEGER_OVERFLOW},
474 492 {ERRHRD, ERRgeneral, NT_STATUS_PRIVILEGED_INSTRUCTION},
475 493 {ERRDOS, ERRnomem, NT_STATUS_TOO_MANY_PAGING_FILES},
476 494 {ERRHRD, ERRgeneral, NT_STATUS_FILE_INVALID},
477 495 {ERRHRD, ERRgeneral, NT_STATUS_ALLOTTED_SPACE_EXCEEDED},
478 496 {ERRDOS, ERRnomem, NT_STATUS_INSUFFICIENT_RESOURCES},
479 497 {ERRDOS, ERRbadpath, NT_STATUS_DFS_EXIT_PATH_FOUND},
480 498 {ERRDOS, ERROR_CRC, NT_STATUS_DEVICE_DATA_ERROR},
481 499 {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_CONNECTED},
482 500 {ERRDOS, ERROR_NOT_READY, NT_STATUS_DEVICE_POWER_FAILURE},
483 501 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_FREE_VM_NOT_AT_BASE},
484 502 {ERRDOS, ERROR_INVALID_ADDRESS, NT_STATUS_MEMORY_NOT_ALLOCATED},
485 503 {ERRHRD, ERRgeneral, NT_STATUS_WORKING_SET_QUOTA},
486 504 {ERRDOS, ERROR_WRITE_PROTECT, NT_STATUS_MEDIA_WRITE_PROTECTED},
487 505 {ERRDOS, ERROR_NOT_READY, NT_STATUS_DEVICE_NOT_READY},
488 506 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_GROUP_ATTRIBUTES},
489 507 {ERRHRD, ERRgeneral, NT_STATUS_BAD_IMPERSONATION_LEVEL},
490 508 {ERRHRD, ERRgeneral, NT_STATUS_CANT_OPEN_ANONYMOUS},
491 509 {ERRHRD, ERRgeneral, NT_STATUS_BAD_VALIDATION_CLASS},
492 510 {ERRHRD, ERRgeneral, NT_STATUS_BAD_TOKEN_TYPE},
493 511 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_BAD_MASTER_BOOT_RECORD},
494 512 {ERRHRD, ERRgeneral, NT_STATUS_INSTRUCTION_MISALIGNMENT},
495 513 {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_INSTANCE_NOT_AVAILABLE},
496 514 {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_PIPE_NOT_AVAILABLE},
497 515 {ERRDOS, ERROR_BAD_PIPE, NT_STATUS_INVALID_PIPE_STATE},
498 516 {ERRDOS, ERROR_PIPE_BUSY, NT_STATUS_PIPE_BUSY},
499 517 {ERRDOS, ERRbadfunc, NT_STATUS_ILLEGAL_FUNCTION},
500 518 {ERRDOS, ERROR_PIPE_NOT_CONNECTED, NT_STATUS_PIPE_DISCONNECTED},
501 519 {ERRDOS, ERROR_NO_DATA, NT_STATUS_PIPE_CLOSING},
502 520 {ERRHRD, ERRgeneral, NT_STATUS_PIPE_CONNECTED},
503 521 {ERRHRD, ERRgeneral, NT_STATUS_PIPE_LISTENING},
504 522 {ERRDOS, ERROR_BAD_PIPE, NT_STATUS_INVALID_READ_MODE},
505 523 {ERRDOS, ERROR_SEM_TIMEOUT, NT_STATUS_IO_TIMEOUT},
506 524 {ERRDOS, ERROR_HANDLE_EOF, NT_STATUS_FILE_FORCED_CLOSED},
507 525 {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STARTED},
508 526 {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_NOT_STOPPED},
509 527 {ERRHRD, ERRgeneral, NT_STATUS_COULD_NOT_INTERPRET},
510 528 {ERRDOS, ERRnoaccess, NT_STATUS_FILE_IS_A_DIRECTORY},
511 529 {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_SUPPORTED},
512 530 {ERRDOS, ERROR_REM_NOT_LIST, NT_STATUS_REMOTE_NOT_LISTENING},
513 531 {ERRDOS, ERROR_DUP_NAME, NT_STATUS_DUPLICATE_NAME},
514 532 {ERRDOS, ERROR_BAD_NETPATH, NT_STATUS_BAD_NETWORK_PATH},
515 533 {ERRDOS, ERROR_NETWORK_BUSY, NT_STATUS_NETWORK_BUSY},
516 534 {ERRDOS, ERROR_DEV_NOT_EXIST, NT_STATUS_DEVICE_DOES_NOT_EXIST},
517 535 {ERRDOS, ERROR_TOO_MANY_CMDS, NT_STATUS_TOO_MANY_COMMANDS},
518 536 {ERRDOS, ERROR_ADAP_HDW_ERR, NT_STATUS_ADAPTER_HARDWARE_ERROR},
519 537 {ERRDOS, ERROR_BAD_NET_RESP, NT_STATUS_INVALID_NETWORK_RESPONSE},
520 538 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_UNEXPECTED_NETWORK_ERROR},
521 539 {ERRDOS, ERROR_BAD_REM_ADAP, NT_STATUS_BAD_REMOTE_ADAPTER},
522 540 {ERRDOS, ERROR_PRINTQ_FULL, NT_STATUS_PRINT_QUEUE_FULL},
523 541 {ERRDOS, ERROR_NO_SPOOL_SPACE, NT_STATUS_NO_SPOOL_SPACE},
524 542 {ERRDOS, ERROR_PRINT_CANCELLED, NT_STATUS_PRINT_CANCELLED},
525 543 {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_NETWORK_NAME_DELETED},
526 544 {ERRDOS, ERROR_NETWORK_ACCESS_DENIED, NT_STATUS_NETWORK_ACCESS_DENIED},
527 545 {ERRDOS, ERROR_BAD_DEV_TYPE, NT_STATUS_BAD_DEVICE_TYPE},
528 546 {ERRDOS, ERROR_BAD_NET_NAME, NT_STATUS_BAD_NETWORK_NAME},
529 547 {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_NAMES},
530 548 {ERRDOS, ERROR_TOO_MANY_SESS, NT_STATUS_TOO_MANY_SESSIONS},
531 549 {ERRDOS, ERROR_SHARING_PAUSED, NT_STATUS_SHARING_PAUSED},
532 550 {ERRDOS, ERROR_REQ_NOT_ACCEP, NT_STATUS_REQUEST_NOT_ACCEPTED},
533 551 {ERRDOS, ERROR_REDIR_PAUSED, NT_STATUS_REDIRECTOR_PAUSED},
534 552 {ERRDOS, ERROR_NET_WRITE_FAULT, NT_STATUS_NET_WRITE_FAULT},
535 553 {ERRHRD, ERRgeneral, NT_STATUS_PROFILING_AT_LIMIT},
536 554 {ERRDOS, ERROR_NOT_SAME_DEVICE, NT_STATUS_NOT_SAME_DEVICE},
537 555 {ERRDOS, ERRnoaccess, NT_STATUS_FILE_RENAMED},
538 556 {ERRDOS, ERROR_VC_DISCONNECTED, NT_STATUS_VIRTUAL_CIRCUIT_CLOSED},
539 557 {ERRHRD, ERRgeneral, NT_STATUS_NO_SECURITY_ON_OBJECT},
540 558 {ERRHRD, ERRgeneral, NT_STATUS_CANT_WAIT},
541 559 {ERRDOS, ERROR_NO_DATA, NT_STATUS_PIPE_EMPTY},
542 560 {ERRHRD, ERRgeneral, NT_STATUS_CANT_ACCESS_DOMAIN_INFO},
543 561 {ERRHRD, ERRgeneral, NT_STATUS_CANT_TERMINATE_SELF},
544 562 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_SERVER_STATE},
545 563 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_STATE},
546 564 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_DOMAIN_ROLE},
547 565 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_DOMAIN},
548 566 {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_EXISTS},
549 567 {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_LIMIT_EXCEEDED},
550 568 {ERRDOS, ERROR_OPLOCK_NOT_GRANTED, NT_STATUS_OPLOCK_NOT_GRANTED},
551 569 {ERRDOS, ERROR_INVALID_OPLOCK_PROTOCOL,
552 570 NT_STATUS_INVALID_OPLOCK_PROTOCOL},
553 571 {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_CORRUPTION},
554 572 {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_ERROR},
555 573 {ERRHRD, ERRgeneral, NT_STATUS_GENERIC_NOT_MAPPED},
556 574 {ERRHRD, ERRgeneral, NT_STATUS_BAD_DESCRIPTOR_FORMAT},
557 575 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_USER_BUFFER},
558 576 {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_IO_ERROR},
559 577 {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_CREATE_ERR},
560 578 {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_MAP_ERROR},
561 579 {ERRHRD, ERRgeneral, NT_STATUS_UNEXPECTED_MM_EXTEND_ERR},
562 580 {ERRHRD, ERRgeneral, NT_STATUS_NOT_LOGON_PROCESS},
563 581 {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_EXISTS},
564 582 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_1},
565 583 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_2},
566 584 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_3},
567 585 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_4},
568 586 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_5},
569 587 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_6},
570 588 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_7},
571 589 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_8},
572 590 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_9},
573 591 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_10},
574 592 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_11},
575 593 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER_12},
576 594 {ERRDOS, ERRbadpath, NT_STATUS_REDIRECTOR_NOT_STARTED},
577 595 {ERRHRD, ERRgeneral, NT_STATUS_REDIRECTOR_STARTED},
578 596 {ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW},
579 597 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_PACKAGE},
580 598 {ERRHRD, ERRgeneral, NT_STATUS_BAD_FUNCTION_TABLE},
581 599 {ERRDOS, ERROR_ENVVAR_NOT_FOUND, NT_STATUS_VARIABLE_NOT_FOUND},
582 600 {ERRDOS, ERROR_DIR_NOT_EMPTY, NT_STATUS_DIRECTORY_NOT_EMPTY},
583 601 {ERRHRD, ERRgeneral, NT_STATUS_FILE_CORRUPT_ERROR},
584 602 {ERRDOS, ERROR_DIRECTORY, NT_STATUS_NOT_A_DIRECTORY},
585 603 {ERRHRD, ERRgeneral, NT_STATUS_BAD_LOGON_SESSION_STATE},
|
↓ open down ↓ |
263 lines elided |
↑ open up ↑ |
586 604 {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SESSION_COLLISION},
587 605 {ERRDOS, ERROR_FILENAME_EXCED_RANGE, NT_STATUS_NAME_TOO_LONG},
588 606 {ERRDOS, NERR_OpenFiles, NT_STATUS_FILES_OPEN},
589 607 {ERRDOS, NERR_DevInUse, NT_STATUS_CONNECTION_IN_USE},
590 608 {ERRHRD, ERRgeneral, NT_STATUS_MESSAGE_NOT_FOUND},
591 609 {ERRDOS, ERRnoaccess, NT_STATUS_PROCESS_IS_TERMINATING},
592 610 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LOGON_TYPE},
593 611 {ERRHRD, ERRgeneral, NT_STATUS_NO_GUID_TRANSLATION},
594 612 {ERRHRD, ERRgeneral, NT_STATUS_CANNOT_IMPERSONATE},
595 613 {ERRHRD, ERRgeneral, NT_STATUS_IMAGE_ALREADY_LOADED},
596 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_PRESENT},
597 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_NOT_EXIST},
598 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_LID_ALREADY_OWNED},
599 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_NOT_LID_OWNER},
600 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_COMMAND},
601 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_LID},
602 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_SELECTOR_NOT_AVAILABLE},
603 - {ERRHRD, ERRgeneral, NT_STATUS_ABIOS_INVALID_SELECTOR},
604 614 {ERRHRD, ERRgeneral, NT_STATUS_NO_LDT},
605 615 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_SIZE},
606 616 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_OFFSET},
607 617 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_LDT_DESCRIPTOR},
608 618 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_NE_FORMAT},
609 619 {ERRHRD, ERRgeneral, NT_STATUS_RXACT_INVALID_STATE},
610 620 {ERRHRD, ERRgeneral, NT_STATUS_RXACT_COMMIT_FAILURE},
611 621 {ERRHRD, ERRgeneral, NT_STATUS_MAPPED_FILE_SIZE_ZERO},
612 622 {ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES},
613 623 {ERRHRD, ERRgeneral, NT_STATUS_CANCELLED},
614 624 {ERRDOS, ERRnoaccess, NT_STATUS_CANNOT_DELETE},
615 625 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_COMPUTER_NAME},
616 626 {ERRDOS, ERRnoaccess, NT_STATUS_FILE_DELETED},
617 627 {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_ACCOUNT},
618 628 {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_GROUP},
619 629 {ERRHRD, ERRgeneral, NT_STATUS_SPECIAL_USER},
620 630 {ERRHRD, ERRgeneral, NT_STATUS_MEMBERS_PRIMARY_GROUP},
621 631 {ERRDOS, ERRbadfid, NT_STATUS_FILE_CLOSED},
622 632 {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_THREADS},
623 633 {ERRHRD, ERRgeneral, NT_STATUS_THREAD_NOT_IN_PROCESS},
624 634 {ERRHRD, ERRgeneral, NT_STATUS_TOKEN_ALREADY_IN_USE},
625 635 {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_QUOTA_EXCEEDED},
626 636 {ERRHRD, ERRgeneral, NT_STATUS_COMMITMENT_LIMIT},
627 637 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_LE_FORMAT},
628 638 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_NOT_MZ},
629 639 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_PROTECT},
630 640 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_INVALID_IMAGE_WIN_16},
631 641 {ERRHRD, ERRgeneral, NT_STATUS_LOGON_SERVER_CONFLICT},
632 642 {ERRHRD, ERRgeneral, NT_STATUS_TIME_DIFFERENCE_AT_DC},
633 643 {ERRHRD, ERRgeneral, NT_STATUS_SYNCHRONIZATION_REQUIRED},
634 644 {ERRDOS, ERROR_MOD_NOT_FOUND, NT_STATUS_DLL_NOT_FOUND},
635 645 {ERRHRD, ERRgeneral, NT_STATUS_OPEN_FAILED},
636 646 {ERRHRD, ERRgeneral, NT_STATUS_IO_PRIVILEGE_FAILED},
637 647 {ERRDOS, ERROR_INVALID_ORDINAL, NT_STATUS_ORDINAL_NOT_FOUND},
638 648 {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_ENTRYPOINT_NOT_FOUND},
639 649 {ERRHRD, ERRgeneral, NT_STATUS_CONTROL_C_EXIT},
640 650 {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_LOCAL_DISCONNECT},
641 651 {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_REMOTE_DISCONNECT},
642 652 {ERRDOS, ERROR_REM_NOT_LIST, NT_STATUS_REMOTE_RESOURCES},
643 653 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_LINK_FAILED},
644 654 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_LINK_TIMEOUT},
645 655 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_INVALID_CONNECTION},
646 656 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_INVALID_ADDRESS},
647 657 {ERRHRD, ERRgeneral, NT_STATUS_DLL_INIT_FAILED},
648 658 {ERRHRD, ERRgeneral, NT_STATUS_MISSING_SYSTEMFILE},
649 659 {ERRHRD, ERRgeneral, NT_STATUS_UNHANDLED_EXCEPTION},
650 660 {ERRHRD, ERRgeneral, NT_STATUS_APP_INIT_FAILURE},
651 661 {ERRHRD, ERRgeneral, NT_STATUS_PAGEFILE_CREATE_FAILED},
652 662 {ERRHRD, ERRgeneral, NT_STATUS_NO_PAGEFILE},
653 663 {ERRDOS, ERROR_INVALID_LEVEL, NT_STATUS_INVALID_LEVEL},
654 664 {ERRDOS, ERROR_INVALID_PASSWORD, NT_STATUS_WRONG_PASSWORD_CORE},
655 665 {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_FLOAT_CONTEXT},
656 666 {ERRDOS, ERROR_BROKEN_PIPE, NT_STATUS_PIPE_BROKEN},
657 667 {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_CORRUPT},
658 668 {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_IO_FAILED},
659 669 {ERRHRD, ERRgeneral, NT_STATUS_NO_EVENT_PAIR},
660 670 {ERRHRD, ERRgeneral, NT_STATUS_UNRECOGNIZED_VOLUME},
661 671 {ERRHRD, ERRgeneral, NT_STATUS_SERIAL_NO_DEVICE_INITED},
662 672 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_ALIAS},
663 673 {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_NOT_IN_ALIAS},
664 674 {ERRHRD, ERRgeneral, NT_STATUS_MEMBER_IN_ALIAS},
665 675 {ERRHRD, ERRgeneral, NT_STATUS_ALIAS_EXISTS},
666 676 {ERRHRD, ERRgeneral, NT_STATUS_LOGON_NOT_GRANTED},
667 677 {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SECRETS},
668 678 {ERRHRD, ERRgeneral, NT_STATUS_SECRET_TOO_LONG},
669 679 {ERRHRD, ERRgeneral, NT_STATUS_INTERNAL_DB_ERROR},
670 680 {ERRHRD, ERRgeneral, NT_STATUS_FULLSCREEN_MODE},
671 681 {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_CONTEXT_IDS},
672 682 {ERRDOS, ERRnoaccess, NT_STATUS_LOGON_TYPE_NOT_GRANTED},
673 683 {ERRHRD, ERRgeneral, NT_STATUS_NOT_REGISTRY_FILE},
674 684 {ERRHRD, ERRgeneral, NT_STATUS_NT_CROSS_ENCRYPTION_REQUIRED},
675 685 {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CTRLR_CONFIG_ERROR},
676 686 {ERRHRD, ERRgeneral, NT_STATUS_FT_MISSING_MEMBER},
677 687 {ERRHRD, ERRgeneral, NT_STATUS_ILL_FORMED_SERVICE_ENTRY},
678 688 {ERRHRD, ERRgeneral, NT_STATUS_ILLEGAL_CHARACTER},
679 689 {ERRHRD, ERRgeneral, NT_STATUS_UNMAPPABLE_CHARACTER},
680 690 {ERRHRD, ERRgeneral, NT_STATUS_UNDEFINED_CHARACTER},
681 691 {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_VOLUME},
682 692 {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_ID_MARK_NOT_FOUND},
683 693 {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_WRONG_CYLINDER},
684 694 {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_UNKNOWN_ERROR},
685 695 {ERRHRD, ERRgeneral, NT_STATUS_FLOPPY_BAD_REGISTERS},
686 696 {ERRHRD, ERRgeneral, NT_STATUS_DISK_RECALIBRATE_FAILED},
687 697 {ERRHRD, ERRgeneral, NT_STATUS_DISK_OPERATION_FAILED},
688 698 {ERRHRD, ERRgeneral, NT_STATUS_DISK_RESET_FAILED},
689 699 {ERRHRD, ERRgeneral, NT_STATUS_SHARED_IRQ_BUSY},
690 700 {ERRHRD, ERRgeneral, NT_STATUS_FT_ORPHANING},
691 701 {ERRHRD, ERRgeneral,
692 702 NT_STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT},
693 703 {ERRHRD, ERRgeneral, NT_STATUS_PARTITION_FAILURE},
694 704 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_BLOCK_LENGTH},
695 705 {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_NOT_PARTITIONED},
696 706 {ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_LOCK_MEDIA},
697 707 {ERRHRD, ERRgeneral, NT_STATUS_UNABLE_TO_UNLOAD_MEDIA},
698 708 {ERRHRD, ERRgeneral, NT_STATUS_EOM_OVERFLOW},
699 709 {ERRHRD, ERRgeneral, NT_STATUS_NO_MEDIA},
700 710 {ERRHRD, ERRgeneral, NT_STATUS_NO_SUCH_MEMBER},
701 711 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_MEMBER},
702 712 {ERRHRD, ERRgeneral, NT_STATUS_KEY_DELETED},
703 713 {ERRHRD, ERRgeneral, NT_STATUS_NO_LOG_SPACE},
704 714 {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_SIDS},
705 715 {ERRHRD, ERRgeneral, NT_STATUS_LM_CROSS_ENCRYPTION_REQUIRED},
706 716 {ERRHRD, ERRgeneral, NT_STATUS_KEY_HAS_CHILDREN},
707 717 {ERRHRD, ERRgeneral, NT_STATUS_CHILD_MUST_BE_VOLATILE},
708 718 {ERRDOS, ERROR_INVALID_PARAMETER, NT_STATUS_DEVICE_CONFIGURATION_ERROR},
709 719 {ERRHRD, ERRgeneral, NT_STATUS_DRIVER_INTERNAL_ERROR},
710 720 {ERRDOS, ERROR_BAD_COMMAND, NT_STATUS_INVALID_DEVICE_STATE},
711 721 {ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR},
712 722 {ERRHRD, ERRgeneral, NT_STATUS_DEVICE_PROTOCOL_ERROR},
713 723 {ERRHRD, ERRgeneral, NT_STATUS_BACKUP_CONTROLLER},
714 724 {ERRHRD, ERRgeneral, NT_STATUS_LOG_FILE_FULL},
715 725 {ERRDOS, ERROR_WRITE_PROTECT, NT_STATUS_TOO_LATE},
716 726 {ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_LSA_SECRET},
717 727 {ERRDOS, ERRnoaccess, NT_STATUS_NO_TRUST_SAM_ACCOUNT},
718 728 {ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_DOMAIN_FAILURE},
719 729 {ERRDOS, ERRnoaccess, NT_STATUS_TRUSTED_RELATIONSHIP_FAILURE},
720 730 {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CORRUPT},
721 731 {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_CANT_START},
722 732 {ERRDOS, ERRnoaccess, NT_STATUS_TRUST_FAILURE},
723 733 {ERRHRD, ERRgeneral, NT_STATUS_MUTANT_LIMIT_EXCEEDED},
724 734 {ERRDOS, NERR_NetlogonNotStarted, NT_STATUS_NETLOGON_NOT_STARTED},
725 735 {ERRSRV, NERR_AccountExpired, NT_STATUS_ACCOUNT_EXPIRED},
726 736 {ERRHRD, ERRgeneral, NT_STATUS_POSSIBLE_DEADLOCK},
727 737 {ERRHRD, ERRgeneral, NT_STATUS_NETWORK_CREDENTIAL_CONFLICT},
728 738 {ERRHRD, ERRgeneral, NT_STATUS_REMOTE_SESSION_LIMIT},
729 739 {ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_FILE_CHANGED},
730 740 {ERRDOS, ERRnoaccess,
731 741 NT_STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT},
732 742 {ERRDOS, ERRnoaccess,
733 743 NT_STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT},
734 744 {ERRDOS, ERRnoaccess, NT_STATUS_NOLOGON_SERVER_TRUST_ACCOUNT},
735 745 {ERRDOS, ERRnoaccess, NT_STATUS_DOMAIN_TRUST_INCONSISTENT},
736 746 {ERRHRD, ERRgeneral, NT_STATUS_FS_DRIVER_REQUIRED},
737 747 {ERRHRD, ERRgeneral, NT_STATUS_NO_USER_SESSION_KEY},
738 748 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_USER_SESSION_DELETED},
739 749 {ERRHRD, ERRgeneral, NT_STATUS_RESOURCE_LANG_NOT_FOUND},
740 750 {ERRDOS, ERRnomem, NT_STATUS_INSUFF_SERVER_RESOURCES},
741 751 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_BUFFER_SIZE},
742 752 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_COMPONENT},
743 753 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_ADDRESS_WILDCARD},
744 754 {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_ADDRESSES},
745 755 {ERRDOS, ERROR_DUP_NAME, NT_STATUS_ADDRESS_ALREADY_EXISTS},
746 756 {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_ADDRESS_CLOSED},
747 757 {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_CONNECTION_DISCONNECTED},
748 758 {ERRDOS, ERROR_NETNAME_DELETED, NT_STATUS_CONNECTION_RESET},
749 759 {ERRDOS, ERROR_TOO_MANY_NAMES, NT_STATUS_TOO_MANY_NODES},
750 760 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_ABORTED},
751 761 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_TIMED_OUT},
752 762 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_NO_RELEASE},
753 763 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_NO_MATCH},
754 764 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_RESPONDED},
755 765 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_INVALID_ID},
756 766 {ERRDOS, ERROR_UNEXP_NET_ERR, NT_STATUS_TRANSACTION_INVALID_TYPE},
757 767 {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_SERVER_SESSION},
758 768 {ERRDOS, ERROR_NOT_SUPPORTED, NT_STATUS_NOT_CLIENT_SESSION},
759 769 {ERRHRD, ERRgeneral, NT_STATUS_CANNOT_LOAD_REGISTRY_FILE},
760 770 {ERRHRD, ERRgeneral, NT_STATUS_DEBUG_ATTACH_FAILED},
761 771 {ERRHRD, ERRgeneral, NT_STATUS_SYSTEM_PROCESS_TERMINATED},
762 772 {ERRHRD, ERRgeneral, NT_STATUS_DATA_NOT_ACCEPTED},
763 773 {ERRHRD, ERRgeneral, NT_STATUS_NO_BROWSER_SERVERS_FOUND},
764 774 {ERRHRD, ERRgeneral, NT_STATUS_VDM_HARD_ERROR},
765 775 {ERRHRD, ERRgeneral, NT_STATUS_DRIVER_CANCEL_TIMEOUT},
766 776 {ERRHRD, ERRgeneral, NT_STATUS_REPLY_MESSAGE_MISMATCH},
767 777 {ERRHRD, ERRgeneral, NT_STATUS_MAPPED_ALIGNMENT},
768 778 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_IMAGE_CHECKSUM_MISMATCH},
769 779 {ERRHRD, ERRgeneral, NT_STATUS_LOST_WRITEBEHIND_DATA},
770 780 {ERRHRD, ERRgeneral, NT_STATUS_CLIENT_SERVER_PARAMETERS_INVALID},
771 781 {ERRSRV, NERR_PasswordExpired, NT_STATUS_PASSWORD_MUST_CHANGE},
772 782 {ERRHRD, ERRgeneral, NT_STATUS_NOT_FOUND},
773 783 {ERRHRD, ERRgeneral, NT_STATUS_NOT_TINY_STREAM},
774 784 {ERRHRD, ERRgeneral, NT_STATUS_RECOVERY_FAILURE},
775 785 {ERRHRD, ERRgeneral, NT_STATUS_STACK_OVERFLOW_READ},
776 786 {ERRHRD, ERRgeneral, NT_STATUS_FAIL_CHECK},
777 787 {ERRHRD, ERRgeneral, NT_STATUS_DUPLICATE_OBJECTID},
778 788 {ERRHRD, ERRgeneral, NT_STATUS_OBJECTID_EXISTS},
779 789 {ERRHRD, ERRgeneral, NT_STATUS_CONVERT_TO_LARGE},
780 790 {ERRHRD, ERRgeneral, NT_STATUS_RETRY},
781 791 {ERRHRD, ERRgeneral, NT_STATUS_FOUND_OUT_OF_SCOPE},
782 792 {ERRHRD, ERRgeneral, NT_STATUS_ALLOCATE_BUCKET},
783 793 {ERRHRD, ERRgeneral, NT_STATUS_PROPSET_NOT_FOUND},
784 794 {ERRHRD, ERRgeneral, NT_STATUS_MARSHALL_OVERFLOW},
785 795 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_VARIANT},
786 796 {ERRHRD, ERRgeneral, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND},
787 797 {ERRDOS, ERRnoaccess, NT_STATUS_ACCOUNT_LOCKED_OUT},
788 798 {ERRDOS, ERRbadfid, NT_STATUS_HANDLE_NOT_CLOSABLE},
789 799 {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_REFUSED},
790 800 {ERRHRD, ERRgeneral, NT_STATUS_GRACEFUL_DISCONNECT},
791 801 {ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_ALREADY_ASSOCIATED},
792 802 {ERRHRD, ERRgeneral, NT_STATUS_ADDRESS_NOT_ASSOCIATED},
793 803 {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_INVALID},
794 804 {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ACTIVE},
795 805 {ERRHRD, ERRgeneral, NT_STATUS_NETWORK_UNREACHABLE},
796 806 {ERRHRD, ERRgeneral, NT_STATUS_HOST_UNREACHABLE},
797 807 {ERRHRD, ERRgeneral, NT_STATUS_PROTOCOL_UNREACHABLE},
798 808 {ERRHRD, ERRgeneral, NT_STATUS_PORT_UNREACHABLE},
799 809 {ERRHRD, ERRgeneral, NT_STATUS_REQUEST_ABORTED},
800 810 {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_ABORTED},
801 811 {ERRHRD, ERRgeneral, NT_STATUS_BAD_COMPRESSION_BUFFER},
802 812 {ERRHRD, ERRgeneral, NT_STATUS_USER_MAPPED_FILE},
803 813 {ERRHRD, ERRgeneral, NT_STATUS_AUDIT_FAILED},
804 814 {ERRHRD, ERRgeneral, NT_STATUS_TIMER_RESOLUTION_NOT_SET},
805 815 {ERRHRD, ERRgeneral, NT_STATUS_CONNECTION_COUNT_LIMIT},
806 816 {ERRHRD, ERRgeneral, NT_STATUS_LOGIN_TIME_RESTRICTION},
807 817 {ERRHRD, ERRgeneral, NT_STATUS_LOGIN_WKSTA_RESTRICTION},
808 818 {ERRDOS, ERROR_BAD_EXE_FORMAT, NT_STATUS_IMAGE_MP_UP_MISMATCH},
809 819 {ERRHRD, ERRgeneral, NT_STATUS_INSUFFICIENT_LOGON_INFO},
810 820 {ERRHRD, ERRgeneral, NT_STATUS_BAD_DLL_ENTRYPOINT},
811 821 {ERRHRD, ERRgeneral, NT_STATUS_BAD_SERVICE_ENTRYPOINT},
812 822 {ERRHRD, ERRgeneral, NT_STATUS_LPC_REPLY_LOST},
813 823 {ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT1},
814 824 {ERRHRD, ERRgeneral, NT_STATUS_IP_ADDRESS_CONFLICT2},
815 825 {ERRHRD, ERRgeneral, NT_STATUS_REGISTRY_QUOTA_LIMIT},
816 826 {ERRSRV, ERRbadtype, NT_STATUS_PATH_NOT_COVERED},
817 827 {ERRHRD, ERRgeneral, NT_STATUS_NO_CALLBACK_ACTIVE},
818 828 {ERRHRD, ERRgeneral, NT_STATUS_LICENSE_QUOTA_EXCEEDED},
819 829 {ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_SHORT},
820 830 {ERRHRD, ERRgeneral, NT_STATUS_PWD_TOO_RECENT},
821 831 {ERRHRD, ERRgeneral, NT_STATUS_PWD_HISTORY_CONFLICT},
822 832 {ERRHRD, ERRgeneral, NT_STATUS_PLUGPLAY_NO_DEVICE},
823 833 {ERRHRD, ERRgeneral, NT_STATUS_UNSUPPORTED_COMPRESSION},
824 834 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_HW_PROFILE},
825 835 {ERRHRD, ERRgeneral, NT_STATUS_INVALID_PLUGPLAY_DEVICE_PATH},
826 836 {ERRDOS, ERROR_INVALID_ORDINAL, NT_STATUS_DRIVER_ORDINAL_NOT_FOUND},
827 837 {ERRDOS, ERROR_PROC_NOT_FOUND, NT_STATUS_DRIVER_ENTRYPOINT_NOT_FOUND},
828 838 {ERRDOS, ERROR_NOT_OWNER, NT_STATUS_RESOURCE_NOT_OWNED},
829 839 {ERRHRD, ERRgeneral, NT_STATUS_TOO_MANY_LINKS},
830 840 {ERRHRD, ERRgeneral, NT_STATUS_QUOTA_LIST_INCONSISTENT},
831 841 {ERRHRD, ERRgeneral, NT_STATUS_FILE_IS_OFFLINE},
832 842 {ERRDOS, ERROR_NOT_READY, NT_STATUS_VOLUME_DISMOUNTED},
833 843 {ERRDOS, ERROR_BAD_PATHNAME, NT_STATUS_DIRECTORY_IS_A_REPARSE_POINT},
834 844 {ERRDOS, ERRnoaccess, NT_STATUS_ENCRYPTION_FAILED},
835 845 {ERRDOS, ERRnoaccess, NT_STATUS_DECRYPTION_FAILED},
836 846 {ERRHRD, ERRgeneral, NT_STATUS_RANGE_NOT_FOUND},
837 847 {ERRDOS, ERRnoaccess, NT_STATUS_NO_RECOVERY_POLICY},
838 848 {ERRDOS, ERRnoaccess, NT_STATUS_NO_EFS},
839 849 {ERRDOS, ERRnoaccess, NT_STATUS_WRONG_EFS},
840 850 {ERRDOS, ERRnoaccess, NT_STATUS_NO_USER_KEYS},
841 851 {ERRDOS, ERRbadfunc, NT_STATUS_VOLUME_NOT_UPGRADED},
842 852 {0, 0, 0}
843 853 };
844 854
845 855 int
846 856 smb_maperr32(uint32_t nterr)
847 857 {
848 858 const nt2errno_t *nt2e;
849 859 const nt2doserr_t *nt2d;
850 860
851 861 switch (NT_SC_SEVERITY(nterr)) {
852 862 case NT_STATUS_SEVERITY_SUCCESS:
853 863 case NT_STATUS_SEVERITY_INFORMATIONAL:
854 864 return (0);
855 865 }
856 866
857 867 /* first try direct map to unix */
858 868 for (nt2e = nt2errno; nt2e->errno; nt2e++)
859 869 if (nt2e->nterr == nterr)
860 870 return (nt2e->errno);
|
↓ open down ↓ |
247 lines elided |
↑ open up ↑ |
861 871 smb_errmsg(unknown_err_logpri, "smb_maperr32",
862 872 "No direct map for 32 bit server error (0x%x)\n", nterr);
863 873
864 874 /* ok, then try mapping to dos to unix */
865 875 for (nt2d = nt2doserr; nt2d->nterr; nt2d++)
866 876 if (nt2d->nterr == nterr)
867 877 return (smb_maperror(nt2d->dclass, nt2d->derr));
868 878 return (EIO);
869 879 }
870 880
881 +uint_t
882 +smb_doserr2status(int dclass, int derr)
883 +{
884 + const nt2doserr_t *nt2d;
871 885
886 + if (dclass == 0 && derr == 0)
887 + return (0);
888 +
889 + for (nt2d = nt2doserr; nt2d->nterr; nt2d++)
890 + if (nt2d->dclass == dclass && nt2d->derr == derr)
891 + return (nt2d->nterr);
892 + return (NT_STATUS_UNSUCCESSFUL);
893 +}
894 +
872 895 int
873 896 smb_maperror(int eclass, int eno)
874 897 {
875 898 if (eclass == 0 && eno == 0)
876 899 return (0);
877 900 switch (eclass) {
878 901 case ERRDOS:
879 902 switch (eno) {
880 903 case ERROR_INVALID_LEVEL:
881 904 return (ENOTSUP);
882 905 case ERRbadfunc:
883 906 case ERRbadenv:
884 907 case ERRbadformat:
885 908 case ERRremcd:
886 909 case ERRrmuns:
887 910 return (EINVAL);
888 911 case ERRbadfile:
889 912 case ERRbadpath:
890 913 case ERROR_BAD_DEV_TYPE:
891 914 case ERROR_BAD_NET_NAME:
892 915 return (ENOENT);
893 916 case ERRnofids:
894 917 return (EMFILE);
895 918 case ERRnoaccess:
896 919 /*
897 920 * XXX CSM Reported on samba-technical 12/7/2002
898 921 *
899 922 * There is a case for which server(s) return
900 923 * ERRnoaccess but should return ERRdiskfull: When
901 924 * the offset for a write is exactly the server
902 925 * file size limit then Samba (at least) thinks
903 926 * the reason for zero bytes having been written
904 927 * must have been "access denied" from the local
905 928 * filesystem. This cannot be easily worked
906 929 * around since the server behaviour is
907 930 * indistinguishable from actual access denied.
908 931 * An incomplete workaround: attempt a 2 byte write
909 932 * from "offset-1". (That may require reading at
910 933 * offset-1 first.) The flaw is that reading or
911 934 * writing at offset-1 could cause an
912 935 * unrelated error (due to a byte range lock
913 936 * for instance) and we can't presume the
914 937 * order servers check errors in.
915 938 */
916 939 case ERRbadaccess:
917 940 return (EACCES);
918 941 case ERRbadshare:
919 942 return (EBUSY);
920 943 case ERRbadfid:
921 944 return (EBADF);
922 945 case ERRbadmcb:
923 946 return (EIO);
924 947 case ERRnomem:
925 948 return (ENOMEM); /* actually remote no mem... */
926 949 case ERRbadmem:
927 950 return (EFAULT);
928 951 case ERRbaddata:
929 952 return (E2BIG);
930 953 case ERRbaddrive:
931 954 case ERRnotready: /* nt */
932 955 return (ENXIO);
933 956 case ERRdiffdevice:
934 957 return (EXDEV);
935 958 case ERRnofiles:
936 959 return (0); /* eeof ? */
937 960 case ERRlock:
938 961 return (EAGAIN);
939 962 case ERRfilexists:
940 963 return (EEXIST);
941 964 case ERROR_INVALID_NAME:
942 965 return (ENOENT);
943 966 case ERROR_DIR_NOT_EMPTY:
944 967 return (ENOTEMPTY);
945 968 case ERROR_NOT_LOCKED:
946 969 return (0); /* we unlock on any close */
947 970 case ERROR_ALREADY_EXISTS:
948 971 return (EEXIST);
949 972 case ERRmoredata:
950 973 return (EMOREDATA);
951 974 }
952 975 break;
953 976 case ERRSRV:
954 977 switch (eno) {
955 978 case ERRerror:
956 979 return (EINVAL);
957 980 case ERRbadpw:
958 981 return (EAUTH);
959 982 case ERRaccess:
960 983 case ERRbaduid:
961 984 return (EACCES);
962 985 case ERRinvnid:
963 986 return (ENETRESET);
964 987 case ERRinvnetname:
965 988 return (ENXIO);
966 989 case ERRbadtype: /* reserved and returned */
967 990 return (EIO);
968 991 case NERR_AccountExpired: /* account exists but disabled */
969 992 return (EPERM);
970 993 }
971 994 break;
972 995 case ERRHRD:
973 996 switch (eno) {
974 997 case ERRnowrite:
975 998 return (EROFS);
976 999 case ERRbadunit:
977 1000 return (ENODEV);
978 1001 case ERRbadreq:
979 1002 return (EBADRPC);
980 1003 case ERRbadshare:
981 1004 return (ETXTBSY);
982 1005 case ERRlock:
983 1006 return (EAGAIN);
984 1007 case ERRdiskfull:
985 1008 return (EFBIG);
986 1009 case ERRnotready:
987 1010 case ERRbadcmd:
988 1011 case ERRdata:
|
↓ open down ↓ |
107 lines elided |
↑ open up ↑ |
989 1012 case ERRgeneral:
990 1013 return (EIO);
991 1014 }
992 1015 }
993 1016
994 1017 smb_errmsg(unknown_err_logpri, "smb_maperror",
995 1018 "Unknown DOS error %d/%d\n", eclass, eno);
996 1019 return (EIO);
997 1020 }
998 1021
999 -#if defined(NOICONVSUPPORT) || defined(lint)
1000 -extern int iconv_conv(void *handle, const char **inbuf,
1001 - size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
1002 -#endif
1003 -
1004 1022 #define SMALL_CONV 256
1005 1023
1024 +/*
1025 + * Decode an SMB OTW string (Unicode or OEM chars)
1026 + * converting to UTF-8 in the output buffer.
1027 + * outlen is in/out (max size on input)
1028 + * insize is the wire size (2 * chars if unicode)
1029 + * The output string is null terminated.
1030 + * Output length does not include the null.
1031 + */
1032 +int
1033 +smb_get_dstring(struct mdchain *mdc, struct smb_vc *vcp,
1034 + char *outbuf, size_t *outlen, int insize)
1035 +{
1036 + uint16_t convbuf[SMALL_CONV];
1037 + uint16_t *cbuf;
1038 + size_t cbufalloc, inlen, outsize;
1039 + int error;
1040 +
1041 + if (insize <= 0)
1042 + return (0);
1043 + /* Note: inlen is UTF-16 symbols. */
1044 + inlen = insize / 2;
1045 +
1046 + if (*outlen < 2)
1047 + return (EINVAL);
1048 + outsize = *outlen - 1; /* room for null */
1049 +
1050 + /*
1051 + * Get a buffer for the conversion and fill it.
1052 + * Use stack buffer if the string is
1053 + * small enough, else allocate.
1054 + */
1055 + if (insize < sizeof (convbuf)) {
1056 + cbufalloc = 0;
1057 + cbuf = convbuf;
1058 + } else {
1059 + cbufalloc = insize + 2;
1060 + cbuf = kmem_alloc(cbufalloc, KM_SLEEP);
1061 + }
1062 + error = md_get_mem(mdc, cbuf, insize, MB_MSYSTEM);
1063 + if (error != 0)
1064 + goto out;
1065 + cbuf[inlen] = 0;
1066 +
1067 + /*
1068 + * Handle the easy case (non-unicode).
1069 + * XXX: Technically, we should convert
1070 + * the string to OEM codeset first...
1071 + * Modern servers all use Unicode, so
1072 + * this is good enough.
1073 + */
1074 + if (SMB_UNICODE_STRINGS(vcp) == 0) {
1075 + *outlen = strlcpy(outbuf, (char *)cbuf, outsize);
1076 + if (*outlen > outsize) {
1077 + *outlen = outsize;
1078 + error = E2BIG;
1079 + }
1080 + } else {
1081 + /*
1082 + * Convert from UTF-16 to UTF-8
1083 + */
1084 + error = uconv_u16tou8(cbuf, &inlen,
1085 + (uchar_t *)outbuf, outlen,
1086 + UCONV_IN_LITTLE_ENDIAN);
1087 + if (error == 0) {
1088 + outbuf[*outlen] = '\0';
1089 + }
1090 + }
1091 +
1092 + ASSERT(*outlen == strlen(outbuf));
1093 +
1094 +out:
1095 + if (cbufalloc != 0)
1096 + kmem_free(cbuf, cbufalloc);
1097 +
1098 + return (error);
1099 +}
1100 +
1101 +/*
1102 + * It's surprising that this function does utf8-ucs2 conversion.
1103 + * One would expect only smb_put_dstring to do that.
1104 + * Fixing that will require changing a bunch of callers. XXX
1105 + */
1006 1106 /*ARGSUSED*/
1007 1107 int
1008 1108 smb_put_dmem(struct mbchain *mbp, struct smb_vc *vcp, const char *src,
1009 1109 int size, int caseopt, int *lenp)
1010 1110 {
1011 1111 uint16_t convbuf[SMALL_CONV];
1012 1112 uint16_t *cbuf;
1013 1113 size_t cbufalloc, inlen, outlen;
1014 1114 int error;
1015 1115
1016 1116 if (size <= 0)
1017 1117 return (0);
1018 1118
1019 1119 /*
1020 1120 * Handle the easy case (non-unicode).
1021 1121 * XXX: Technically, we should convert
1022 1122 * the string to OEM codeset first...
1023 1123 * Modern servers all use Unicode, so
1024 1124 * this is good enough.
1025 1125 */
1026 1126 if (SMB_UNICODE_STRINGS(vcp) == 0) {
1027 1127 error = mb_put_mem(mbp, src, size, MB_MSYSTEM);
1028 1128 if (!error && lenp)
1029 1129 *lenp += size;
1030 1130 return (error);
1031 1131 }
1032 1132
1033 1133 /*
1034 1134 * Convert to UCS-2 (really UTF-16).
1035 1135 * Use stack buffer if the string is
1036 1136 * small enough, else allocate.
1037 1137 */
1038 1138 if (size <= SMALL_CONV) {
1039 1139 cbufalloc = 0;
1040 1140 outlen = SMALL_CONV;
1041 1141 cbuf = convbuf;
1042 1142 } else {
1043 1143 outlen = size; /* in utf-16 characters */
1044 1144 cbufalloc = outlen * 2;
1045 1145 cbuf = kmem_alloc(cbufalloc, KM_SLEEP);
1046 1146 }
1047 1147
1048 1148 inlen = size;
1049 1149 error = uconv_u8tou16((uchar_t *)src, &inlen, cbuf, &outlen,
1050 1150 UCONV_OUT_LITTLE_ENDIAN | UCONV_IGNORE_NULL);
1051 1151 outlen *= 2; /* convert to bytes */
1052 1152
1053 1153 if (!error) {
1054 1154 (void) mb_put_padbyte(mbp); /* align */
1055 1155 error = mb_put_mem(mbp, (char *)cbuf, outlen, MB_MSYSTEM);
1056 1156 }
1057 1157 if (!error && lenp)
1058 1158 *lenp += outlen;
1059 1159
1060 1160 if (cbufalloc)
1061 1161 kmem_free(cbuf, cbufalloc);
1062 1162
1063 1163 return (error);
1064 1164 }
1065 1165
1066 1166 int
1067 1167 smb_put_dstring(struct mbchain *mbp, struct smb_vc *vcp, const char *src,
1068 1168 int caseopt)
1069 1169 {
1070 1170 int error, len;
1071 1171
|
↓ open down ↓ |
56 lines elided |
↑ open up ↑ |
1072 1172 /*
1073 1173 * Let smb_put_dmem put both the string
1074 1174 * and the terminating null.
1075 1175 */
1076 1176 len = strlen(src) + 1;
1077 1177 error = smb_put_dmem(mbp, vcp, src, len, caseopt, NULL);
1078 1178 if (error)
1079 1179 return (error);
1080 1180
1081 1181 return (error);
1182 +}
1183 +int
1184 +smb_smb_ntcreate(struct smb_share *ssp, struct mbchain *name_mb,
1185 + uint32_t crflag, uint32_t req_acc, uint32_t efa, uint32_t sh_acc,
1186 + uint32_t disp, uint32_t createopt, uint32_t impersonate,
1187 + struct smb_cred *scrp, smb_fh_t *fhp,
1188 + uint32_t *cr_act_p, struct smbfattr *fap)
1189 +{
1190 + int err;
1191 +
1192 + if (SSTOVC(ssp)->vc_flags & SMBV_SMB2) {
1193 + err = smb2_smb_ntcreate(ssp, name_mb, NULL, NULL,
1194 + crflag, req_acc, efa, sh_acc, disp, createopt,
1195 + impersonate, scrp, &fhp->fh_fid2, cr_act_p, fap);
1196 + } else {
1197 + err = smb1_smb_ntcreate(ssp, name_mb, crflag, req_acc,
1198 + efa, sh_acc, disp, createopt, impersonate, scrp,
1199 + &fhp->fh_fid1, cr_act_p, fap);
1200 + }
1201 + return (err);
1202 +}
1203 +
1204 +int
1205 +smb_smb_close(struct smb_share *ssp, smb_fh_t *fhp,
1206 + struct smb_cred *scrp)
1207 +{
1208 + int err;
1209 +
1210 + if (SSTOVC(ssp)->vc_flags & SMBV_SMB2) {
1211 + err = smb2_smb_close(ssp, &fhp->fh_fid2, scrp);
1212 + } else {
1213 + err = smb1_smb_close(ssp, fhp->fh_fid1, NULL, scrp);
1214 + }
1215 +
1216 + return (err);
1217 +}
1218 +
1219 +/*
1220 + * Largest size to use with LARGE_READ/LARGE_WRITE.
1221 + * Specs say up to 64k data bytes, but Windows traffic
1222 + * uses 60k... no doubt for some good reason.
1223 + * (Probably to keep 4k block alignment.)
1224 + */
1225 +uint32_t smb1_large_io_max = (60*1024);
1226 +
1227 +/*
1228 + * Common function for read/write with UIO.
1229 + * Called by netsmb smb_usr_rw,
1230 + * smbfs_readvnode, smbfs_writevnode
1231 + */
1232 +int
1233 +smb_rwuio(smb_fh_t *fhp, uio_rw_t rw,
1234 + uio_t *uiop, smb_cred_t *scred, int timo)
1235 +{
1236 + struct smb_share *ssp = FHTOSS(fhp);
1237 + struct smb_vc *vcp = SSTOVC(ssp);
1238 + ssize_t save_resid;
1239 + uint32_t len, rlen, maxlen;
1240 + int error = 0;
1241 + int (*iofun)(smb_fh_t *, uint32_t *,
1242 + uio_t *, smb_cred_t *, int);
1243 +
1244 + /* After reconnect, the fid is invalid. */
1245 + if (fhp->fh_vcgenid != ssp->ss_vcgenid)
1246 + return (ESTALE);
1247 +
1248 + if (SSTOVC(ssp)->vc_flags & SMBV_SMB2) {
1249 + if (rw == UIO_READ) {
1250 + iofun = smb2_smb_read;
1251 + maxlen = vcp->vc_sopt.sv2_maxread;
1252 + } else { /* UIO_WRITE */
1253 + iofun = smb2_smb_write;
1254 + maxlen = vcp->vc_sopt.sv2_maxwrite;
1255 + }
1256 + } else {
1257 + /*
1258 + * Using NT LM 0.12, so readx, writex.
1259 + * Make sure we can represent the offset.
1260 + */
1261 + if ((vcp->vc_sopt.sv_caps & SMB_CAP_LARGE_FILES) == 0 &&
1262 + (uiop->uio_loffset + uiop->uio_resid) > UINT32_MAX)
1263 + return (EFBIG);
1264 +
1265 + if (rw == UIO_READ) {
1266 + iofun = smb_smb_readx;
1267 + if (vcp->vc_sopt.sv_caps & SMB_CAP_LARGE_READX)
1268 + maxlen = smb1_large_io_max;
1269 + else
1270 + maxlen = vcp->vc_rxmax;
1271 + } else { /* UIO_WRITE */
1272 + iofun = smb_smb_writex;
1273 + if (vcp->vc_sopt.sv_caps & SMB_CAP_LARGE_WRITEX)
1274 + maxlen = smb1_large_io_max;
1275 + else
1276 + maxlen = vcp->vc_wxmax;
1277 + }
1278 + }
1279 +
1280 + save_resid = uiop->uio_resid;
1281 + while (uiop->uio_resid > 0) {
1282 + /* Lint: uio_resid may be 64-bits */
1283 + rlen = len = (uint32_t)min(maxlen, uiop->uio_resid);
1284 + error = (*iofun)(fhp, &rlen, uiop, scred, timo);
1285 +
1286 + /*
1287 + * Note: the iofun called uio_update, so
1288 + * not doing that here as one might expect.
1289 + *
1290 + * Quit the loop either on error, or if we
1291 + * transferred less then requested.
1292 + */
1293 + if (error || (rlen < len))
1294 + break;
1295 +
1296 + timo = 0; /* only first I/O should wait */
1297 + }
1298 + if (error && (save_resid != uiop->uio_resid)) {
1299 + /*
1300 + * Stopped on an error after having
1301 + * successfully transferred data.
1302 + * Suppress this error.
1303 + */
1304 + SMBSDEBUG("error %d suppressed\n", error);
1305 + error = 0;
1306 + }
1307 +
1308 + return (error);
1082 1309 }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX