diff options
author | bubulle <bubulle@alioth.debian.org> | 2010-04-04 16:44:16 +0000 |
---|---|---|
committer | bubulle <bubulle@alioth.debian.org> | 2010-04-04 16:44:16 +0000 |
commit | 9e2f5a6ab663f7a111832217c527508c75ddae8a (patch) | |
tree | 2e74616febbb3fb658ce2dcc5f9cff00ad4fdb4a /libcli | |
parent | b5556af8f75a4f74db404dd43ee7abafa2be6ca4 (diff) | |
download | samba-9e2f5a6ab663f7a111832217c527508c75ddae8a.tar.gz |
Merge 3.5.1 from experimental
git-svn-id: svn://svn.debian.org/svn/pkg-samba/trunk/samba@3414 fc4039ab-9d04-0410-8cac-899223bdd6b0
Diffstat (limited to 'libcli')
51 files changed, 16871 insertions, 181 deletions
diff --git a/libcli/auth/config.mk b/libcli/auth/config.mk new file mode 100644 index 0000000000..bda9850db4 --- /dev/null +++ b/libcli/auth/config.mk @@ -0,0 +1,26 @@ +[SUBSYSTEM::ntlm_check] +PRIVATE_DEPENDENCIES = LIBSAMBA-UTIL + +ntlm_check_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/auth/, ntlm_check.o) + +[SUBSYSTEM::MSRPC_PARSE] + +MSRPC_PARSE_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/auth/, msrpc_parse.o) + +[SUBSYSTEM::LIBCLI_AUTH] +PUBLIC_DEPENDENCIES = \ + MSRPC_PARSE \ + LIBSAMBA-HOSTCONFIG + +LIBCLI_AUTH_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/auth/, \ + credentials.o \ + session.o \ + smbencrypt.o \ + smbdes.o) + +PUBLIC_HEADERS += ../libcli/auth/credentials.h + +[SUBSYSTEM::COMMON_SCHANNELDB] +PRIVATE_DEPENDENCIES = LDB_WRAP + +COMMON_SCHANNELDB_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/auth/, schannel_state_ldb.o) diff --git a/libcli/auth/credentials.c b/libcli/auth/credentials.c new file mode 100644 index 0000000000..87d1866ca4 --- /dev/null +++ b/libcli/auth/credentials.c @@ -0,0 +1,455 @@ +/* + Unix SMB/CIFS implementation. + + code to manipulate domain credentials + + Copyright (C) Andrew Tridgell 1997-2003 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "system/time.h" +#include "../lib/crypto/crypto.h" +#include "libcli/auth/libcli_auth.h" + +static void netlogon_creds_step_crypt(struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *in, + struct netr_Credential *out) +{ + des_crypt112(out->data, in->data, creds->session_key, 1); +} + +/* + initialise the credentials state for old-style 64 bit session keys + + this call is made after the netr_ServerReqChallenge call +*/ +static void netlogon_creds_init_64bit(struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge, + const struct samr_Password *machine_password) +{ + uint32_t sum[2]; + uint8_t sum2[8]; + + sum[0] = IVAL(client_challenge->data, 0) + IVAL(server_challenge->data, 0); + sum[1] = IVAL(client_challenge->data, 4) + IVAL(server_challenge->data, 4); + + SIVAL(sum2,0,sum[0]); + SIVAL(sum2,4,sum[1]); + + ZERO_STRUCT(creds->session_key); + + des_crypt128(creds->session_key, sum2, machine_password->hash); +} + +/* + initialise the credentials state for ADS-style 128 bit session keys + + this call is made after the netr_ServerReqChallenge call +*/ +static void netlogon_creds_init_128bit(struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge, + const struct samr_Password *machine_password) +{ + unsigned char zero[4], tmp[16]; + HMACMD5Context ctx; + struct MD5Context md5; + + ZERO_STRUCT(creds->session_key); + + memset(zero, 0, sizeof(zero)); + + hmac_md5_init_rfc2104(machine_password->hash, sizeof(machine_password->hash), &ctx); + MD5Init(&md5); + MD5Update(&md5, zero, sizeof(zero)); + MD5Update(&md5, client_challenge->data, 8); + MD5Update(&md5, server_challenge->data, 8); + MD5Final(tmp, &md5); + hmac_md5_update(tmp, sizeof(tmp), &ctx); + hmac_md5_final(creds->session_key, &ctx); +} + +static void netlogon_creds_first_step(struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge) +{ + netlogon_creds_step_crypt(creds, client_challenge, &creds->client); + + netlogon_creds_step_crypt(creds, server_challenge, &creds->server); + + creds->seed = creds->client; +} + +/* + step the credentials to the next element in the chain, updating the + current client and server credentials and the seed +*/ +static void netlogon_creds_step(struct netlogon_creds_CredentialState *creds) +{ + struct netr_Credential time_cred; + + DEBUG(5,("\tseed %08x:%08x\n", + IVAL(creds->seed.data, 0), IVAL(creds->seed.data, 4))); + + SIVAL(time_cred.data, 0, IVAL(creds->seed.data, 0) + creds->sequence); + SIVAL(time_cred.data, 4, IVAL(creds->seed.data, 4)); + + DEBUG(5,("\tseed+time %08x:%08x\n", IVAL(time_cred.data, 0), IVAL(time_cred.data, 4))); + + netlogon_creds_step_crypt(creds, &time_cred, &creds->client); + + DEBUG(5,("\tCLIENT %08x:%08x\n", + IVAL(creds->client.data, 0), IVAL(creds->client.data, 4))); + + SIVAL(time_cred.data, 0, IVAL(creds->seed.data, 0) + creds->sequence + 1); + SIVAL(time_cred.data, 4, IVAL(creds->seed.data, 4)); + + DEBUG(5,("\tseed+time+1 %08x:%08x\n", + IVAL(time_cred.data, 0), IVAL(time_cred.data, 4))); + + netlogon_creds_step_crypt(creds, &time_cred, &creds->server); + + DEBUG(5,("\tSERVER %08x:%08x\n", + IVAL(creds->server.data, 0), IVAL(creds->server.data, 4))); + + creds->seed = time_cred; +} + + +/* + DES encrypt a 8 byte LMSessionKey buffer using the Netlogon session key +*/ +void netlogon_creds_des_encrypt_LMKey(struct netlogon_creds_CredentialState *creds, struct netr_LMSessionKey *key) +{ + struct netr_LMSessionKey tmp; + des_crypt56(tmp.key, key->key, creds->session_key, 1); + *key = tmp; +} + +/* + DES decrypt a 8 byte LMSessionKey buffer using the Netlogon session key +*/ +void netlogon_creds_des_decrypt_LMKey(struct netlogon_creds_CredentialState *creds, struct netr_LMSessionKey *key) +{ + struct netr_LMSessionKey tmp; + des_crypt56(tmp.key, key->key, creds->session_key, 0); + *key = tmp; +} + +/* + DES encrypt a 16 byte password buffer using the session key +*/ +void netlogon_creds_des_encrypt(struct netlogon_creds_CredentialState *creds, struct samr_Password *pass) +{ + struct samr_Password tmp; + des_crypt112_16(tmp.hash, pass->hash, creds->session_key, 1); + *pass = tmp; +} + +/* + DES decrypt a 16 byte password buffer using the session key +*/ +void netlogon_creds_des_decrypt(struct netlogon_creds_CredentialState *creds, struct samr_Password *pass) +{ + struct samr_Password tmp; + des_crypt112_16(tmp.hash, pass->hash, creds->session_key, 0); + *pass = tmp; +} + +/* + ARCFOUR encrypt/decrypt a password buffer using the session key +*/ +void netlogon_creds_arcfour_crypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len) +{ + DATA_BLOB session_key = data_blob(creds->session_key, 16); + + arcfour_crypt_blob(data, len, &session_key); + + data_blob_free(&session_key); +} + +/***************************************************************** +The above functions are common to the client and server interface +next comes the client specific functions +******************************************************************/ + +/* + initialise the credentials chain and return the first client + credentials +*/ + +struct netlogon_creds_CredentialState *netlogon_creds_client_init(TALLOC_CTX *mem_ctx, + const char *client_account, + const char *client_computer_name, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge, + const struct samr_Password *machine_password, + struct netr_Credential *initial_credential, + uint32_t negotiate_flags) +{ + struct netlogon_creds_CredentialState *creds = talloc(mem_ctx, struct netlogon_creds_CredentialState); + + if (!creds) { + return NULL; + } + + creds->sequence = time(NULL); + creds->negotiate_flags = negotiate_flags; + + creds->computer_name = talloc_strdup(creds, client_computer_name); + if (!creds->computer_name) { + talloc_free(creds); + return NULL; + } + creds->account_name = talloc_strdup(creds, client_account); + if (!creds->account_name) { + talloc_free(creds); + return NULL; + } + + dump_data_pw("Client chall", client_challenge->data, sizeof(client_challenge->data)); + dump_data_pw("Server chall", server_challenge->data, sizeof(server_challenge->data)); + dump_data_pw("Machine Pass", machine_password->hash, sizeof(machine_password->hash)); + + if (negotiate_flags & NETLOGON_NEG_128BIT) { + netlogon_creds_init_128bit(creds, client_challenge, server_challenge, machine_password); + } else { + netlogon_creds_init_64bit(creds, client_challenge, server_challenge, machine_password); + } + + netlogon_creds_first_step(creds, client_challenge, server_challenge); + + dump_data_pw("Session key", creds->session_key, 16); + dump_data_pw("Credential ", creds->client.data, 8); + + *initial_credential = creds->client; + return creds; +} + +/* + initialise the credentials structure with only a session key. The caller better know what they are doing! + */ + +struct netlogon_creds_CredentialState *netlogon_creds_client_init_session_key(TALLOC_CTX *mem_ctx, + const uint8_t session_key[16]) +{ + struct netlogon_creds_CredentialState *creds = talloc(mem_ctx, struct netlogon_creds_CredentialState); + + if (!creds) { + return NULL; + } + + memcpy(creds->session_key, session_key, 16); + + return creds; +} + +/* + step the credentials to the next element in the chain, updating the + current client and server credentials and the seed + + produce the next authenticator in the sequence ready to send to + the server +*/ +void netlogon_creds_client_authenticator(struct netlogon_creds_CredentialState *creds, + struct netr_Authenticator *next) +{ + creds->sequence += 2; + netlogon_creds_step(creds); + + next->cred = creds->client; + next->timestamp = creds->sequence; +} + +/* + check that a credentials reply from a server is correct +*/ +bool netlogon_creds_client_check(struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *received_credentials) +{ + if (!received_credentials || + memcmp(received_credentials->data, creds->server.data, 8) != 0) { + DEBUG(2,("credentials check failed\n")); + return false; + } + return true; +} + + +/***************************************************************** +The above functions are common to the client and server interface +next comes the server specific functions +******************************************************************/ + +/* + check that a credentials reply from a server is correct +*/ +static bool netlogon_creds_server_check_internal(const struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *received_credentials) +{ + if (memcmp(received_credentials->data, creds->client.data, 8) != 0) { + DEBUG(2,("credentials check failed\n")); + dump_data_pw("client creds", creds->client.data, 8); + dump_data_pw("calc creds", received_credentials->data, 8); + return false; + } + return true; +} + +/* + initialise the credentials chain and return the first server + credentials +*/ +struct netlogon_creds_CredentialState *netlogon_creds_server_init(TALLOC_CTX *mem_ctx, + const char *client_account, + const char *client_computer_name, + uint16_t secure_channel_type, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge, + const struct samr_Password *machine_password, + struct netr_Credential *credentials_in, + struct netr_Credential *credentials_out, + uint32_t negotiate_flags) +{ + + struct netlogon_creds_CredentialState *creds = talloc_zero(mem_ctx, struct netlogon_creds_CredentialState); + + if (!creds) { + return NULL; + } + + creds->negotiate_flags = negotiate_flags; + creds->secure_channel_type = secure_channel_type; + + creds->computer_name = talloc_strdup(creds, client_computer_name); + if (!creds->computer_name) { + talloc_free(creds); + return NULL; + } + creds->account_name = talloc_strdup(creds, client_account); + if (!creds->account_name) { + talloc_free(creds); + return NULL; + } + + if (negotiate_flags & NETLOGON_NEG_128BIT) { + netlogon_creds_init_128bit(creds, client_challenge, server_challenge, + machine_password); + } else { + netlogon_creds_init_64bit(creds, client_challenge, server_challenge, + machine_password); + } + + netlogon_creds_first_step(creds, client_challenge, server_challenge); + + /* And before we leak information about the machine account + * password, check that they got the first go right */ + if (!netlogon_creds_server_check_internal(creds, credentials_in)) { + talloc_free(creds); + return NULL; + } + + *credentials_out = creds->server; + + return creds; +} + +NTSTATUS netlogon_creds_server_step_check(struct netlogon_creds_CredentialState *creds, + struct netr_Authenticator *received_authenticator, + struct netr_Authenticator *return_authenticator) +{ + if (!received_authenticator || !return_authenticator) { + return NT_STATUS_INVALID_PARAMETER; + } + + if (!creds) { + return NT_STATUS_ACCESS_DENIED; + } + + /* TODO: this may allow the a replay attack on a non-signed + connection. Should we check that this is increasing? */ + creds->sequence = received_authenticator->timestamp; + netlogon_creds_step(creds); + if (netlogon_creds_server_check_internal(creds, &received_authenticator->cred)) { + return_authenticator->cred = creds->server; + return_authenticator->timestamp = creds->sequence; + return NT_STATUS_OK; + } else { + ZERO_STRUCTP(return_authenticator); + return NT_STATUS_ACCESS_DENIED; + } +} + +void netlogon_creds_decrypt_samlogon(struct netlogon_creds_CredentialState *creds, + uint16_t validation_level, + union netr_Validation *validation) +{ + static const char zeros[16]; + + struct netr_SamBaseInfo *base = NULL; + switch (validation_level) { + case 2: + if (validation->sam2) { + base = &validation->sam2->base; + } + break; + case 3: + if (validation->sam3) { + base = &validation->sam3->base; + } + break; + case 6: + if (validation->sam6) { + base = &validation->sam6->base; + } + break; + default: + /* If we can't find it, we can't very well decrypt it */ + return; + } + + if (!base) { + return; + } + + /* find and decyrpt the session keys, return in parameters above */ + if (validation_level == 6) { + /* they aren't encrypted! */ + } else if (creds->negotiate_flags & NETLOGON_NEG_ARCFOUR) { + if (memcmp(base->key.key, zeros, + sizeof(base->key.key)) != 0) { + netlogon_creds_arcfour_crypt(creds, + base->key.key, + sizeof(base->key.key)); + } + + if (memcmp(base->LMSessKey.key, zeros, + sizeof(base->LMSessKey.key)) != 0) { + netlogon_creds_arcfour_crypt(creds, + base->LMSessKey.key, + sizeof(base->LMSessKey.key)); + } + } else { + if (memcmp(base->LMSessKey.key, zeros, + sizeof(base->LMSessKey.key)) != 0) { + netlogon_creds_des_decrypt_LMKey(creds, + &base->LMSessKey); + } + } +} + diff --git a/libcli/auth/credentials.h b/libcli/auth/credentials.h new file mode 100644 index 0000000000..7175211fba --- /dev/null +++ b/libcli/auth/credentials.h @@ -0,0 +1,71 @@ +/* + Unix SMB/CIFS implementation. + + code to manipulate domain credentials + + Copyright (C) Andrew Tridgell 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "librpc/gen_ndr/netlogon.h" + +/* The 7 here seems to be required to get Win2k not to downgrade us + to NT4. Actually, anything other than 1ff would seem to do... */ +#define NETLOGON_NEG_AUTH2_FLAGS 0x000701ff +/* + (NETLOGON_NEG_ACCOUNT_LOCKOUT | + NETLOGON_NEG_PERSISTENT_SAMREPL | + NETLOGON_NEG_ARCFOUR | + NETLOGON_NEG_PROMOTION_COUNT | + NETLOGON_NEG_CHANGELOG_BDC | + NETLOGON_NEG_FULL_SYNC_REPL | + NETLOGON_NEG_MULTIPLE_SIDS | + NETLOGON_NEG_REDO | + NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL | + NETLOGON_NEG_DNS_DOMAIN_TRUSTS | + NETLOGON_NEG_PASSWORD_SET2 | + NETLOGON_NEG_GETDOMAININFO) +*/ +#define NETLOGON_NEG_DOMAIN_TRUST_ACCOUNT 0x2010b000 + +/* these are the flags that ADS clients use */ +/* + (NETLOGON_NEG_ACCOUNT_LOCKOUT | + NETLOGON_NEG_PERSISTENT_SAMREPL | + NETLOGON_NEG_ARCFOUR | + NETLOGON_NEG_PROMOTION_COUNT | + NETLOGON_NEG_CHANGELOG_BDC | + NETLOGON_NEG_FULL_SYNC_REPL | + NETLOGON_NEG_MULTIPLE_SIDS | + NETLOGON_NEG_REDO | + NETLOGON_NEG_PASSWORD_CHANGE_REFUSAL | + NETLOGON_NEG_SEND_PASSWORD_INFO_PDC | + NETLOGON_NEG_GENERIC_PASSTHROUGH | + NETLOGON_NEG_CONCURRENT_RPC | + NETLOGON_NEG_AVOID_ACCOUNT_DB_REPL | + NETLOGON_NEG_AVOID_SECURITYAUTH_DB_REPL | + NETLOGON_NEG_128BIT | + NETLOGON_NEG_TRANSITIVE_TRUSTS | + NETLOGON_NEG_DNS_DOMAIN_TRUSTS | + NETLOGON_NEG_PASSWORD_SET2 | + NETLOGON_NEG_GETDOMAININFO | + NETLOGON_NEG_CROSS_FOREST_TRUSTS | + NETLOGON_NEG_AUTHENTICATED_RPC_LSASS | + NETLOGON_NEG_SCHANNEL) +*/ + +#define NETLOGON_NEG_AUTH2_ADS_FLAGS (0x200fbffb | NETLOGON_NEG_ARCFOUR | NETLOGON_NEG_128BIT | NETLOGON_NEG_SCHANNEL) + + diff --git a/libcli/auth/libcli_auth.h b/libcli/auth/libcli_auth.h new file mode 100644 index 0000000000..c5c7a7b0fa --- /dev/null +++ b/libcli/auth/libcli_auth.h @@ -0,0 +1,28 @@ +/* + samba -- Unix SMB/CIFS implementation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef __LIBCLI_AUTH_H__ +#define __LIBCLI_AUTH_H__ + +#include "librpc/gen_ndr/netlogon.h" +#include "librpc/gen_ndr/wkssvc.h" +#include "librpc/gen_ndr/schannel.h" +#include "libcli/auth/credentials.h" +#include "libcli/auth/ntlm_check.h" +#include "libcli/auth/proto.h" +#include "libcli/auth/msrpc_parse.h" + +#endif /* __LIBCLI_AUTH_H__ */ diff --git a/libcli/auth/msrpc_parse.c b/libcli/auth/msrpc_parse.c new file mode 100644 index 0000000000..50e0d5c2f9 --- /dev/null +++ b/libcli/auth/msrpc_parse.c @@ -0,0 +1,377 @@ +/* + Unix SMB/CIFS implementation. + simple kerberos5/SPNEGO routines + Copyright (C) Andrew Tridgell 2001 + Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002 + Copyright (C) Andrew Bartlett 2002-2003 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "libcli/auth/msrpc_parse.h" + +/* + this is a tiny msrpc packet generator. I am only using this to + avoid tying this code to a particular varient of our rpc code. This + generator is not general enough for all our rpc needs, its just + enough for the spnego/ntlmssp code + + format specifiers are: + + U = unicode string (input is unix string) + a = address (input is char *unix_string) + (1 byte type, 1 byte length, unicode/ASCII string, all inline) + A = ASCII string (input is unix string) + B = data blob (pointer + length) + b = data blob in header (pointer + length) + D + d = word (4 bytes) + C = constant ascii string + */ +bool msrpc_gen(TALLOC_CTX *mem_ctx, + DATA_BLOB *blob, + const char *format, ...) +{ + int i, j; + bool ret; + va_list ap; + char *s; + uint8_t *b; + int head_size=0, data_size=0; + int head_ofs, data_ofs; + int *intargs; + size_t n; + + DATA_BLOB *pointers; + + pointers = talloc_array(mem_ctx, DATA_BLOB, strlen(format)); + intargs = talloc_array(pointers, int, strlen(format)); + + /* first scan the format to work out the header and body size */ + va_start(ap, format); + for (i=0; format[i]; i++) { + switch (format[i]) { + case 'U': + s = va_arg(ap, char *); + head_size += 8; + ret = push_ucs2_talloc( + pointers, + (smb_ucs2_t **)(void *)&pointers[i].data, + s, &n); + if (!ret) { + va_end(ap); + return false; + } + pointers[i].length = n; + pointers[i].length -= 2; + data_size += pointers[i].length; + break; + case 'A': + s = va_arg(ap, char *); + head_size += 8; + ret = push_ascii_talloc( + pointers, (char **)(void *)&pointers[i].data, + s, &n); + if (!ret) { + va_end(ap); + return false; + } + pointers[i].length = n; + pointers[i].length -= 1; + data_size += pointers[i].length; + break; + case 'a': + j = va_arg(ap, int); + intargs[i] = j; + s = va_arg(ap, char *); + ret = push_ucs2_talloc( + pointers, + (smb_ucs2_t **)(void *)&pointers[i].data, + s, &n); + if (!ret) { + va_end(ap); + return false; + } + pointers[i].length = n; + pointers[i].length -= 2; + data_size += pointers[i].length + 4; + break; + case 'B': + b = va_arg(ap, uint8_t *); + head_size += 8; + pointers[i].data = b; + pointers[i].length = va_arg(ap, int); + data_size += pointers[i].length; + break; + case 'b': + b = va_arg(ap, uint8_t *); + pointers[i].data = b; + pointers[i].length = va_arg(ap, int); + head_size += pointers[i].length; + break; + case 'd': + j = va_arg(ap, int); + intargs[i] = j; + head_size += 4; + break; + case 'C': + s = va_arg(ap, char *); + pointers[i].data = (uint8_t *)s; + pointers[i].length = strlen(s)+1; + head_size += pointers[i].length; + break; + } + } + va_end(ap); + + /* allocate the space, then scan the format again to fill in the values */ + *blob = data_blob_talloc(mem_ctx, NULL, head_size + data_size); + + head_ofs = 0; + data_ofs = head_size; + + va_start(ap, format); + for (i=0; format[i]; i++) { + switch (format[i]) { + case 'U': + case 'A': + case 'B': + n = pointers[i].length; + SSVAL(blob->data, head_ofs, n); head_ofs += 2; + SSVAL(blob->data, head_ofs, n); head_ofs += 2; + SIVAL(blob->data, head_ofs, data_ofs); head_ofs += 4; + if (pointers[i].data && n) /* don't follow null pointers... */ + memcpy(blob->data+data_ofs, pointers[i].data, n); + data_ofs += n; + break; + case 'a': + j = intargs[i]; + SSVAL(blob->data, data_ofs, j); data_ofs += 2; + + n = pointers[i].length; + SSVAL(blob->data, data_ofs, n); data_ofs += 2; + if (n >= 0) { + memcpy(blob->data+data_ofs, pointers[i].data, n); + } + data_ofs += n; + break; + case 'd': + j = intargs[i]; + SIVAL(blob->data, head_ofs, j); + head_ofs += 4; + break; + case 'b': + n = pointers[i].length; + memcpy(blob->data + head_ofs, pointers[i].data, n); + head_ofs += n; + break; + case 'C': + n = pointers[i].length; + memcpy(blob->data + head_ofs, pointers[i].data, n); + head_ofs += n; + break; + } + } + va_end(ap); + + talloc_free(pointers); + + return true; +} + + +/* a helpful macro to avoid running over the end of our blob */ +#define NEED_DATA(amount) \ +if ((head_ofs + amount) > blob->length) { \ + va_end(ap); \ + return false; \ +} + +/** + this is a tiny msrpc packet parser. This the the partner of msrpc_gen + + format specifiers are: + + U = unicode string (output is unix string) + A = ascii string + B = data blob + b = data blob in header + d = word (4 bytes) + C = constant ascii string + */ + +bool msrpc_parse(TALLOC_CTX *mem_ctx, + const DATA_BLOB *blob, + const char *format, ...) +{ + int i; + va_list ap; + char **ps, *s; + DATA_BLOB *b; + size_t head_ofs = 0; + uint16_t len1, len2; + uint32_t ptr; + uint32_t *v; + size_t p_len = 1024; + char *p = talloc_array(mem_ctx, char, p_len); + bool ret = true; + + va_start(ap, format); + for (i=0; format[i]; i++) { + switch (format[i]) { + case 'U': + NEED_DATA(8); + len1 = SVAL(blob->data, head_ofs); head_ofs += 2; + len2 = SVAL(blob->data, head_ofs); head_ofs += 2; + ptr = IVAL(blob->data, head_ofs); head_ofs += 4; + + ps = va_arg(ap, char **); + if (len1 == 0 && len2 == 0) { + *ps = (char *)discard_const(""); + } else { + /* make sure its in the right format - be strict */ + if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) { + ret = false; + goto cleanup; + } + if (len1 & 1) { + /* if odd length and unicode */ + ret = false; + goto cleanup; + } + if (blob->data + ptr < (uint8_t *)(uintptr_t)ptr || + blob->data + ptr < blob->data) { + ret = false; + goto cleanup; + } + + if (0 < len1) { + size_t pull_len; + if (!convert_string_talloc(mem_ctx, CH_UTF16, CH_UNIX, + blob->data + ptr, len1, + ps, &pull_len, false)) { + ret = false; + goto cleanup; + } + } else { + (*ps) = (char *)discard_const(""); + } + } + break; + case 'A': + NEED_DATA(8); + len1 = SVAL(blob->data, head_ofs); head_ofs += 2; + len2 = SVAL(blob->data, head_ofs); head_ofs += 2; + ptr = IVAL(blob->data, head_ofs); head_ofs += 4; + + ps = (char **)va_arg(ap, char **); + /* make sure its in the right format - be strict */ + if (len1 == 0 && len2 == 0) { + *ps = (char *)discard_const(""); + } else { + if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) { + ret = false; + goto cleanup; + } + + if (blob->data + ptr < (uint8_t *)(uintptr_t)ptr || + blob->data + ptr < blob->data) { + ret = false; + goto cleanup; + } + + if (0 < len1) { + size_t pull_len; + + if (!convert_string_talloc(mem_ctx, CH_DOS, CH_UNIX, + blob->data + ptr, len1, + ps, &pull_len, false)) { + ret = false; + goto cleanup; + } + } else { + (*ps) = (char *)discard_const(""); + } + } + break; + case 'B': + NEED_DATA(8); + len1 = SVAL(blob->data, head_ofs); head_ofs += 2; + len2 = SVAL(blob->data, head_ofs); head_ofs += 2; + ptr = IVAL(blob->data, head_ofs); head_ofs += 4; + + b = (DATA_BLOB *)va_arg(ap, void *); + if (len1 == 0 && len2 == 0) { + *b = data_blob_talloc(mem_ctx, NULL, 0); + } else { + /* make sure its in the right format - be strict */ + if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) { + ret = false; + goto cleanup; + } + + if (blob->data + ptr < (uint8_t *)(uintptr_t)ptr || + blob->data + ptr < blob->data) { + ret = false; + goto cleanup; + } + + *b = data_blob_talloc(mem_ctx, blob->data + ptr, len1); + } + break; + case 'b': + b = (DATA_BLOB *)va_arg(ap, void *); + len1 = va_arg(ap, uint_t); + /* make sure its in the right format - be strict */ + NEED_DATA(len1); + if (blob->data + head_ofs < (uint8_t *)head_ofs || + blob->data + head_ofs < blob->data) { + ret = false; + goto cleanup; + } + + *b = data_blob_talloc(mem_ctx, blob->data + head_ofs, len1); + head_ofs += len1; + break; + case 'd': + v = va_arg(ap, uint32_t *); + NEED_DATA(4); + *v = IVAL(blob->data, head_ofs); head_ofs += 4; + break; + case 'C': + s = va_arg(ap, char *); + + if (blob->data + head_ofs < (uint8_t *)head_ofs || + blob->data + head_ofs < blob->data || + (head_ofs + (strlen(s) + 1)) > blob->length) { + ret = false; + goto cleanup; + } + + if (memcmp(blob->data + head_ofs, s, strlen(s)+1) != 0) { + ret = false; + goto cleanup; + } + head_ofs += (strlen(s) + 1); + + break; + } + } + +cleanup: + va_end(ap); + talloc_free(p); + return ret; +} diff --git a/libcli/auth/msrpc_parse.h b/libcli/auth/msrpc_parse.h new file mode 100644 index 0000000000..507694db70 --- /dev/null +++ b/libcli/auth/msrpc_parse.h @@ -0,0 +1,37 @@ +#ifndef _LIBCLI_AUTH_MSRPC_PARSE_H__ +#define _LIBCLI_AUTH_MSRPC_PARSE_H__ + +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) PRINTF_ATTRIBUTE(a1, a2) + +/* this file contains prototypes for functions that are private + * to this subsystem or library. These functions should not be + * used outside this particular subsystem! */ + + +/* The following definitions come from /home/jeremy/src/samba/git/master/source3/../source4/../libcli/auth/msrpc_parse.c */ + +bool msrpc_gen(TALLOC_CTX *mem_ctx, + DATA_BLOB *blob, + const char *format, ...); + +/** + this is a tiny msrpc packet parser. This the the partner of msrpc_gen + + format specifiers are: + + U = unicode string (output is unix string) + A = ascii string + B = data blob + b = data blob in header + d = word (4 bytes) + C = constant ascii string + */ +bool msrpc_parse(TALLOC_CTX *mem_ctx, + const DATA_BLOB *blob, + const char *format, ...); +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) + +#endif + diff --git a/libcli/auth/ntlm_check.c b/libcli/auth/ntlm_check.c new file mode 100644 index 0000000000..978f0fe1be --- /dev/null +++ b/libcli/auth/ntlm_check.c @@ -0,0 +1,596 @@ +/* + Unix SMB/CIFS implementation. + Password and authentication handling + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2001-2004 + Copyright (C) Gerald Carter 2003 + Copyright (C) Luke Kenneth Casson Leighton 1996-2000 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "../lib/crypto/crypto.h" +#include "librpc/gen_ndr/netlogon.h" +#include "libcli/auth/libcli_auth.h" + +/**************************************************************************** + Core of smb password checking routine. +****************************************************************************/ + +static bool smb_pwd_check_ntlmv1(TALLOC_CTX *mem_ctx, + const DATA_BLOB *nt_response, + const uint8_t *part_passwd, + const DATA_BLOB *sec_blob, + DATA_BLOB *user_sess_key) +{ + /* Finish the encryption of part_passwd. */ + uint8_t p24[24]; + + if (part_passwd == NULL) { + DEBUG(10,("No password set - DISALLOWING access\n")); + /* No password set - always false ! */ + return false; + } + + if (sec_blob->length != 8) { + DEBUG(0, ("smb_pwd_check_ntlmv1: incorrect challenge size (%lu)\n", + (unsigned long)sec_blob->length)); + return false; + } + + if (nt_response->length != 24) { + DEBUG(0, ("smb_pwd_check_ntlmv1: incorrect password length (%lu)\n", + (unsigned long)nt_response->length)); + return false; + } + + SMBOWFencrypt(part_passwd, sec_blob->data, p24); + +#if DEBUG_PASSWORD + DEBUG(100,("Part password (P16) was |\n")); + dump_data(100, part_passwd, 16); + DEBUGADD(100,("Password from client was |\n")); + dump_data(100, nt_response->data, nt_response->length); + DEBUGADD(100,("Given challenge was |\n")); + dump_data(100, sec_blob->data, sec_blob->length); + DEBUGADD(100,("Value from encryption was |\n")); + dump_data(100, p24, 24); +#endif + if (memcmp(p24, nt_response->data, 24) == 0) { + if (user_sess_key != NULL) { + *user_sess_key = data_blob_talloc(mem_ctx, NULL, 16); + SMBsesskeygen_ntv1(part_passwd, user_sess_key->data); + } + return true; + } + return false; +} + +/**************************************************************************** + Core of smb password checking routine. (NTLMv2, LMv2) + Note: The same code works with both NTLMv2 and LMv2. +****************************************************************************/ + +static bool smb_pwd_check_ntlmv2(TALLOC_CTX *mem_ctx, + const DATA_BLOB *ntv2_response, + const uint8_t *part_passwd, + const DATA_BLOB *sec_blob, + const char *user, const char *domain, + bool upper_case_domain, /* should the domain be transformed into upper case? */ + DATA_BLOB *user_sess_key) +{ + /* Finish the encryption of part_passwd. */ + uint8_t kr[16]; + uint8_t value_from_encryption[16]; + DATA_BLOB client_key_data; + + if (part_passwd == NULL) { + DEBUG(10,("No password set - DISALLOWING access\n")); + /* No password set - always false */ + return false; + } + + if (sec_blob->length != 8) { + DEBUG(0, ("smb_pwd_check_ntlmv2: incorrect challenge size (%lu)\n", + (unsigned long)sec_blob->length)); + return false; + } + + if (ntv2_response->length < 24) { + /* We MUST have more than 16 bytes, or the stuff below will go + crazy. No known implementation sends less than the 24 bytes + for LMv2, let alone NTLMv2. */ + DEBUG(0, ("smb_pwd_check_ntlmv2: incorrect password length (%lu)\n", + (unsigned long)ntv2_response->length)); + return false; + } + + client_key_data = data_blob_talloc(mem_ctx, ntv2_response->data+16, ntv2_response->length-16); + /* + todo: should we be checking this for anything? We can't for LMv2, + but for NTLMv2 it is meant to contain the current time etc. + */ + + if (!ntv2_owf_gen(part_passwd, user, domain, upper_case_domain, kr)) { + return false; + } + + SMBOWFencrypt_ntv2(kr, sec_blob, &client_key_data, value_from_encryption); + +#if DEBUG_PASSWORD + DEBUG(100,("Part password (P16) was |\n")); + dump_data(100, part_passwd, 16); + DEBUGADD(100,("Password from client was |\n")); + dump_data(100, ntv2_response->data, ntv2_response->length); + DEBUGADD(100,("Variable data from client was |\n")); + dump_data(100, client_key_data.data, client_key_data.length); + DEBUGADD(100,("Given challenge was |\n")); + dump_data(100, sec_blob->data, sec_blob->length); + DEBUGADD(100,("Value from encryption was |\n")); + dump_data(100, value_from_encryption, 16); +#endif + data_blob_clear_free(&client_key_data); + if (memcmp(value_from_encryption, ntv2_response->data, 16) == 0) { + if (user_sess_key != NULL) { + *user_sess_key = data_blob_talloc(mem_ctx, NULL, 16); + SMBsesskeygen_ntv2(kr, value_from_encryption, user_sess_key->data); + } + return true; + } + return false; +} + +/**************************************************************************** + Core of smb password checking routine. (NTLMv2, LMv2) + Note: The same code works with both NTLMv2 and LMv2. +****************************************************************************/ + +static bool smb_sess_key_ntlmv2(TALLOC_CTX *mem_ctx, + const DATA_BLOB *ntv2_response, + const uint8_t *part_passwd, + const DATA_BLOB *sec_blob, + const char *user, const char *domain, + bool upper_case_domain, /* should the domain be transformed into upper case? */ + DATA_BLOB *user_sess_key) +{ + /* Finish the encryption of part_passwd. */ + uint8_t kr[16]; + uint8_t value_from_encryption[16]; + DATA_BLOB client_key_data; + + if (part_passwd == NULL) { + DEBUG(10,("No password set - DISALLOWING access\n")); + /* No password set - always false */ + return false; + } + + if (sec_blob->length != 8) { + DEBUG(0, ("smb_sess_key_ntlmv2: incorrect challenge size (%lu)\n", + (unsigned long)sec_blob->length)); + return false; + } + + if (ntv2_response->length < 24) { + /* We MUST have more than 16 bytes, or the stuff below will go + crazy. No known implementation sends less than the 24 bytes + for LMv2, let alone NTLMv2. */ + DEBUG(0, ("smb_sess_key_ntlmv2: incorrect password length (%lu)\n", + (unsigned long)ntv2_response->length)); + return false; + } + + client_key_data = data_blob_talloc(mem_ctx, ntv2_response->data+16, ntv2_response->length-16); + + if (!ntv2_owf_gen(part_passwd, user, domain, upper_case_domain, kr)) { + return false; + } + + SMBOWFencrypt_ntv2(kr, sec_blob, &client_key_data, value_from_encryption); + *user_sess_key = data_blob_talloc(mem_ctx, NULL, 16); + SMBsesskeygen_ntv2(kr, value_from_encryption, user_sess_key->data); + return true; +} + +/** + * Compare password hashes against those from the SAM + * + * @param mem_ctx talloc context + * @param client_lanman LANMAN password hash, as supplied by the client + * @param client_nt NT (MD4) password hash, as supplied by the client + * @param username internal Samba username, for log messages + * @param client_username username the client used + * @param client_domain domain name the client used (may be mapped) + * @param stored_lanman LANMAN password hash, as stored on the SAM + * @param stored_nt NT (MD4) password hash, as stored on the SAM + * @param user_sess_key User session key + * @param lm_sess_key LM session key (first 8 bytes of the LM hash) + */ + +NTSTATUS hash_password_check(TALLOC_CTX *mem_ctx, + bool lanman_auth, + const struct samr_Password *client_lanman, + const struct samr_Password *client_nt, + const char *username, + const struct samr_Password *stored_lanman, + const struct samr_Password *stored_nt) +{ + if (stored_nt == NULL) { + DEBUG(3,("ntlm_password_check: NO NT password stored for user %s.\n", + username)); + } + + if (client_nt && stored_nt) { + if (memcmp(client_nt->hash, stored_nt->hash, sizeof(stored_nt->hash)) == 0) { + return NT_STATUS_OK; + } else { + DEBUG(3,("ntlm_password_check: Interactive logon: NT password check failed for user %s\n", + username)); + return NT_STATUS_WRONG_PASSWORD; + } + + } else if (client_lanman && stored_lanman) { + if (!lanman_auth) { + DEBUG(3,("ntlm_password_check: Interactive logon: only LANMAN password supplied for user %s, and LM passwords are disabled!\n", + username)); + return NT_STATUS_WRONG_PASSWORD; + } + if (strchr_m(username, '@')) { + return NT_STATUS_NOT_FOUND; + } + + if (memcmp(client_lanman->hash, stored_lanman->hash, sizeof(stored_lanman->hash)) == 0) { + return NT_STATUS_OK; + } else { + DEBUG(3,("ntlm_password_check: Interactive logon: LANMAN password check failed for user %s\n", + username)); + return NT_STATUS_WRONG_PASSWORD; + } + } + if (strchr_m(username, '@')) { + return NT_STATUS_NOT_FOUND; + } + return NT_STATUS_WRONG_PASSWORD; +} + +/** + * Check a challenge-response password against the value of the NT or + * LM password hash. + * + * @param mem_ctx talloc context + * @param challenge 8-byte challenge. If all zero, forces plaintext comparison + * @param nt_response 'unicode' NT response to the challenge, or unicode password + * @param lm_response ASCII or LANMAN response to the challenge, or password in DOS code page + * @param username internal Samba username, for log messages + * @param client_username username the client used + * @param client_domain domain name the client used (may be mapped) + * @param stored_lanman LANMAN ASCII password from our passdb or similar + * @param stored_nt MD4 unicode password from our passdb or similar + * @param user_sess_key User session key + * @param lm_sess_key LM session key (first 8 bytes of the LM hash) + */ + +NTSTATUS ntlm_password_check(TALLOC_CTX *mem_ctx, + bool lanman_auth, + bool ntlm_auth, + uint32_t logon_parameters, + const DATA_BLOB *challenge, + const DATA_BLOB *lm_response, + const DATA_BLOB *nt_response, + const char *username, + const char *client_username, + const char *client_domain, + const struct samr_Password *stored_lanman, + const struct samr_Password *stored_nt, + DATA_BLOB *user_sess_key, + DATA_BLOB *lm_sess_key) +{ + const static uint8_t zeros[8]; + DATA_BLOB tmp_sess_key; + + if (stored_nt == NULL) { + DEBUG(3,("ntlm_password_check: NO NT password stored for user %s.\n", + username)); + } + + *lm_sess_key = data_blob(NULL, 0); + *user_sess_key = data_blob(NULL, 0); + + /* Check for cleartext netlogon. Used by Exchange 5.5. */ + if ((logon_parameters & MSV1_0_CLEARTEXT_PASSWORD_ALLOWED) + && challenge->length == sizeof(zeros) + && (memcmp(challenge->data, zeros, challenge->length) == 0 )) { + struct samr_Password client_nt; + struct samr_Password client_lm; + char *unix_pw = NULL; + bool lm_ok; + + DEBUG(4,("ntlm_password_check: checking plaintext passwords for user %s\n", + username)); + mdfour(client_nt.hash, nt_response->data, nt_response->length); + + if (lm_response->length && + (convert_string_talloc(mem_ctx, CH_DOS, CH_UNIX, + lm_response->data, lm_response->length, + (void *)&unix_pw, NULL, false))) { + if (E_deshash(unix_pw, client_lm.hash)) { + lm_ok = true; + } else { + lm_ok = false; + } + } else { + lm_ok = false; + } + return hash_password_check(mem_ctx, + lanman_auth, + lm_ok ? &client_lm : NULL, + nt_response->length ? &client_nt : NULL, + username, + stored_lanman, stored_nt); + } + + if (nt_response->length != 0 && nt_response->length < 24) { + DEBUG(2,("ntlm_password_check: invalid NT password length (%lu) for user %s\n", + (unsigned long)nt_response->length, username)); + } + + if (nt_response->length > 24 && stored_nt) { + /* We have the NT MD4 hash challenge available - see if we can + use it + */ + DEBUG(4,("ntlm_password_check: Checking NTLMv2 password with domain [%s]\n", client_domain)); + if (smb_pwd_check_ntlmv2(mem_ctx, + nt_response, + stored_nt->hash, challenge, + client_username, + client_domain, + false, + user_sess_key)) { + if (user_sess_key->length) { + *lm_sess_key = data_blob_talloc(mem_ctx, user_sess_key->data, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } + + DEBUG(4,("ntlm_password_check: Checking NTLMv2 password with uppercased version of domain [%s]\n", client_domain)); + if (smb_pwd_check_ntlmv2(mem_ctx, + nt_response, + stored_nt->hash, challenge, + client_username, + client_domain, + true, + user_sess_key)) { + if (user_sess_key->length) { + *lm_sess_key = data_blob_talloc(mem_ctx, user_sess_key->data, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } + + DEBUG(4,("ntlm_password_check: Checking NTLMv2 password without a domain\n")); + if (smb_pwd_check_ntlmv2(mem_ctx, + nt_response, + stored_nt->hash, challenge, + client_username, + "", + false, + user_sess_key)) { + if (user_sess_key->length) { + *lm_sess_key = data_blob_talloc(mem_ctx, user_sess_key->data, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } else { + DEBUG(3,("ntlm_password_check: NTLMv2 password check failed\n")); + } + } else if (nt_response->length == 24 && stored_nt) { + if (ntlm_auth) { + /* We have the NT MD4 hash challenge available - see if we can + use it (ie. does it exist in the smbpasswd file). + */ + DEBUG(4,("ntlm_password_check: Checking NT MD4 password\n")); + if (smb_pwd_check_ntlmv1(mem_ctx, + nt_response, + stored_nt->hash, challenge, + user_sess_key)) { + /* The LM session key for this response is not very secure, + so use it only if we otherwise allow LM authentication */ + + if (lanman_auth && stored_lanman) { + *lm_sess_key = data_blob_talloc(mem_ctx, stored_lanman->hash, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } else { + DEBUG(3,("ntlm_password_check: NT MD4 password check failed for user %s\n", + username)); + return NT_STATUS_WRONG_PASSWORD; + } + } else { + DEBUG(2,("ntlm_password_check: NTLMv1 passwords NOT PERMITTED for user %s\n", + username)); + /* no return, becouse we might pick up LMv2 in the LM field */ + } + } + + if (lm_response->length == 0) { + DEBUG(3,("ntlm_password_check: NEITHER LanMan nor NT password supplied for user %s\n", + username)); + return NT_STATUS_WRONG_PASSWORD; + } + + if (lm_response->length < 24) { + DEBUG(2,("ntlm_password_check: invalid LanMan password length (%lu) for user %s\n", + (unsigned long)nt_response->length, username)); + return NT_STATUS_WRONG_PASSWORD; + } + + if (!lanman_auth) { + DEBUG(3,("ntlm_password_check: Lanman passwords NOT PERMITTED for user %s\n", + username)); + } else if (!stored_lanman) { + DEBUG(3,("ntlm_password_check: NO LanMan password set for user %s (and no NT password supplied)\n", + username)); + } else if (strchr_m(username, '@')) { + DEBUG(3,("ntlm_password_check: NO LanMan password allowed for username@realm logins (user: %s)\n", + username)); + } else { + DEBUG(4,("ntlm_password_check: Checking LM password\n")); + if (smb_pwd_check_ntlmv1(mem_ctx, + lm_response, + stored_lanman->hash, challenge, + NULL)) { + /* The session key for this response is still very odd. + It not very secure, so use it only if we otherwise + allow LM authentication */ + + if (lanman_auth && stored_lanman) { + uint8_t first_8_lm_hash[16]; + memcpy(first_8_lm_hash, stored_lanman->hash, 8); + memset(first_8_lm_hash + 8, '\0', 8); + *user_sess_key = data_blob_talloc(mem_ctx, first_8_lm_hash, 16); + *lm_sess_key = data_blob_talloc(mem_ctx, stored_lanman->hash, 8); + } + return NT_STATUS_OK; + } + } + + if (!stored_nt) { + DEBUG(4,("ntlm_password_check: LM password check failed for user, no NT password %s\n",username)); + return NT_STATUS_WRONG_PASSWORD; + } + + /* This is for 'LMv2' authentication. almost NTLMv2 but limited to 24 bytes. + - related to Win9X, legacy NAS pass-though authentication + */ + DEBUG(4,("ntlm_password_check: Checking LMv2 password with domain %s\n", client_domain)); + if (smb_pwd_check_ntlmv2(mem_ctx, + lm_response, + stored_nt->hash, challenge, + client_username, + client_domain, + false, + &tmp_sess_key)) { + if (nt_response->length > 24) { + /* If NTLMv2 authentication has preceeded us + * (even if it failed), then use the session + * key from that. See the RPC-SAMLOGON + * torture test */ + smb_sess_key_ntlmv2(mem_ctx, + nt_response, + stored_nt->hash, challenge, + client_username, + client_domain, + false, + user_sess_key); + } else { + /* Otherwise, use the LMv2 session key */ + *user_sess_key = tmp_sess_key; + } + if (user_sess_key->length) { + *lm_sess_key = data_blob_talloc(mem_ctx, user_sess_key->data, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } + + DEBUG(4,("ntlm_password_check: Checking LMv2 password with upper-cased version of domain %s\n", client_domain)); + if (smb_pwd_check_ntlmv2(mem_ctx, + lm_response, + stored_nt->hash, challenge, + client_username, + client_domain, + true, + &tmp_sess_key)) { + if (nt_response->length > 24) { + /* If NTLMv2 authentication has preceeded us + * (even if it failed), then use the session + * key from that. See the RPC-SAMLOGON + * torture test */ + smb_sess_key_ntlmv2(mem_ctx, + nt_response, + stored_nt->hash, challenge, + client_username, + client_domain, + true, + user_sess_key); + } else { + /* Otherwise, use the LMv2 session key */ + *user_sess_key = tmp_sess_key; + } + if (user_sess_key->length) { + *lm_sess_key = data_blob_talloc(mem_ctx, user_sess_key->data, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } + + DEBUG(4,("ntlm_password_check: Checking LMv2 password without a domain\n")); + if (smb_pwd_check_ntlmv2(mem_ctx, + lm_response, + stored_nt->hash, challenge, + client_username, + "", + false, + &tmp_sess_key)) { + if (nt_response->length > 24) { + /* If NTLMv2 authentication has preceeded us + * (even if it failed), then use the session + * key from that. See the RPC-SAMLOGON + * torture test */ + smb_sess_key_ntlmv2(mem_ctx, + nt_response, + stored_nt->hash, challenge, + client_username, + "", + false, + user_sess_key); + } else { + /* Otherwise, use the LMv2 session key */ + *user_sess_key = tmp_sess_key; + } + if (user_sess_key->length) { + *lm_sess_key = data_blob_talloc(mem_ctx, user_sess_key->data, MIN(8, user_sess_key->length)); + } + return NT_STATUS_OK; + } + + /* Apparently NT accepts NT responses in the LM field + - I think this is related to Win9X pass-though authentication + */ + DEBUG(4,("ntlm_password_check: Checking NT MD4 password in LM field\n")); + if (ntlm_auth) { + if (smb_pwd_check_ntlmv1(mem_ctx, + lm_response, + stored_nt->hash, challenge, + NULL)) { + /* The session key for this response is still very odd. + It not very secure, so use it only if we otherwise + allow LM authentication */ + + if (lanman_auth && stored_lanman) { + uint8_t first_8_lm_hash[16]; + memcpy(first_8_lm_hash, stored_lanman->hash, 8); + memset(first_8_lm_hash + 8, '\0', 8); + *user_sess_key = data_blob_talloc(mem_ctx, first_8_lm_hash, 16); + *lm_sess_key = data_blob_talloc(mem_ctx, stored_lanman->hash, 8); + } + return NT_STATUS_OK; + } + DEBUG(3,("ntlm_password_check: LM password, NT MD4 password in LM field and LMv2 failed for user %s\n",username)); + } else { + DEBUG(3,("ntlm_password_check: LM password and LMv2 failed for user %s, and NT MD4 password in LM field not permitted\n",username)); + } + + /* Try and match error codes */ + if (strchr_m(username, '@')) { + return NT_STATUS_NOT_FOUND; + } + return NT_STATUS_WRONG_PASSWORD; +} + diff --git a/libcli/auth/ntlm_check.h b/libcli/auth/ntlm_check.h new file mode 100644 index 0000000000..df11f7d7a2 --- /dev/null +++ b/libcli/auth/ntlm_check.h @@ -0,0 +1,76 @@ +/* + Unix SMB/CIFS implementation. + Password and authentication handling + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2001-2004 + Copyright (C) Gerald Carter 2003 + Copyright (C) Luke Kenneth Casson Leighton 1996-2000 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + + +/** + * Compare password hashes against those from the SAM + * + * @param mem_ctx talloc context + * @param client_lanman LANMAN password hash, as supplied by the client + * @param client_nt NT (MD4) password hash, as supplied by the client + * @param username internal Samba username, for log messages + * @param client_username username the client used + * @param client_domain domain name the client used (may be mapped) + * @param stored_lanman LANMAN password hash, as stored on the SAM + * @param stored_nt NT (MD4) password hash, as stored on the SAM + * @param user_sess_key User session key + * @param lm_sess_key LM session key (first 8 bytes of the LM hash) + */ + +NTSTATUS hash_password_check(TALLOC_CTX *mem_ctx, + bool lanman_auth, + const struct samr_Password *client_lanman, + const struct samr_Password *client_nt, + const char *username, + const struct samr_Password *stored_lanman, + const struct samr_Password *stored_nt); + +/** + * Check a challenge-response password against the value of the NT or + * LM password hash. + * + * @param mem_ctx talloc context + * @param challenge 8-byte challenge. If all zero, forces plaintext comparison + * @param nt_response 'unicode' NT response to the challenge, or unicode password + * @param lm_response ASCII or LANMAN response to the challenge, or password in DOS code page + * @param username internal Samba username, for log messages + * @param client_username username the client used + * @param client_domain domain name the client used (may be mapped) + * @param stored_lanman LANMAN ASCII password from our passdb or similar + * @param stored_nt MD4 unicode password from our passdb or similar + * @param user_sess_key User session key + * @param lm_sess_key LM session key (first 8 bytes of the LM hash) + */ + +NTSTATUS ntlm_password_check(TALLOC_CTX *mem_ctx, + bool lanman_auth, + bool ntlm_auth, + uint32_t logon_parameters, + const DATA_BLOB *challenge, + const DATA_BLOB *lm_response, + const DATA_BLOB *nt_response, + const char *username, + const char *client_username, + const char *client_domain, + const struct samr_Password *stored_lanman, + const struct samr_Password *stored_nt, + DATA_BLOB *user_sess_key, + DATA_BLOB *lm_sess_key); diff --git a/libcli/auth/proto.h b/libcli/auth/proto.h new file mode 100644 index 0000000000..e09cdee518 --- /dev/null +++ b/libcli/auth/proto.h @@ -0,0 +1,201 @@ +#ifndef _LIBCLI_AUTH_PROTO_H__ +#define _LIBCLI_AUTH_PROTO_H__ + +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) PRINTF_ATTRIBUTE(a1, a2) + +/* this file contains prototypes for functions that are private + * to this subsystem or library. These functions should not be + * used outside this particular subsystem! */ + + +/* The following definitions come from /home/jeremy/src/samba/git/master/source3/../source4/../libcli/auth/credentials.c */ + +void netlogon_creds_des_encrypt_LMKey(struct netlogon_creds_CredentialState *creds, struct netr_LMSessionKey *key); +void netlogon_creds_des_decrypt_LMKey(struct netlogon_creds_CredentialState *creds, struct netr_LMSessionKey *key); +void netlogon_creds_des_encrypt(struct netlogon_creds_CredentialState *creds, struct samr_Password *pass); +void netlogon_creds_des_decrypt(struct netlogon_creds_CredentialState *creds, struct samr_Password *pass); +void netlogon_creds_arcfour_crypt(struct netlogon_creds_CredentialState *creds, uint8_t *data, size_t len); + +/***************************************************************** +The above functions are common to the client and server interface +next comes the client specific functions +******************************************************************/ +struct netlogon_creds_CredentialState *netlogon_creds_client_init(TALLOC_CTX *mem_ctx, + const char *client_account, + const char *client_computer_name, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge, + const struct samr_Password *machine_password, + struct netr_Credential *initial_credential, + uint32_t negotiate_flags); +struct netlogon_creds_CredentialState *netlogon_creds_client_init_session_key(TALLOC_CTX *mem_ctx, + const uint8_t session_key[16]); +void netlogon_creds_client_authenticator(struct netlogon_creds_CredentialState *creds, + struct netr_Authenticator *next); +bool netlogon_creds_client_check(struct netlogon_creds_CredentialState *creds, + const struct netr_Credential *received_credentials); + +/***************************************************************** +The above functions are common to the client and server interface +next comes the server specific functions +******************************************************************/ +struct netlogon_creds_CredentialState *netlogon_creds_server_init(TALLOC_CTX *mem_ctx, + const char *client_account, + const char *client_computer_name, + uint16_t secure_channel_type, + const struct netr_Credential *client_challenge, + const struct netr_Credential *server_challenge, + const struct samr_Password *machine_password, + struct netr_Credential *credentials_in, + struct netr_Credential *credentials_out, + uint32_t negotiate_flags); +NTSTATUS netlogon_creds_server_step_check(struct netlogon_creds_CredentialState *creds, + struct netr_Authenticator *received_authenticator, + struct netr_Authenticator *return_authenticator) ; +void netlogon_creds_decrypt_samlogon(struct netlogon_creds_CredentialState *creds, + uint16_t validation_level, + union netr_Validation *validation) ; + +/* The following definitions come from /home/jeremy/src/samba/git/master/source3/../source4/../libcli/auth/session.c */ + +void sess_crypt_blob(DATA_BLOB *out, const DATA_BLOB *in, const DATA_BLOB *session_key, + bool forward); +DATA_BLOB sess_encrypt_string(const char *str, const DATA_BLOB *session_key); +char *sess_decrypt_string(TALLOC_CTX *mem_ctx, + DATA_BLOB *blob, const DATA_BLOB *session_key); +DATA_BLOB sess_encrypt_blob(TALLOC_CTX *mem_ctx, DATA_BLOB *blob_in, const DATA_BLOB *session_key); +NTSTATUS sess_decrypt_blob(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const DATA_BLOB *session_key, + DATA_BLOB *ret); + +/* The following definitions come from /home/jeremy/src/samba/git/master/source3/../source4/../libcli/auth/smbencrypt.c */ + +void SMBencrypt_hash(const uint8_t lm_hash[16], const uint8_t *c8, uint8_t p24[24]); +bool SMBencrypt(const char *passwd, const uint8_t *c8, uint8_t p24[24]); + +/** + * Creates the MD4 Hash of the users password in NT UNICODE. + * @param passwd password in 'unix' charset. + * @param p16 return password hashed with md4, caller allocated 16 byte buffer + */ +bool E_md4hash(const char *passwd, uint8_t p16[16]); + +/** + * Creates the MD5 Hash of a combination of 16 byte salt and 16 byte NT hash. + * @param 16 byte salt. + * @param 16 byte NT hash. + * @param 16 byte return hashed with md5, caller allocated 16 byte buffer + */ +void E_md5hash(const uint8_t salt[16], const uint8_t nthash[16], uint8_t hash_out[16]); + +/** + * Creates the DES forward-only Hash of the users password in DOS ASCII charset + * @param passwd password in 'unix' charset. + * @param p16 return password hashed with DES, caller allocated 16 byte buffer + * @return false if password was > 14 characters, and therefore may be incorrect, otherwise true + * @note p16 is filled in regardless + */ +bool E_deshash(const char *passwd, uint8_t p16[16]); + +/** + * Creates the MD4 and DES (LM) Hash of the users password. + * MD4 is of the NT Unicode, DES is of the DOS UPPERCASE password. + * @param passwd password in 'unix' charset. + * @param nt_p16 return password hashed with md4, caller allocated 16 byte buffer + * @param p16 return password hashed with des, caller allocated 16 byte buffer + */ +void nt_lm_owf_gen(const char *pwd, uint8_t nt_p16[16], uint8_t p16[16]); +bool ntv2_owf_gen(const uint8_t owf[16], + const char *user_in, const char *domain_in, + bool upper_case_domain, /* Transform the domain into UPPER case */ + uint8_t kr_buf[16]); +void SMBOWFencrypt(const uint8_t passwd[16], const uint8_t *c8, uint8_t p24[24]); +void SMBNTencrypt_hash(const uint8_t nt_hash[16], uint8_t *c8, uint8_t *p24); +void SMBNTencrypt(const char *passwd, uint8_t *c8, uint8_t *p24); +void SMBOWFencrypt_ntv2(const uint8_t kr[16], + const DATA_BLOB *srv_chal, + const DATA_BLOB *smbcli_chal, + uint8_t resp_buf[16]); +void SMBsesskeygen_ntv2(const uint8_t kr[16], + const uint8_t * nt_resp, uint8_t sess_key[16]); +void SMBsesskeygen_ntv1(const uint8_t kr[16], uint8_t sess_key[16]); +void SMBsesskeygen_lm_sess_key(const uint8_t lm_hash[16], + const uint8_t lm_resp[24], /* only uses 8 */ + uint8_t sess_key[16]); +DATA_BLOB NTLMv2_generate_names_blob(TALLOC_CTX *mem_ctx, + const char *hostname, + const char *domain); +bool SMBNTLMv2encrypt_hash(TALLOC_CTX *mem_ctx, + const char *user, const char *domain, const uint8_t nt_hash[16], + const DATA_BLOB *server_chal, + const DATA_BLOB *names_blob, + DATA_BLOB *lm_response, DATA_BLOB *nt_response, + DATA_BLOB *lm_session_key, DATA_BLOB *user_session_key) ; +bool SMBNTLMv2encrypt(TALLOC_CTX *mem_ctx, + const char *user, const char *domain, + const char *password, + const DATA_BLOB *server_chal, + const DATA_BLOB *names_blob, + DATA_BLOB *lm_response, DATA_BLOB *nt_response, + DATA_BLOB *lm_session_key, DATA_BLOB *user_session_key) ; + +/*********************************************************** + encode a password buffer with a unicode password. The buffer + is filled with random data to make it harder to attack. +************************************************************/ +bool encode_pw_buffer(uint8_t buffer[516], const char *password, int string_flags); + +/*********************************************************** + decode a password buffer + *new_pw_len is the length in bytes of the possibly mulitbyte + returned password including termination. +************************************************************/ +bool decode_pw_buffer(TALLOC_CTX *ctx, + uint8_t in_buffer[516], + char **pp_new_pwrd, + size_t *new_pw_len, + charset_t string_charset); + +/*********************************************************** + Decode an arc4 encrypted password change buffer. +************************************************************/ +void encode_or_decode_arc4_passwd_buffer(unsigned char pw_buf[532], const DATA_BLOB *psession_key); + +/*********************************************************** + encode a password buffer with an already unicode password. The + rest of the buffer is filled with random data to make it harder to attack. +************************************************************/ +bool set_pw_in_buffer(uint8_t buffer[516], DATA_BLOB *password); + +/*********************************************************** + decode a password buffer + *new_pw_size is the length in bytes of the extracted unicode password +************************************************************/ +bool extract_pw_from_buffer(TALLOC_CTX *mem_ctx, + uint8_t in_buffer[516], DATA_BLOB *new_pass); +void encode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx, + const char *pwd, + DATA_BLOB *session_key, + struct wkssvc_PasswordBuffer **pwd_buf); +WERROR decode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx, + struct wkssvc_PasswordBuffer *pwd_buf, + DATA_BLOB *session_key, + char **pwd); + +/* The following definitions come from /home/jeremy/src/samba/git/master/source3/../source4/../libcli/auth/smbdes.c */ + +void des_crypt56(uint8_t out[8], const uint8_t in[8], const uint8_t key[7], int forw); +void E_P16(const uint8_t *p14,uint8_t *p16); +void E_P24(const uint8_t *p21, const uint8_t *c8, uint8_t *p24); +void D_P16(const uint8_t *p14, const uint8_t *in, uint8_t *out); +void E_old_pw_hash( uint8_t *p14, const uint8_t *in, uint8_t *out); +void des_crypt128(uint8_t out[8], const uint8_t in[8], const uint8_t key[16]); +void des_crypt64(uint8_t out[8], const uint8_t in[8], const uint8_t key[8], int forw); +void des_crypt112(uint8_t out[8], const uint8_t in[8], const uint8_t key[14], int forw); +void des_crypt112_16(uint8_t out[16], uint8_t in[16], const uint8_t key[14], int forw); +void sam_rid_crypt(uint_t rid, const uint8_t *in, uint8_t *out, int forw); +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) + +#endif + diff --git a/libcli/auth/schannel.h b/libcli/auth/schannel.h new file mode 100644 index 0000000000..bfccd950b6 --- /dev/null +++ b/libcli/auth/schannel.h @@ -0,0 +1,38 @@ +/* + Unix SMB/CIFS implementation. + + dcerpc schannel operations + + Copyright (C) Andrew Tridgell 2004 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2004-2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "libcli/auth/libcli_auth.h" +#include "libcli/auth/schannel_state.h" + +enum schannel_position { + SCHANNEL_STATE_START = 0, + SCHANNEL_STATE_UPDATE_1 +}; + +struct schannel_state { + enum schannel_position state; + uint32_t seq_num; + bool initiator; + struct netlogon_creds_CredentialState *creds; +}; + +#include "libcli/auth/schannel_proto.h" diff --git a/libcli/auth/schannel_proto.h b/libcli/auth/schannel_proto.h new file mode 100644 index 0000000000..eee7199576 --- /dev/null +++ b/libcli/auth/schannel_proto.h @@ -0,0 +1,37 @@ +/* + Unix SMB/CIFS implementation. + + dcerpc schannel operations + + Copyright (C) Andrew Tridgell 2004 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2004-2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _LIBCLI_AUTH_SCHANNEL_PROTO_H__ +#define _LIBCLI_AUTH_SCHANNEL_PROTO_H__ + +NTSTATUS netsec_incoming_packet(struct schannel_state *state, + TALLOC_CTX *mem_ctx, + bool do_unseal, + uint8_t *data, size_t length, + const DATA_BLOB *sig); +NTSTATUS netsec_outgoing_packet(struct schannel_state *state, + TALLOC_CTX *mem_ctx, + bool do_seal, + uint8_t *data, size_t length, + DATA_BLOB *sig); + +#endif diff --git a/libcli/auth/schannel_sign.c b/libcli/auth/schannel_sign.c new file mode 100644 index 0000000000..0672f67197 --- /dev/null +++ b/libcli/auth/schannel_sign.c @@ -0,0 +1,268 @@ +/* + Unix SMB/CIFS implementation. + + schannel library code + + Copyright (C) Andrew Tridgell 2004 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "../libcli/auth/schannel.h" +#include "../lib/crypto/crypto.h" + +static void netsec_offset_and_sizes(struct schannel_state *state, + bool do_seal, + uint32_t *_min_sig_size, + uint32_t *_used_sig_size, + uint32_t *_checksum_length, + uint32_t *_confounder_ofs) +{ + uint32_t min_sig_size = 24; + uint32_t used_sig_size = 32; + uint32_t checksum_length = 8; + uint32_t confounder_ofs = 24; + + if (do_seal) { + min_sig_size += 8; + } + + if (_min_sig_size) { + *_min_sig_size = min_sig_size; + } + + if (_used_sig_size) { + *_used_sig_size = used_sig_size; + } + + if (_checksum_length) { + *_checksum_length = checksum_length; + } + + if (_confounder_ofs) { + *_confounder_ofs = confounder_ofs; + } +} + +/******************************************************************* + Encode or Decode the sequence number (which is symmetric) + ********************************************************************/ +static void netsec_do_seq_num(struct schannel_state *state, + const uint8_t *checksum, + uint32_t checksum_length, + uint8_t seq_num[8]) +{ + static const uint8_t zeros[4]; + uint8_t sequence_key[16]; + uint8_t digest1[16]; + + hmac_md5(state->creds->session_key, zeros, sizeof(zeros), digest1); + hmac_md5(digest1, checksum, checksum_length, sequence_key); + arcfour_crypt(seq_num, sequence_key, 8); + + state->seq_num++; +} + +static void netsec_do_seal(struct schannel_state *state, + const uint8_t seq_num[8], + uint8_t confounder[8], + uint8_t *data, uint32_t length) +{ + uint8_t sealing_key[16]; + static const uint8_t zeros[4]; + uint8_t digest2[16]; + uint8_t sess_kf0[16]; + int i; + + for (i = 0; i < 16; i++) { + sess_kf0[i] = state->creds->session_key[i] ^ 0xf0; + } + + hmac_md5(sess_kf0, zeros, 4, digest2); + hmac_md5(digest2, seq_num, 8, sealing_key); + + arcfour_crypt(confounder, sealing_key, 8); + arcfour_crypt(data, sealing_key, length); +} + +/******************************************************************* + Create a digest over the entire packet (including the data), and + MD5 it with the session key. + ********************************************************************/ +static void netsec_do_sign(struct schannel_state *state, + const uint8_t *confounder, + const uint8_t *data, size_t data_len, + uint8_t header[8], + uint8_t *checksum) +{ + uint8_t packet_digest[16]; + static const uint8_t zeros[4]; + struct MD5Context ctx; + + MD5Init(&ctx); + MD5Update(&ctx, zeros, 4); + if (confounder) { + SSVAL(header, 0, NL_SIGN_HMAC_MD5); + SSVAL(header, 2, NL_SEAL_RC4); + SSVAL(header, 4, 0xFFFF); + SSVAL(header, 6, 0x0000); + + MD5Update(&ctx, header, 8); + MD5Update(&ctx, confounder, 8); + } else { + SSVAL(header, 0, NL_SIGN_HMAC_MD5); + SSVAL(header, 2, NL_SEAL_NONE); + SSVAL(header, 4, 0xFFFF); + SSVAL(header, 6, 0x0000); + + MD5Update(&ctx, header, 8); + } + MD5Update(&ctx, data, data_len); + MD5Final(packet_digest, &ctx); + + hmac_md5(state->creds->session_key, + packet_digest, sizeof(packet_digest), + checksum); +} + +NTSTATUS netsec_incoming_packet(struct schannel_state *state, + TALLOC_CTX *mem_ctx, + bool do_unseal, + uint8_t *data, size_t length, + const DATA_BLOB *sig) +{ + uint32_t min_sig_size = 0; + uint8_t header[8]; + uint8_t checksum[32]; + uint32_t checksum_length = sizeof(checksum_length); + uint8_t _confounder[8]; + uint8_t *confounder = NULL; + uint32_t confounder_ofs = 0; + uint8_t seq_num[8]; + int ret; + + netsec_offset_and_sizes(state, + do_unseal, + &min_sig_size, + NULL, + &checksum_length, + &confounder_ofs); + + if (sig->length < min_sig_size) { + return NT_STATUS_ACCESS_DENIED; + } + + if (do_unseal) { + confounder = _confounder; + memcpy(confounder, sig->data+confounder_ofs, 8); + } else { + confounder = NULL; + } + + RSIVAL(seq_num, 0, state->seq_num); + SIVAL(seq_num, 4, state->initiator?0:0x80); + + if (do_unseal) { + netsec_do_seal(state, seq_num, + confounder, + data, length); + } + + netsec_do_sign(state, confounder, + data, length, + header, checksum); + + ret = memcmp(checksum, sig->data+16, checksum_length); + if (ret != 0) { + dump_data_pw("calc digest:", checksum, checksum_length); + dump_data_pw("wire digest:", sig->data+16, checksum_length); + return NT_STATUS_ACCESS_DENIED; + } + + netsec_do_seq_num(state, checksum, checksum_length, seq_num); + + ret = memcmp(seq_num, sig->data+8, 8); + if (ret != 0) { + dump_data_pw("calc seq num:", seq_num, 8); + dump_data_pw("wire seq num:", sig->data+8, 8); + return NT_STATUS_ACCESS_DENIED; + } + + return NT_STATUS_OK; +} + +NTSTATUS netsec_outgoing_packet(struct schannel_state *state, + TALLOC_CTX *mem_ctx, + bool do_seal, + uint8_t *data, size_t length, + DATA_BLOB *sig) +{ + uint32_t min_sig_size = 0; + uint32_t used_sig_size = 0; + uint8_t header[8]; + uint8_t checksum[32]; + uint32_t checksum_length = sizeof(checksum_length); + uint8_t _confounder[8]; + uint8_t *confounder = NULL; + uint32_t confounder_ofs = 0; + uint8_t seq_num[8]; + + netsec_offset_and_sizes(state, + do_seal, + &min_sig_size, + &used_sig_size, + &checksum_length, + &confounder_ofs); + + RSIVAL(seq_num, 0, state->seq_num); + SIVAL(seq_num, 4, state->initiator?0x80:0); + + if (do_seal) { + confounder = _confounder; + generate_random_buffer(confounder, 8); + } else { + confounder = NULL; + } + + netsec_do_sign(state, confounder, + data, length, + header, checksum); + + if (do_seal) { + netsec_do_seal(state, seq_num, + confounder, + data, length); + } + + netsec_do_seq_num(state, checksum, checksum_length, seq_num); + + (*sig) = data_blob_talloc_zero(mem_ctx, used_sig_size); + + memcpy(sig->data, header, 8); + memcpy(sig->data+8, seq_num, 8); + memcpy(sig->data+16, checksum, checksum_length); + + if (confounder) { + memcpy(sig->data+confounder_ofs, confounder, 8); + } + + dump_data_pw("signature:", sig->data+ 0, 8); + dump_data_pw("seq_num :", sig->data+ 8, 8); + dump_data_pw("digest :", sig->data+16, checksum_length); + dump_data_pw("confound :", sig->data+confounder_ofs, 8); + + return NT_STATUS_OK; +} diff --git a/libcli/auth/schannel_state.h b/libcli/auth/schannel_state.h new file mode 100644 index 0000000000..e60f4d9891 --- /dev/null +++ b/libcli/auth/schannel_state.h @@ -0,0 +1,25 @@ +/* + Unix SMB/CIFS implementation. + + module to store/fetch session keys for the schannel server + + Copyright (C) Andrew Tridgell 2004 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2006-2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +struct ldb_context; +struct tdb_context; +#include "libcli/auth/schannel_state_proto.h" diff --git a/libcli/auth/schannel_state_ldb.c b/libcli/auth/schannel_state_ldb.c new file mode 100644 index 0000000000..69d6bad22c --- /dev/null +++ b/libcli/auth/schannel_state_ldb.c @@ -0,0 +1,322 @@ +/* + Unix SMB/CIFS implementation. + + module to store/fetch session keys for the schannel server + + Copyright (C) Andrew Tridgell 2004 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2006-2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "lib/ldb/include/ldb.h" +#include "librpc/gen_ndr/ndr_security.h" +#include "ldb_wrap.h" +#include "../lib/util/util_ldb.h" +#include "libcli/auth/libcli_auth.h" +#include "auth/auth.h" +#include "param/param.h" +#include "auth/gensec/schannel_state.h" +#include "../libcli/auth/schannel_state_proto.h" + +static struct ldb_val *schannel_dom_sid_ldb_val(TALLOC_CTX *mem_ctx, + struct dom_sid *sid) +{ + enum ndr_err_code ndr_err; + struct ldb_val *v; + + v = talloc(mem_ctx, struct ldb_val); + if (!v) return NULL; + + ndr_err = ndr_push_struct_blob(v, mem_ctx, NULL, sid, + (ndr_push_flags_fn_t)ndr_push_dom_sid); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + talloc_free(v); + return NULL; + } + + return v; +} + +static struct dom_sid *schannel_ldb_val_dom_sid(TALLOC_CTX *mem_ctx, + const struct ldb_val *v) +{ + enum ndr_err_code ndr_err; + struct dom_sid *sid; + + sid = talloc(mem_ctx, struct dom_sid); + if (!sid) return NULL; + + ndr_err = ndr_pull_struct_blob(v, sid, NULL, sid, + (ndr_pull_flags_fn_t)ndr_pull_dom_sid); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + talloc_free(sid); + return NULL; + } + return sid; +} + + +/* + remember an established session key for a netr server authentication + use a simple ldb structure +*/ +NTSTATUS schannel_store_session_key_ldb(struct ldb_context *ldb, + TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds) +{ + struct ldb_message *msg; + struct ldb_val val, seed, client_state, server_state; + struct ldb_val *sid_val; + char *f; + char *sct; + int ret; + + f = talloc_asprintf(mem_ctx, "%u", (unsigned int)creds->negotiate_flags); + + if (f == NULL) { + return NT_STATUS_NO_MEMORY; + } + + sct = talloc_asprintf(mem_ctx, "%u", (unsigned int)creds->secure_channel_type); + + if (sct == NULL) { + return NT_STATUS_NO_MEMORY; + } + + msg = ldb_msg_new(ldb); + if (msg == NULL) { + return NT_STATUS_NO_MEMORY; + } + + msg->dn = ldb_dn_new_fmt(msg, ldb, "computerName=%s", creds->computer_name); + if ( ! msg->dn) { + return NT_STATUS_NO_MEMORY; + } + + sid_val = schannel_dom_sid_ldb_val(msg, creds->sid); + if (sid_val == NULL) { + return NT_STATUS_NO_MEMORY; + } + + val.data = creds->session_key; + val.length = sizeof(creds->session_key); + + seed.data = creds->seed.data; + seed.length = sizeof(creds->seed.data); + + client_state.data = creds->client.data; + client_state.length = sizeof(creds->client.data); + server_state.data = creds->server.data; + server_state.length = sizeof(creds->server.data); + + ldb_msg_add_string(msg, "objectClass", "schannelState"); + ldb_msg_add_value(msg, "sessionKey", &val, NULL); + ldb_msg_add_value(msg, "seed", &seed, NULL); + ldb_msg_add_value(msg, "clientState", &client_state, NULL); + ldb_msg_add_value(msg, "serverState", &server_state, NULL); + ldb_msg_add_string(msg, "negotiateFlags", f); + ldb_msg_add_string(msg, "secureChannelType", sct); + ldb_msg_add_string(msg, "accountName", creds->account_name); + ldb_msg_add_string(msg, "computerName", creds->computer_name); + ldb_msg_add_value(msg, "objectSid", sid_val, NULL); + + ret = ldb_add(ldb, msg); + if (ret == LDB_ERR_ENTRY_ALREADY_EXISTS) { + int i; + /* from samdb_replace() */ + /* mark all the message elements as LDB_FLAG_MOD_REPLACE */ + for (i=0;i<msg->num_elements;i++) { + msg->elements[i].flags = LDB_FLAG_MOD_REPLACE; + } + + ret = ldb_modify(ldb, msg); + } + + /* We don't need a transaction here, as we either add or + * modify records, never delete them, so it must exist */ + + if (ret != LDB_SUCCESS) { + DEBUG(0,("Unable to add %s to session key db - %s\n", + ldb_dn_get_linearized(msg->dn), ldb_errstring(ldb))); + return NT_STATUS_INTERNAL_DB_CORRUPTION; + } + + return NT_STATUS_OK; +} + +/* + read back a credentials back for a computer +*/ +NTSTATUS schannel_fetch_session_key_ldb(struct ldb_context *ldb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + struct netlogon_creds_CredentialState **creds) +{ + struct ldb_result *res; + int ret; + const struct ldb_val *val; + + *creds = talloc_zero(mem_ctx, struct netlogon_creds_CredentialState); + if (!*creds) { + return NT_STATUS_NO_MEMORY; + } + + ret = ldb_search(ldb, mem_ctx, &res, + NULL, LDB_SCOPE_SUBTREE, NULL, + "(computerName=%s)", computer_name); + if (ret != LDB_SUCCESS) { + DEBUG(3,("schannel: Failed to find a record for client %s: %s\n", computer_name, ldb_errstring(ldb))); + return NT_STATUS_INVALID_HANDLE; + } + if (res->count != 1) { + DEBUG(3,("schannel: Failed to find a record for client: %s (found %d records)\n", computer_name, res->count)); + talloc_free(res); + return NT_STATUS_INVALID_HANDLE; + } + + val = ldb_msg_find_ldb_val(res->msgs[0], "sessionKey"); + if (val == NULL || val->length != 16) { + DEBUG(1,("schannel: record in schannel DB must contain a sessionKey of length 16, when searching for client: %s\n", computer_name)); + talloc_free(res); + return NT_STATUS_INTERNAL_ERROR; + } + + memcpy((*creds)->session_key, val->data, 16); + + val = ldb_msg_find_ldb_val(res->msgs[0], "seed"); + if (val == NULL || val->length != 8) { + DEBUG(1,("schannel: record in schannel DB must contain a vaid seed of length 8, when searching for client: %s\n", computer_name)); + talloc_free(res); + return NT_STATUS_INTERNAL_ERROR; + } + + memcpy((*creds)->seed.data, val->data, 8); + + val = ldb_msg_find_ldb_val(res->msgs[0], "clientState"); + if (val == NULL || val->length != 8) { + DEBUG(1,("schannel: record in schannel DB must contain a vaid clientState of length 8, when searching for client: %s\n", computer_name)); + talloc_free(res); + return NT_STATUS_INTERNAL_ERROR; + } + memcpy((*creds)->client.data, val->data, 8); + + val = ldb_msg_find_ldb_val(res->msgs[0], "serverState"); + if (val == NULL || val->length != 8) { + DEBUG(1,("schannel: record in schannel DB must contain a vaid serverState of length 8, when searching for client: %s\n", computer_name)); + talloc_free(res); + return NT_STATUS_INTERNAL_ERROR; + } + memcpy((*creds)->server.data, val->data, 8); + + (*creds)->negotiate_flags = ldb_msg_find_attr_as_int(res->msgs[0], "negotiateFlags", 0); + + (*creds)->secure_channel_type = ldb_msg_find_attr_as_int(res->msgs[0], "secureChannelType", 0); + + (*creds)->account_name = talloc_strdup(*creds, ldb_msg_find_attr_as_string(res->msgs[0], "accountName", NULL)); + if ((*creds)->account_name == NULL) { + talloc_free(res); + return NT_STATUS_NO_MEMORY; + } + + (*creds)->computer_name = talloc_strdup(*creds, ldb_msg_find_attr_as_string(res->msgs[0], "computerName", NULL)); + if ((*creds)->computer_name == NULL) { + talloc_free(res); + return NT_STATUS_NO_MEMORY; + } + + val = ldb_msg_find_ldb_val(res->msgs[0], "objectSid"); + if (val) { + (*creds)->sid = schannel_ldb_val_dom_sid(*creds, val); + if ((*creds)->sid == NULL) { + talloc_free(res); + return NT_STATUS_INTERNAL_ERROR; + } + } else { + (*creds)->sid = NULL; + } + + talloc_free(res); + return NT_STATUS_OK; +} + +/* + Validate an incoming authenticator against the credentials for the remote machine. + + The credentials are (re)read and from the schannel database, and + written back after the caclulations are performed. + + The creds_out parameter (if not NULL) returns the credentials, if + the caller needs some of that information. + +*/ +NTSTATUS schannel_creds_server_step_check_ldb(struct ldb_context *ldb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + bool schannel_required_for_call, + bool schannel_in_use, + struct netr_Authenticator *received_authenticator, + struct netr_Authenticator *return_authenticator, + struct netlogon_creds_CredentialState **creds_out) +{ + struct netlogon_creds_CredentialState *creds; + NTSTATUS nt_status; + int ret; + + ret = ldb_transaction_start(ldb); + if (ret != 0) { + return NT_STATUS_INTERNAL_DB_CORRUPTION; + } + + /* Because this is a shared structure (even across + * disconnects) we must update the database every time we + * update the structure */ + + nt_status = schannel_fetch_session_key_ldb(ldb, ldb, computer_name, + &creds); + + /* If we are flaged that schannel is required for a call, and + * it is not in use, then make this an error */ + + /* It would be good to make this mandetory once schannel is + * negoiated, bu this is not what windows does */ + if (schannel_required_for_call && !schannel_in_use) { + DEBUG(0,("schannel_creds_server_step_check: client %s not using schannel for netlogon, despite negotiating it\n", + creds->computer_name )); + ldb_transaction_cancel(ldb); + return NT_STATUS_ACCESS_DENIED; + } + + if (NT_STATUS_IS_OK(nt_status)) { + nt_status = netlogon_creds_server_step_check(creds, + received_authenticator, + return_authenticator); + } + + if (NT_STATUS_IS_OK(nt_status)) { + nt_status = schannel_store_session_key_ldb(ldb, mem_ctx, creds); + } + + if (NT_STATUS_IS_OK(nt_status)) { + ldb_transaction_commit(ldb); + if (creds_out) { + *creds_out = creds; + talloc_steal(mem_ctx, creds); + } + } else { + ldb_transaction_cancel(ldb); + } + return nt_status; +} diff --git a/libcli/auth/schannel_state_proto.h b/libcli/auth/schannel_state_proto.h new file mode 100644 index 0000000000..c582c3e8b8 --- /dev/null +++ b/libcli/auth/schannel_state_proto.h @@ -0,0 +1,48 @@ +#ifndef _LIBCLI_AUTH_SCHANNEL_STATE_PROTO_H__ +#define _LIBCLI_AUTH_SCHANNEL_STATE_PROTO_H__ + +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) PRINTF_ATTRIBUTE(a1, a2) + +/* this file contains prototypes for functions that are private + * to this subsystem or library. These functions should not be + * used outside this particular subsystem! */ + + +/* The following definitions come from /home/jeremy/src/samba/git/master/source3/../source4/../libcli/auth/schannel_state.c */ + +NTSTATUS schannel_store_session_key_ldb(struct ldb_context *ldb, + TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds); +NTSTATUS schannel_fetch_session_key_ldb(struct ldb_context *ldb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + struct netlogon_creds_CredentialState **creds); +NTSTATUS schannel_creds_server_step_check_ldb(struct ldb_context *ldb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + bool schannel_required_for_call, + bool schannel_in_use, + struct netr_Authenticator *received_authenticator, + struct netr_Authenticator *return_authenticator, + struct netlogon_creds_CredentialState **creds_out); +NTSTATUS schannel_store_session_key_tdb(struct tdb_context *tdb, + TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds); +NTSTATUS schannel_fetch_session_key_tdb(struct tdb_context *tdb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + struct netlogon_creds_CredentialState **creds); +NTSTATUS schannel_creds_server_step_check_tdb(struct tdb_context *tdb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + bool schannel_required_for_call, + bool schannel_in_use, + struct netr_Authenticator *received_authenticator, + struct netr_Authenticator *return_authenticator, + struct netlogon_creds_CredentialState **creds_out); + +#undef _PRINTF_ATTRIBUTE +#define _PRINTF_ATTRIBUTE(a1, a2) + +#endif diff --git a/libcli/auth/schannel_state_tdb.c b/libcli/auth/schannel_state_tdb.c new file mode 100644 index 0000000000..7ec8b3fdea --- /dev/null +++ b/libcli/auth/schannel_state_tdb.c @@ -0,0 +1,222 @@ +/* + Unix SMB/CIFS implementation. + + module to store/fetch session keys for the schannel server + + Copyright (C) Andrew Tridgell 2004 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2006-2009 + Copyright (C) Guenther Deschner 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "../libcli/auth/libcli_auth.h" +#include "../libcli/auth/schannel_state.h" +#include "../librpc/gen_ndr/ndr_schannel.h" + +/******************************************************************** + ********************************************************************/ + +NTSTATUS schannel_store_session_key_tdb(struct tdb_context *tdb, + TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds) +{ + enum ndr_err_code ndr_err; + DATA_BLOB blob; + TDB_DATA value; + int ret; + char *keystr; + + keystr = talloc_asprintf_strupper_m(mem_ctx, "%s/%s", + SECRETS_SCHANNEL_STATE, + creds->computer_name); + if (!keystr) { + return NT_STATUS_NO_MEMORY; + } + + ndr_err = ndr_push_struct_blob(&blob, mem_ctx, NULL, creds, + (ndr_push_flags_fn_t)ndr_push_netlogon_creds_CredentialState); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + talloc_free(keystr); + return ndr_map_error2ntstatus(ndr_err); + } + + value.dptr = blob.data; + value.dsize = blob.length; + + ret = tdb_store_bystring(tdb, keystr, value, TDB_REPLACE); + if (ret != TDB_SUCCESS) { + DEBUG(0,("Unable to add %s to session key db - %s\n", + keystr, tdb_errorstr(tdb))); + talloc_free(keystr); + return NT_STATUS_INTERNAL_DB_CORRUPTION; + } + + DEBUG(3,("schannel_store_session_key_tdb: stored schannel info with key %s\n", + keystr)); + + if (DEBUGLEVEL >= 10) { + NDR_PRINT_DEBUG(netlogon_creds_CredentialState, creds); + } + + talloc_free(keystr); + + return NT_STATUS_OK; +} + +/******************************************************************** + ********************************************************************/ + +NTSTATUS schannel_fetch_session_key_tdb(struct tdb_context *tdb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + struct netlogon_creds_CredentialState **pcreds) +{ + NTSTATUS status; + TDB_DATA value; + enum ndr_err_code ndr_err; + DATA_BLOB blob; + struct netlogon_creds_CredentialState *creds = NULL; + char *keystr = NULL; + + *pcreds = NULL; + + keystr = talloc_asprintf_strupper_m(mem_ctx, "%s/%s", + SECRETS_SCHANNEL_STATE, + computer_name); + if (!keystr) { + status = NT_STATUS_NO_MEMORY; + goto done; + } + + value = tdb_fetch_bystring(tdb, keystr); + if (!value.dptr) { + DEBUG(0,("schannel_fetch_session_key_tdb: Failed to find entry with key %s\n", + keystr )); + status = NT_STATUS_OBJECT_NAME_NOT_FOUND; + goto done; + } + + creds = talloc_zero(mem_ctx, struct netlogon_creds_CredentialState); + if (!creds) { + status = NT_STATUS_NO_MEMORY; + goto done; + } + + blob = data_blob_const(value.dptr, value.dsize); + + ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, NULL, creds, + (ndr_pull_flags_fn_t)ndr_pull_netlogon_creds_CredentialState); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + status = ndr_map_error2ntstatus(ndr_err); + goto done; + } + + if (DEBUGLEVEL >= 10) { + NDR_PRINT_DEBUG(netlogon_creds_CredentialState, creds); + } + + DEBUG(3,("schannel_fetch_session_key_tdb: restored schannel info key %s\n", + keystr)); + + status = NT_STATUS_OK; + + done: + + talloc_free(keystr); + + if (!NT_STATUS_IS_OK(status)) { + talloc_free(creds); + return status; + } + + *pcreds = creds; + + return NT_STATUS_OK; +} + +/******************************************************************** + + Validate an incoming authenticator against the credentials for the remote + machine. + + The credentials are (re)read and from the schannel database, and + written back after the caclulations are performed. + + The creds_out parameter (if not NULL) returns the credentials, if + the caller needs some of that information. + + ********************************************************************/ + +NTSTATUS schannel_creds_server_step_check_tdb(struct tdb_context *tdb, + TALLOC_CTX *mem_ctx, + const char *computer_name, + bool schannel_required_for_call, + bool schannel_in_use, + struct netr_Authenticator *received_authenticator, + struct netr_Authenticator *return_authenticator, + struct netlogon_creds_CredentialState **creds_out) +{ + struct netlogon_creds_CredentialState *creds; + NTSTATUS status; + int ret; + + ret = tdb_transaction_start(tdb); + if (ret != 0) { + return NT_STATUS_INTERNAL_DB_CORRUPTION; + } + + /* Because this is a shared structure (even across + * disconnects) we must update the database every time we + * update the structure */ + + status = schannel_fetch_session_key_tdb(tdb, mem_ctx, computer_name, + &creds); + + /* If we are flaged that schannel is required for a call, and + * it is not in use, then make this an error */ + + /* It would be good to make this mandatory once schannel is + * negotiated, but this is not what windows does */ + if (schannel_required_for_call && !schannel_in_use) { + DEBUG(0,("schannel_creds_server_step_check_tdb: " + "client %s not using schannel for netlogon, despite negotiating it\n", + creds->computer_name )); + tdb_transaction_cancel(tdb); + return NT_STATUS_ACCESS_DENIED; + } + + if (NT_STATUS_IS_OK(status)) { + status = netlogon_creds_server_step_check(creds, + received_authenticator, + return_authenticator); + } + + if (NT_STATUS_IS_OK(status)) { + status = schannel_store_session_key_tdb(tdb, mem_ctx, creds); + } + + if (NT_STATUS_IS_OK(status)) { + tdb_transaction_commit(tdb); + if (creds_out) { + *creds_out = creds; + talloc_steal(mem_ctx, creds); + } + } else { + tdb_transaction_cancel(tdb); + } + + return status; +} diff --git a/libcli/auth/session.c b/libcli/auth/session.c new file mode 100644 index 0000000000..10c728662d --- /dev/null +++ b/libcli/auth/session.c @@ -0,0 +1,218 @@ +/* + Unix SMB/CIFS implementation. + + code to encrypt/decrypt data using the user session key + + Copyright (C) Andrew Tridgell 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "libcli/auth/libcli_auth.h" + +/* + encrypt or decrypt a blob of data using the user session key + as used in lsa_SetSecret + + before calling, the out blob must be initialised to be the same size + as the in blob +*/ +void sess_crypt_blob(DATA_BLOB *out, const DATA_BLOB *in, const DATA_BLOB *session_key, + bool forward) +{ + int i, k; + + for (i=0,k=0; + i<in->length; + i += 8, k += 7) { + uint8_t bin[8], bout[8], key[7]; + + memset(bin, 0, 8); + memcpy(bin, &in->data[i], MIN(8, in->length-i)); + + if (k + 7 > session_key->length) { + k = (session_key->length - k); + } + memcpy(key, &session_key->data[k], 7); + + des_crypt56(bout, bin, key, forward?1:0); + + memcpy(&out->data[i], bout, MIN(8, in->length-i)); + } +} + + +/* + a convenient wrapper around sess_crypt_blob() for strings, using the LSA convention + + note that we round the length to a multiple of 8. This seems to be needed for + compatibility with windows + + caller should free using data_blob_free() +*/ +DATA_BLOB sess_encrypt_string(const char *str, const DATA_BLOB *session_key) +{ + DATA_BLOB ret, src; + int slen = strlen(str); + int dlen = (slen+7) & ~7; + + src = data_blob(NULL, 8+dlen); + if (!src.data) { + return data_blob(NULL, 0); + } + + ret = data_blob(NULL, 8+dlen); + if (!ret.data) { + data_blob_free(&src); + return data_blob(NULL, 0); + } + + SIVAL(src.data, 0, slen); + SIVAL(src.data, 4, 1); + memset(src.data+8, 0, dlen); + memcpy(src.data+8, str, slen); + + sess_crypt_blob(&ret, &src, session_key, true); + + data_blob_free(&src); + + return ret; +} + +/* + a convenient wrapper around sess_crypt_blob() for strings, using the LSA convention + + caller should free the returned string +*/ +char *sess_decrypt_string(TALLOC_CTX *mem_ctx, + DATA_BLOB *blob, const DATA_BLOB *session_key) +{ + DATA_BLOB out; + int slen; + char *ret; + + if (blob->length < 8) { + return NULL; + } + + out = data_blob_talloc(mem_ctx, NULL, blob->length); + if (!out.data) { + return NULL; + } + + sess_crypt_blob(&out, blob, session_key, false); + + if (IVAL(out.data, 4) != 1) { + DEBUG(0,("Unexpected revision number %d in session crypted string\n", + IVAL(out.data, 4))); + data_blob_free(&out); + return NULL; + } + + slen = IVAL(out.data, 0); + if (slen > blob->length - 8) { + DEBUG(0,("Invalid crypt length %d\n", slen)); + data_blob_free(&out); + return NULL; + } + + ret = talloc_strndup(mem_ctx, (const char *)(out.data+8), slen); + + data_blob_free(&out); + + DEBUG(0,("decrypted string '%s' of length %d\n", ret, slen)); + + return ret; +} + +/* + a convenient wrapper around sess_crypt_blob() for DATA_BLOBs, using the LSA convention + + note that we round the length to a multiple of 8. This seems to be needed for + compatibility with windows + + caller should free using data_blob_free() +*/ +DATA_BLOB sess_encrypt_blob(TALLOC_CTX *mem_ctx, DATA_BLOB *blob_in, const DATA_BLOB *session_key) +{ + DATA_BLOB ret, src; + int dlen = (blob_in->length+7) & ~7; + + src = data_blob_talloc(mem_ctx, NULL, 8+dlen); + if (!src.data) { + return data_blob(NULL, 0); + } + + ret = data_blob_talloc(mem_ctx, NULL, 8+dlen); + if (!ret.data) { + data_blob_free(&src); + return data_blob(NULL, 0); + } + + SIVAL(src.data, 0, blob_in->length); + SIVAL(src.data, 4, 1); + memset(src.data+8, 0, dlen); + memcpy(src.data+8, blob_in->data, blob_in->length); + + sess_crypt_blob(&ret, &src, session_key, true); + + data_blob_free(&src); + + return ret; +} + +/* + Decrypt a DATA_BLOB using the LSA convention +*/ +NTSTATUS sess_decrypt_blob(TALLOC_CTX *mem_ctx, const DATA_BLOB *blob, const DATA_BLOB *session_key, + DATA_BLOB *ret) +{ + DATA_BLOB out; + int slen; + + if (blob->length < 8) { + DEBUG(0, ("Unexpected length %d in session crypted secret (BLOB)\n", + (int)blob->length)); + return NT_STATUS_INVALID_PARAMETER; + } + + out = data_blob_talloc(mem_ctx, NULL, blob->length); + if (!out.data) { + return NT_STATUS_NO_MEMORY; + } + + sess_crypt_blob(&out, blob, session_key, false); + + if (IVAL(out.data, 4) != 1) { + DEBUG(2,("Unexpected revision number %d in session crypted secret (BLOB)\n", + IVAL(out.data, 4))); + return NT_STATUS_UNKNOWN_REVISION; + } + + slen = IVAL(out.data, 0); + if (slen > blob->length - 8) { + DEBUG(0,("Invalid crypt length %d in session crypted secret (BLOB)\n", slen)); + return NT_STATUS_WRONG_PASSWORD; + } + + *ret = data_blob_talloc(mem_ctx, out.data+8, slen); + if (slen && !ret->data) { + return NT_STATUS_NO_MEMORY; + } + + data_blob_free(&out); + + return NT_STATUS_OK; +} diff --git a/libcli/auth/smbdes.c b/libcli/auth/smbdes.c new file mode 100644 index 0000000000..32e65e779d --- /dev/null +++ b/libcli/auth/smbdes.c @@ -0,0 +1,381 @@ +/* + Unix SMB/CIFS implementation. + + a partial implementation of DES designed for use in the + SMB authentication protocol + + Copyright (C) Andrew Tridgell 1998 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "libcli/auth/libcli_auth.h" + +/* NOTES: + + This code makes no attempt to be fast! In fact, it is a very + slow implementation + + This code is NOT a complete DES implementation. It implements only + the minimum necessary for SMB authentication, as used by all SMB + products (including every copy of Microsoft Windows95 ever sold) + + In particular, it can only do a unchained forward DES pass. This + means it is not possible to use this code for encryption/decryption + of data, instead it is only useful as a "hash" algorithm. + + There is no entry point into this code that allows normal DES operation. + + I believe this means that this code does not come under ITAR + regulations but this is NOT a legal opinion. If you are concerned + about the applicability of ITAR regulations to this code then you + should confirm it for yourself (and maybe let me know if you come + up with a different answer to the one above) +*/ + + +static const uint8_t perm1[56] = {57, 49, 41, 33, 25, 17, 9, + 1, 58, 50, 42, 34, 26, 18, + 10, 2, 59, 51, 43, 35, 27, + 19, 11, 3, 60, 52, 44, 36, + 63, 55, 47, 39, 31, 23, 15, + 7, 62, 54, 46, 38, 30, 22, + 14, 6, 61, 53, 45, 37, 29, + 21, 13, 5, 28, 20, 12, 4}; + +static const uint8_t perm2[48] = {14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32}; + +static const uint8_t perm3[64] = {58, 50, 42, 34, 26, 18, 10, 2, + 60, 52, 44, 36, 28, 20, 12, 4, + 62, 54, 46, 38, 30, 22, 14, 6, + 64, 56, 48, 40, 32, 24, 16, 8, + 57, 49, 41, 33, 25, 17, 9, 1, + 59, 51, 43, 35, 27, 19, 11, 3, + 61, 53, 45, 37, 29, 21, 13, 5, + 63, 55, 47, 39, 31, 23, 15, 7}; + +static const uint8_t perm4[48] = { 32, 1, 2, 3, 4, 5, + 4, 5, 6, 7, 8, 9, + 8, 9, 10, 11, 12, 13, + 12, 13, 14, 15, 16, 17, + 16, 17, 18, 19, 20, 21, + 20, 21, 22, 23, 24, 25, + 24, 25, 26, 27, 28, 29, + 28, 29, 30, 31, 32, 1}; + +static const uint8_t perm5[32] = { 16, 7, 20, 21, + 29, 12, 28, 17, + 1, 15, 23, 26, + 5, 18, 31, 10, + 2, 8, 24, 14, + 32, 27, 3, 9, + 19, 13, 30, 6, + 22, 11, 4, 25}; + + +static const uint8_t perm6[64] ={ 40, 8, 48, 16, 56, 24, 64, 32, + 39, 7, 47, 15, 55, 23, 63, 31, + 38, 6, 46, 14, 54, 22, 62, 30, + 37, 5, 45, 13, 53, 21, 61, 29, + 36, 4, 44, 12, 52, 20, 60, 28, + 35, 3, 43, 11, 51, 19, 59, 27, + 34, 2, 42, 10, 50, 18, 58, 26, + 33, 1, 41, 9, 49, 17, 57, 25}; + + +static const uint8_t sc[16] = {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}; + +static const uint8_t sbox[8][4][16] = { + {{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, + {0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, + {4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, + {15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13}}, + + {{15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10}, + {3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5}, + {0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15}, + {13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9}}, + + {{10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8}, + {13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1}, + {13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7}, + {1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12}}, + + {{7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15}, + {13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9}, + {10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4}, + {3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14}}, + + {{2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9}, + {14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6}, + {4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14}, + {11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3}}, + + {{12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11}, + {10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8}, + {9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6}, + {4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13}}, + + {{4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1}, + {13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6}, + {1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2}, + {6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12}}, + + {{13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7}, + {1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2}, + {7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8}, + {2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11}}}; + +static void permute(char *out, const char *in, const uint8_t *p, int n) +{ + int i; + for (i=0;i<n;i++) + out[i] = in[p[i]-1]; +} + +static void lshift(char *d, int count, int n) +{ + char out[64]; + int i; + for (i=0;i<n;i++) + out[i] = d[(i+count)%n]; + for (i=0;i<n;i++) + d[i] = out[i]; +} + +static void concat(char *out, char *in1, char *in2, int l1, int l2) +{ + while (l1--) + *out++ = *in1++; + while (l2--) + *out++ = *in2++; +} + +static void xor(char *out, char *in1, char *in2, int n) +{ + int i; + for (i=0;i<n;i++) + out[i] = in1[i] ^ in2[i]; +} + +static void dohash(char *out, char *in, char *key, int forw) +{ + int i, j, k; + char pk1[56]; + char c[28]; + char d[28]; + char cd[56]; + char ki[16][48]; + char pd1[64]; + char l[32], r[32]; + char rl[64]; + + permute(pk1, key, perm1, 56); + + for (i=0;i<28;i++) + c[i] = pk1[i]; + for (i=0;i<28;i++) + d[i] = pk1[i+28]; + + for (i=0;i<16;i++) { + lshift(c, sc[i], 28); + lshift(d, sc[i], 28); + + concat(cd, c, d, 28, 28); + permute(ki[i], cd, perm2, 48); + } + + permute(pd1, in, perm3, 64); + + for (j=0;j<32;j++) { + l[j] = pd1[j]; + r[j] = pd1[j+32]; + } + + for (i=0;i<16;i++) { + char er[48]; + char erk[48]; + char b[8][6]; + char cb[32]; + char pcb[32]; + char r2[32]; + + permute(er, r, perm4, 48); + + xor(erk, er, ki[forw ? i : 15 - i], 48); + + for (j=0;j<8;j++) + for (k=0;k<6;k++) + b[j][k] = erk[j*6 + k]; + + for (j=0;j<8;j++) { + int m, n; + m = (b[j][0]<<1) | b[j][5]; + + n = (b[j][1]<<3) | (b[j][2]<<2) | (b[j][3]<<1) | b[j][4]; + + for (k=0;k<4;k++) + b[j][k] = (sbox[j][m][n] & (1<<(3-k)))?1:0; + } + + for (j=0;j<8;j++) + for (k=0;k<4;k++) + cb[j*4+k] = b[j][k]; + permute(pcb, cb, perm5, 32); + + xor(r2, l, pcb, 32); + + for (j=0;j<32;j++) + l[j] = r[j]; + + for (j=0;j<32;j++) + r[j] = r2[j]; + } + + concat(rl, r, l, 32, 32); + + permute(out, rl, perm6, 64); +} + +static void str_to_key(const uint8_t *str,uint8_t *key) +{ + int i; + + key[0] = str[0]>>1; + key[1] = ((str[0]&0x01)<<6) | (str[1]>>2); + key[2] = ((str[1]&0x03)<<5) | (str[2]>>3); + key[3] = ((str[2]&0x07)<<4) | (str[3]>>4); + key[4] = ((str[3]&0x0F)<<3) | (str[4]>>5); + key[5] = ((str[4]&0x1F)<<2) | (str[5]>>6); + key[6] = ((str[5]&0x3F)<<1) | (str[6]>>7); + key[7] = str[6]&0x7F; + for (i=0;i<8;i++) { + key[i] = (key[i]<<1); + } +} + +/* + basic des crypt using a 56 bit (7 byte) key +*/ +void des_crypt56(uint8_t out[8], const uint8_t in[8], const uint8_t key[7], int forw) +{ + int i; + char outb[64]; + char inb[64]; + char keyb[64]; + uint8_t key2[8]; + + str_to_key(key, key2); + + for (i=0;i<64;i++) { + inb[i] = (in[i/8] & (1<<(7-(i%8)))) ? 1 : 0; + keyb[i] = (key2[i/8] & (1<<(7-(i%8)))) ? 1 : 0; + outb[i] = 0; + } + + dohash(outb, inb, keyb, forw); + + for (i=0;i<8;i++) { + out[i] = 0; + } + + for (i=0;i<64;i++) { + if (outb[i]) + out[i/8] |= (1<<(7-(i%8))); + } +} + +void E_P16(const uint8_t *p14,uint8_t *p16) +{ + const uint8_t sp8[8] = {0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25}; + des_crypt56(p16, sp8, p14, 1); + des_crypt56(p16+8, sp8, p14+7, 1); +} + +void E_P24(const uint8_t *p21, const uint8_t *c8, uint8_t *p24) +{ + des_crypt56(p24, c8, p21, 1); + des_crypt56(p24+8, c8, p21+7, 1); + des_crypt56(p24+16, c8, p21+14, 1); +} + +void D_P16(const uint8_t *p14, const uint8_t *in, uint8_t *out) +{ + des_crypt56(out, in, p14, 0); + des_crypt56(out+8, in+8, p14+7, 0); +} + +void E_old_pw_hash( uint8_t *p14, const uint8_t *in, uint8_t *out) +{ + des_crypt56(out, in, p14, 1); + des_crypt56(out+8, in+8, p14+7, 1); +} + +/* des encryption with a 128 bit key */ +void des_crypt128(uint8_t out[8], const uint8_t in[8], const uint8_t key[16]) +{ + uint8_t buf[8]; + des_crypt56(buf, in, key, 1); + des_crypt56(out, buf, key+9, 1); +} + +/* des encryption with a 64 bit key */ +void des_crypt64(uint8_t out[8], const uint8_t in[8], const uint8_t key[8], int forw) +{ + uint8_t buf[8]; + uint8_t key2[8]; + ZERO_STRUCT(key2); + des_crypt56(buf, in, key, forw); + key2[0] = key[7]; + des_crypt56(out, buf, key2, forw); +} + +/* des encryption with a 112 bit (14 byte) key */ +void des_crypt112(uint8_t out[8], const uint8_t in[8], const uint8_t key[14], int forw) +{ + uint8_t buf[8]; + des_crypt56(buf, in, key, forw); + des_crypt56(out, buf, key+7, forw); +} + +/* des encryption of a 16 byte lump of data with a 112 bit key */ +void des_crypt112_16(uint8_t out[16], uint8_t in[16], const uint8_t key[14], int forw) +{ + des_crypt56(out, in, key, forw); + des_crypt56(out + 8, in + 8, key+7, forw); +} + +/* Decode a sam password hash into a password. The password hash is the + same method used to store passwords in the NT registry. The DES key + used is based on the RID of the user. */ +void sam_rid_crypt(uint_t rid, const uint8_t *in, uint8_t *out, int forw) +{ + uint8_t s[14]; + + s[0] = s[4] = s[8] = s[12] = (uint8_t)(rid & 0xFF); + s[1] = s[5] = s[9] = s[13] = (uint8_t)((rid >> 8) & 0xFF); + s[2] = s[6] = s[10] = (uint8_t)((rid >> 16) & 0xFF); + s[3] = s[7] = s[11] = (uint8_t)((rid >> 24) & 0xFF); + + des_crypt56(out, in, s, forw); + des_crypt56(out+8, in+8, s+7, forw); +} diff --git a/libcli/auth/smbencrypt.c b/libcli/auth/smbencrypt.c new file mode 100644 index 0000000000..f7c60e7de1 --- /dev/null +++ b/libcli/auth/smbencrypt.c @@ -0,0 +1,779 @@ +/* + Unix SMB/CIFS implementation. + SMB parameters and setup + Copyright (C) Andrew Tridgell 1992-1998 + Modified by Jeremy Allison 1995. + Copyright (C) Jeremy Allison 1995-2000. + Copyright (C) Luke Kennethc Casson Leighton 1996-2000. + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2002-2003 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "system/time.h" +#include "../libcli/auth/msrpc_parse.h" +#include "../lib/crypto/crypto.h" +#include "../libcli/auth/libcli_auth.h" +#include "../librpc/gen_ndr/ntlmssp.h" + +void SMBencrypt_hash(const uint8_t lm_hash[16], const uint8_t *c8, uint8_t p24[24]) +{ + uint8_t p21[21]; + + memset(p21,'\0',21); + memcpy(p21, lm_hash, 16); + + SMBOWFencrypt(p21, c8, p24); + +#ifdef DEBUG_PASSWORD + DEBUG(100,("SMBencrypt_hash: lm#, challenge, response\n")); + dump_data(100, p21, 16); + dump_data(100, c8, 8); + dump_data(100, p24, 24); +#endif +} + +/* + This implements the X/Open SMB password encryption + It takes a password ('unix' string), a 8 byte "crypt key" + and puts 24 bytes of encrypted password into p24 + + Returns False if password must have been truncated to create LM hash +*/ + +bool SMBencrypt(const char *passwd, const uint8_t *c8, uint8_t p24[24]) +{ + bool ret; + uint8_t lm_hash[16]; + + ret = E_deshash(passwd, lm_hash); + SMBencrypt_hash(lm_hash, c8, p24); + return ret; +} + +/** + * Creates the MD4 Hash of the users password in NT UNICODE. + * @param passwd password in 'unix' charset. + * @param p16 return password hashed with md4, caller allocated 16 byte buffer + */ + +bool E_md4hash(const char *passwd, uint8_t p16[16]) +{ + size_t len; + smb_ucs2_t *wpwd; + bool ret; + + ret = push_ucs2_talloc(NULL, &wpwd, passwd, &len); + if (!ret || len < 2) { + /* We don't want to return fixed data, as most callers + * don't check */ + mdfour(p16, (const uint8_t *)passwd, strlen(passwd)); + return false; + } + + len -= 2; + mdfour(p16, (const uint8_t *)wpwd, len); + + talloc_free(wpwd); + return true; +} + +/** + * Creates the MD5 Hash of a combination of 16 byte salt and 16 byte NT hash. + * @param 16 byte salt. + * @param 16 byte NT hash. + * @param 16 byte return hashed with md5, caller allocated 16 byte buffer + */ + +void E_md5hash(const uint8_t salt[16], const uint8_t nthash[16], uint8_t hash_out[16]) +{ + struct MD5Context tctx; + MD5Init(&tctx); + MD5Update(&tctx, salt, 16); + MD5Update(&tctx, nthash, 16); + MD5Final(hash_out, &tctx); +} + +/** + * Creates the DES forward-only Hash of the users password in DOS ASCII charset + * @param passwd password in 'unix' charset. + * @param p16 return password hashed with DES, caller allocated 16 byte buffer + * @return false if password was > 14 characters, and therefore may be incorrect, otherwise true + * @note p16 is filled in regardless + */ + +bool E_deshash(const char *passwd, uint8_t p16[16]) +{ + bool ret = true; + char dospwd[256]; + ZERO_STRUCT(dospwd); + + /* Password must be converted to DOS charset - null terminated, uppercase. */ + push_string(dospwd, passwd, sizeof(dospwd), STR_ASCII|STR_UPPER|STR_TERMINATE); + + /* Only the first 14 chars are considered, password need not be null terminated. */ + E_P16((const uint8_t *)dospwd, p16); + + if (strlen(dospwd) > 14) { + ret = false; + } + + ZERO_STRUCT(dospwd); + + return ret; +} + +/** + * Creates the MD4 and DES (LM) Hash of the users password. + * MD4 is of the NT Unicode, DES is of the DOS UPPERCASE password. + * @param passwd password in 'unix' charset. + * @param nt_p16 return password hashed with md4, caller allocated 16 byte buffer + * @param p16 return password hashed with des, caller allocated 16 byte buffer + */ + +/* Does both the NT and LM owfs of a user's password */ +void nt_lm_owf_gen(const char *pwd, uint8_t nt_p16[16], uint8_t p16[16]) +{ + /* Calculate the MD4 hash (NT compatible) of the password */ + memset(nt_p16, '\0', 16); + E_md4hash(pwd, nt_p16); + +#ifdef DEBUG_PASSWORD + DEBUG(100,("nt_lm_owf_gen: pwd, nt#\n")); + dump_data(120, (const uint8_t *)pwd, strlen(pwd)); + dump_data(100, nt_p16, 16); +#endif + + E_deshash(pwd, (uint8_t *)p16); + +#ifdef DEBUG_PASSWORD + DEBUG(100,("nt_lm_owf_gen: pwd, lm#\n")); + dump_data(120, (const uint8_t *)pwd, strlen(pwd)); + dump_data(100, p16, 16); +#endif +} + +/* Does both the NTLMv2 owfs of a user's password */ +bool ntv2_owf_gen(const uint8_t owf[16], + const char *user_in, const char *domain_in, + bool upper_case_domain, /* Transform the domain into UPPER case */ + uint8_t kr_buf[16]) +{ + smb_ucs2_t *user; + smb_ucs2_t *domain; + size_t user_byte_len; + size_t domain_byte_len; + bool ret; + + HMACMD5Context ctx; + TALLOC_CTX *mem_ctx = talloc_init("ntv2_owf_gen for %s\\%s", domain_in, user_in); + + if (!mem_ctx) { + return false; + } + + if (!user_in) { + user_in = ""; + } + + if (!domain_in) { + domain_in = ""; + } + + user_in = strupper_talloc(mem_ctx, user_in); + if (user_in == NULL) { + talloc_free(mem_ctx); + return false; + } + + if (upper_case_domain) { + domain_in = strupper_talloc(mem_ctx, domain_in); + if (domain_in == NULL) { + talloc_free(mem_ctx); + return false; + } + } + + ret = push_ucs2_talloc(mem_ctx, &user, user_in, &user_byte_len ); + if (!ret) { + DEBUG(0, ("push_uss2_talloc() for user failed)\n")); + talloc_free(mem_ctx); + return false; + } + + ret = push_ucs2_talloc(mem_ctx, &domain, domain_in, &domain_byte_len); + if (!ret) { + DEBUG(0, ("push_ucs2_talloc() for domain failed\n")); + talloc_free(mem_ctx); + return false; + } + + SMB_ASSERT(user_byte_len >= 2); + SMB_ASSERT(domain_byte_len >= 2); + + /* We don't want null termination */ + user_byte_len = user_byte_len - 2; + domain_byte_len = domain_byte_len - 2; + + hmac_md5_init_limK_to_64(owf, 16, &ctx); + hmac_md5_update((uint8_t *)user, user_byte_len, &ctx); + hmac_md5_update((uint8_t *)domain, domain_byte_len, &ctx); + hmac_md5_final(kr_buf, &ctx); + +#ifdef DEBUG_PASSWORD + DEBUG(100, ("ntv2_owf_gen: user, domain, owfkey, kr\n")); + dump_data(100, (uint8_t *)user, user_byte_len); + dump_data(100, (uint8_t *)domain, domain_byte_len); + dump_data(100, owf, 16); + dump_data(100, kr_buf, 16); +#endif + + talloc_free(mem_ctx); + return true; +} + +/* Does the des encryption from the NT or LM MD4 hash. */ +void SMBOWFencrypt(const uint8_t passwd[16], const uint8_t *c8, uint8_t p24[24]) +{ + uint8_t p21[21]; + + ZERO_STRUCT(p21); + + memcpy(p21, passwd, 16); + E_P24(p21, c8, p24); +} + +/* Does the des encryption. */ + +void SMBNTencrypt_hash(const uint8_t nt_hash[16], uint8_t *c8, uint8_t *p24) +{ + uint8_t p21[21]; + + memset(p21,'\0',21); + memcpy(p21, nt_hash, 16); + SMBOWFencrypt(p21, c8, p24); + +#ifdef DEBUG_PASSWORD + DEBUG(100,("SMBNTencrypt: nt#, challenge, response\n")); + dump_data(100, p21, 16); + dump_data(100, c8, 8); + dump_data(100, p24, 24); +#endif +} + +/* Does the NT MD4 hash then des encryption. Plaintext version of the above. */ + +void SMBNTencrypt(const char *passwd, uint8_t *c8, uint8_t *p24) +{ + uint8_t nt_hash[16]; + E_md4hash(passwd, nt_hash); + SMBNTencrypt_hash(nt_hash, c8, p24); +} + + +/* Does the md5 encryption from the Key Response for NTLMv2. */ +void SMBOWFencrypt_ntv2(const uint8_t kr[16], + const DATA_BLOB *srv_chal, + const DATA_BLOB *smbcli_chal, + uint8_t resp_buf[16]) +{ + HMACMD5Context ctx; + + hmac_md5_init_limK_to_64(kr, 16, &ctx); + hmac_md5_update(srv_chal->data, srv_chal->length, &ctx); + hmac_md5_update(smbcli_chal->data, smbcli_chal->length, &ctx); + hmac_md5_final(resp_buf, &ctx); + +#ifdef DEBUG_PASSWORD + DEBUG(100, ("SMBOWFencrypt_ntv2: srv_chal, smbcli_chal, resp_buf\n")); + dump_data(100, srv_chal->data, srv_chal->length); + dump_data(100, smbcli_chal->data, smbcli_chal->length); + dump_data(100, resp_buf, 16); +#endif +} + +void SMBsesskeygen_ntv2(const uint8_t kr[16], + const uint8_t * nt_resp, uint8_t sess_key[16]) +{ + /* a very nice, 128 bit, variable session key */ + + HMACMD5Context ctx; + + hmac_md5_init_limK_to_64(kr, 16, &ctx); + hmac_md5_update(nt_resp, 16, &ctx); + hmac_md5_final((uint8_t *)sess_key, &ctx); + +#ifdef DEBUG_PASSWORD + DEBUG(100, ("SMBsesskeygen_ntv2:\n")); + dump_data(100, sess_key, 16); +#endif +} + +void SMBsesskeygen_ntv1(const uint8_t kr[16], uint8_t sess_key[16]) +{ + /* yes, this session key does not change - yes, this + is a problem - but it is 128 bits */ + + mdfour((uint8_t *)sess_key, kr, 16); + +#ifdef DEBUG_PASSWORD + DEBUG(100, ("SMBsesskeygen_ntv1:\n")); + dump_data(100, sess_key, 16); +#endif +} + +void SMBsesskeygen_lm_sess_key(const uint8_t lm_hash[16], + const uint8_t lm_resp[24], /* only uses 8 */ + uint8_t sess_key[16]) +{ + /* Calculate the LM session key (effective length 40 bits, + but changes with each session) */ + uint8_t p24[24]; + uint8_t partial_lm_hash[14]; + + memcpy(partial_lm_hash, lm_hash, 8); + memset(partial_lm_hash + 8, 0xbd, 6); + + des_crypt56(p24, lm_resp, partial_lm_hash, 1); + des_crypt56(p24+8, lm_resp, partial_lm_hash + 7, 1); + + memcpy(sess_key, p24, 16); + +#ifdef DEBUG_PASSWORD + DEBUG(100, ("SMBsesskeygen_lm_sess_key: \n")); + dump_data(100, sess_key, 16); +#endif +} + +DATA_BLOB NTLMv2_generate_names_blob(TALLOC_CTX *mem_ctx, + const char *hostname, + const char *domain) +{ + DATA_BLOB names_blob = data_blob_talloc(mem_ctx, NULL, 0); + + msrpc_gen(mem_ctx, &names_blob, + "aaa", + MsvAvNbDomainName, domain, + MsvAvNbComputerName, hostname, + MsvAvEOL, ""); + return names_blob; +} + +static DATA_BLOB NTLMv2_generate_client_data(TALLOC_CTX *mem_ctx, const DATA_BLOB *names_blob) +{ + uint8_t client_chal[8]; + DATA_BLOB response = data_blob(NULL, 0); + uint8_t long_date[8]; + NTTIME nttime; + + unix_to_nt_time(&nttime, time(NULL)); + + generate_random_buffer(client_chal, sizeof(client_chal)); + + push_nttime(long_date, 0, nttime); + + /* See http://www.ubiqx.org/cifs/SMB.html#SMB.8.5 */ + + msrpc_gen(mem_ctx, &response, "ddbbdb", + 0x00000101, /* Header */ + 0, /* 'Reserved' */ + long_date, 8, /* Timestamp */ + client_chal, 8, /* client challenge */ + 0, /* Unknown */ + names_blob->data, names_blob->length); /* End of name list */ + + return response; +} + +static DATA_BLOB NTLMv2_generate_response(TALLOC_CTX *out_mem_ctx, + const uint8_t ntlm_v2_hash[16], + const DATA_BLOB *server_chal, + const DATA_BLOB *names_blob) +{ + uint8_t ntlmv2_response[16]; + DATA_BLOB ntlmv2_client_data; + DATA_BLOB final_response; + + TALLOC_CTX *mem_ctx = talloc_named(out_mem_ctx, 0, + "NTLMv2_generate_response internal context"); + + if (!mem_ctx) { + return data_blob(NULL, 0); + } + + /* NTLMv2 */ + /* generate some data to pass into the response function - including + the hostname and domain name of the server */ + ntlmv2_client_data = NTLMv2_generate_client_data(mem_ctx, names_blob); + + /* Given that data, and the challenge from the server, generate a response */ + SMBOWFencrypt_ntv2(ntlm_v2_hash, server_chal, &ntlmv2_client_data, ntlmv2_response); + + final_response = data_blob_talloc(out_mem_ctx, NULL, sizeof(ntlmv2_response) + ntlmv2_client_data.length); + + memcpy(final_response.data, ntlmv2_response, sizeof(ntlmv2_response)); + + memcpy(final_response.data+sizeof(ntlmv2_response), + ntlmv2_client_data.data, ntlmv2_client_data.length); + + talloc_free(mem_ctx); + + return final_response; +} + +static DATA_BLOB LMv2_generate_response(TALLOC_CTX *mem_ctx, + const uint8_t ntlm_v2_hash[16], + const DATA_BLOB *server_chal) +{ + uint8_t lmv2_response[16]; + DATA_BLOB lmv2_client_data = data_blob_talloc(mem_ctx, NULL, 8); + DATA_BLOB final_response = data_blob_talloc(mem_ctx, NULL,24); + + /* LMv2 */ + /* client-supplied random data */ + generate_random_buffer(lmv2_client_data.data, lmv2_client_data.length); + + /* Given that data, and the challenge from the server, generate a response */ + SMBOWFencrypt_ntv2(ntlm_v2_hash, server_chal, &lmv2_client_data, lmv2_response); + memcpy(final_response.data, lmv2_response, sizeof(lmv2_response)); + + /* after the first 16 bytes is the random data we generated above, + so the server can verify us with it */ + memcpy(final_response.data+sizeof(lmv2_response), + lmv2_client_data.data, lmv2_client_data.length); + + data_blob_free(&lmv2_client_data); + + return final_response; +} + +bool SMBNTLMv2encrypt_hash(TALLOC_CTX *mem_ctx, + const char *user, const char *domain, const uint8_t nt_hash[16], + const DATA_BLOB *server_chal, + const DATA_BLOB *names_blob, + DATA_BLOB *lm_response, DATA_BLOB *nt_response, + DATA_BLOB *lm_session_key, DATA_BLOB *user_session_key) +{ + uint8_t ntlm_v2_hash[16]; + + /* We don't use the NT# directly. Instead we use it mashed up with + the username and domain. + This prevents username swapping during the auth exchange + */ + if (!ntv2_owf_gen(nt_hash, user, domain, true, ntlm_v2_hash)) { + return false; + } + + if (nt_response) { + *nt_response = NTLMv2_generate_response(mem_ctx, + ntlm_v2_hash, server_chal, + names_blob); + if (user_session_key) { + *user_session_key = data_blob_talloc(mem_ctx, NULL, 16); + + /* The NTLMv2 calculations also provide a session key, for signing etc later */ + /* use only the first 16 bytes of nt_response for session key */ + SMBsesskeygen_ntv2(ntlm_v2_hash, nt_response->data, user_session_key->data); + } + } + + /* LMv2 */ + + if (lm_response) { + *lm_response = LMv2_generate_response(mem_ctx, + ntlm_v2_hash, server_chal); + if (lm_session_key) { + *lm_session_key = data_blob_talloc(mem_ctx, NULL, 16); + + /* The NTLMv2 calculations also provide a session key, for signing etc later */ + /* use only the first 16 bytes of lm_response for session key */ + SMBsesskeygen_ntv2(ntlm_v2_hash, lm_response->data, lm_session_key->data); + } + } + + return true; +} + +bool SMBNTLMv2encrypt(TALLOC_CTX *mem_ctx, + const char *user, const char *domain, + const char *password, + const DATA_BLOB *server_chal, + const DATA_BLOB *names_blob, + DATA_BLOB *lm_response, DATA_BLOB *nt_response, + DATA_BLOB *lm_session_key, DATA_BLOB *user_session_key) +{ + uint8_t nt_hash[16]; + E_md4hash(password, nt_hash); + + return SMBNTLMv2encrypt_hash(mem_ctx, + user, domain, nt_hash, server_chal, names_blob, + lm_response, nt_response, lm_session_key, user_session_key); +} + +/*********************************************************** + encode a password buffer with a unicode password. The buffer + is filled with random data to make it harder to attack. +************************************************************/ +bool encode_pw_buffer(uint8_t buffer[516], const char *password, int string_flags) +{ + uint8_t new_pw[512]; + size_t new_pw_len; + + /* the incoming buffer can be any alignment. */ + string_flags |= STR_NOALIGN; + + new_pw_len = push_string(new_pw, + password, + sizeof(new_pw), string_flags); + + memcpy(&buffer[512 - new_pw_len], new_pw, new_pw_len); + + generate_random_buffer(buffer, 512 - new_pw_len); + + /* + * The length of the new password is in the last 4 bytes of + * the data buffer. + */ + SIVAL(buffer, 512, new_pw_len); + ZERO_STRUCT(new_pw); + return true; +} + + +/*********************************************************** + decode a password buffer + *new_pw_len is the length in bytes of the possibly mulitbyte + returned password including termination. +************************************************************/ + +bool decode_pw_buffer(TALLOC_CTX *ctx, + uint8_t in_buffer[516], + char **pp_new_pwrd, + size_t *new_pw_len, + charset_t string_charset) +{ + int byte_len=0; + + *pp_new_pwrd = NULL; + *new_pw_len = 0; + + /* + Warning !!! : This function is called from some rpc call. + The password IN the buffer may be a UNICODE string. + The password IN new_pwrd is an ASCII string + If you reuse that code somewhere else check first. + */ + + /* The length of the new password is in the last 4 bytes of the data buffer. */ + + byte_len = IVAL(in_buffer, 512); + +#ifdef DEBUG_PASSWORD + dump_data(100, in_buffer, 516); +#endif + + /* Password cannot be longer than the size of the password buffer */ + if ( (byte_len < 0) || (byte_len > 512)) { + DEBUG(0, ("decode_pw_buffer: incorrect password length (%d).\n", byte_len)); + DEBUG(0, ("decode_pw_buffer: check that 'encrypt passwords = yes'\n")); + return false; + } + + /* decode into the return buffer. */ + if (!convert_string_talloc(ctx, string_charset, CH_UNIX, + &in_buffer[512 - byte_len], + byte_len, + (void *)pp_new_pwrd, + new_pw_len, + false)) { + DEBUG(0, ("decode_pw_buffer: failed to convert incoming password\n")); + return false; + } + +#ifdef DEBUG_PASSWORD + DEBUG(100,("decode_pw_buffer: new_pwrd: ")); + dump_data(100, (uint8_t *)*pp_new_pwrd, *new_pw_len); + DEBUG(100,("multibyte len:%lu\n", (unsigned long int)*new_pw_len)); + DEBUG(100,("original char len:%d\n", byte_len/2)); +#endif + + return true; +} + +/*********************************************************** + Decode an arc4 encrypted password change buffer. +************************************************************/ + +void encode_or_decode_arc4_passwd_buffer(unsigned char pw_buf[532], const DATA_BLOB *psession_key) +{ + struct MD5Context tctx; + unsigned char key_out[16]; + + /* Confounder is last 16 bytes. */ + + MD5Init(&tctx); + MD5Update(&tctx, &pw_buf[516], 16); + MD5Update(&tctx, psession_key->data, psession_key->length); + MD5Final(key_out, &tctx); + /* arc4 with key_out. */ + arcfour_crypt(pw_buf, key_out, 516); +} + +/*********************************************************** + encode a password buffer with an already unicode password. The + rest of the buffer is filled with random data to make it harder to attack. +************************************************************/ +bool set_pw_in_buffer(uint8_t buffer[516], DATA_BLOB *password) +{ + if (password->length > 512) { + return false; + } + + memcpy(&buffer[512 - password->length], password->data, password->length); + + generate_random_buffer(buffer, 512 - password->length); + + /* + * The length of the new password is in the last 4 bytes of + * the data buffer. + */ + SIVAL(buffer, 512, password->length); + return true; +} + +/*********************************************************** + decode a password buffer + *new_pw_size is the length in bytes of the extracted unicode password +************************************************************/ +bool extract_pw_from_buffer(TALLOC_CTX *mem_ctx, + uint8_t in_buffer[516], DATA_BLOB *new_pass) +{ + int byte_len=0; + + /* The length of the new password is in the last 4 bytes of the data buffer. */ + + byte_len = IVAL(in_buffer, 512); + +#ifdef DEBUG_PASSWORD + dump_data(100, in_buffer, 516); +#endif + + /* Password cannot be longer than the size of the password buffer */ + if ( (byte_len < 0) || (byte_len > 512)) { + return false; + } + + *new_pass = data_blob_talloc(mem_ctx, &in_buffer[512 - byte_len], byte_len); + + if (!new_pass->data) { + return false; + } + + return true; +} + + +/* encode a wkssvc_PasswordBuffer: + * + * similar to samr_CryptPasswordEx. Different: 8byte confounder (instead of + * 16byte), confounder in front of the 516 byte buffer (instead of after that + * buffer), calling MD5Update() first with session_key and then with confounder + * (vice versa in samr) - Guenther */ + +void encode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx, + const char *pwd, + DATA_BLOB *session_key, + struct wkssvc_PasswordBuffer **pwd_buf) +{ + uint8_t buffer[516]; + struct MD5Context ctx; + struct wkssvc_PasswordBuffer *my_pwd_buf = NULL; + DATA_BLOB confounded_session_key; + int confounder_len = 8; + uint8_t confounder[8]; + + my_pwd_buf = talloc_zero(mem_ctx, struct wkssvc_PasswordBuffer); + if (!my_pwd_buf) { + return; + } + + confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16); + + encode_pw_buffer(buffer, pwd, STR_UNICODE); + + generate_random_buffer((uint8_t *)confounder, confounder_len); + + MD5Init(&ctx); + MD5Update(&ctx, session_key->data, session_key->length); + MD5Update(&ctx, confounder, confounder_len); + MD5Final(confounded_session_key.data, &ctx); + + arcfour_crypt_blob(buffer, 516, &confounded_session_key); + + memcpy(&my_pwd_buf->data[0], confounder, confounder_len); + memcpy(&my_pwd_buf->data[8], buffer, 516); + + data_blob_free(&confounded_session_key); + + *pwd_buf = my_pwd_buf; +} + +WERROR decode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx, + struct wkssvc_PasswordBuffer *pwd_buf, + DATA_BLOB *session_key, + char **pwd) +{ + uint8_t buffer[516]; + struct MD5Context ctx; + size_t pwd_len; + + DATA_BLOB confounded_session_key; + + int confounder_len = 8; + uint8_t confounder[8]; + + *pwd = NULL; + + if (!pwd_buf) { + return WERR_BAD_PASSWORD; + } + + if (session_key->length != 16) { + DEBUG(10,("invalid session key\n")); + return WERR_BAD_PASSWORD; + } + + confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16); + + memcpy(&confounder, &pwd_buf->data[0], confounder_len); + memcpy(&buffer, &pwd_buf->data[8], 516); + + MD5Init(&ctx); + MD5Update(&ctx, session_key->data, session_key->length); + MD5Update(&ctx, confounder, confounder_len); + MD5Final(confounded_session_key.data, &ctx); + + arcfour_crypt_blob(buffer, 516, &confounded_session_key); + + if (!decode_pw_buffer(mem_ctx, buffer, pwd, &pwd_len, CH_UTF16)) { + data_blob_free(&confounded_session_key); + return WERR_BAD_PASSWORD; + } + + data_blob_free(&confounded_session_key); + + return WERR_OK; +} + diff --git a/libcli/auth/spnego.h b/libcli/auth/spnego.h new file mode 100644 index 0000000000..4b60f22d32 --- /dev/null +++ b/libcli/auth/spnego.h @@ -0,0 +1,70 @@ +/* + Unix SMB/CIFS implementation. + + RFC2478 Compliant SPNEGO implementation + + Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2003 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#define OID_SPNEGO "1.3.6.1.5.5.2" +#define OID_NTLMSSP "1.3.6.1.4.1.311.2.2.10" +#define OID_KERBEROS5_OLD "1.2.840.48018.1.2.2" +#define OID_KERBEROS5 "1.2.840.113554.1.2.2" + +#define SPNEGO_DELEG_FLAG 0x01 +#define SPNEGO_MUTUAL_FLAG 0x02 +#define SPNEGO_REPLAY_FLAG 0x04 +#define SPNEGO_SEQUENCE_FLAG 0x08 +#define SPNEGO_ANON_FLAG 0x10 +#define SPNEGO_CONF_FLAG 0x20 +#define SPNEGO_INTEG_FLAG 0x40 + +enum spnego_negResult { + SPNEGO_ACCEPT_COMPLETED = 0, + SPNEGO_ACCEPT_INCOMPLETE = 1, + SPNEGO_REJECT = 2, + SPNEGO_NONE_RESULT = 3 +}; + +struct spnego_negTokenInit { + const char **mechTypes; + DATA_BLOB reqFlags; + uint8_t reqFlagsPadding; + DATA_BLOB mechToken; + DATA_BLOB mechListMIC; + char *targetPrincipal; +}; + +struct spnego_negTokenTarg { + uint8_t negResult; + const char *supportedMech; + DATA_BLOB responseToken; + DATA_BLOB mechListMIC; +}; + +struct spnego_data { + int type; + struct spnego_negTokenInit negTokenInit; + struct spnego_negTokenTarg negTokenTarg; +}; + +enum spnego_message_type { + SPNEGO_NEG_TOKEN_INIT = 0, + SPNEGO_NEG_TOKEN_TARG = 1, +}; + +#include "../libcli/auth/spnego_proto.h" diff --git a/libcli/auth/spnego_parse.c b/libcli/auth/spnego_parse.c new file mode 100644 index 0000000000..3f7047b0e0 --- /dev/null +++ b/libcli/auth/spnego_parse.c @@ -0,0 +1,408 @@ +/* + Unix SMB/CIFS implementation. + + RFC2478 Compliant SPNEGO implementation + + Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2003 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "../libcli/auth/spnego.h" +#include "../lib/util/asn1.h" + +static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx, + struct spnego_negTokenInit *token) +{ + ZERO_STRUCTP(token); + + asn1_start_tag(asn1, ASN1_CONTEXT(0)); + asn1_start_tag(asn1, ASN1_SEQUENCE(0)); + + while (!asn1->has_error && 0 < asn1_tag_remaining(asn1)) { + int i; + uint8_t context; + if (!asn1_peek_uint8(asn1, &context)) { + asn1->has_error = true; + break; + } + + switch (context) { + /* Read mechTypes */ + case ASN1_CONTEXT(0): + asn1_start_tag(asn1, ASN1_CONTEXT(0)); + asn1_start_tag(asn1, ASN1_SEQUENCE(0)); + + token->mechTypes = talloc(NULL, const char *); + for (i = 0; !asn1->has_error && + 0 < asn1_tag_remaining(asn1); i++) { + token->mechTypes = talloc_realloc(NULL, + token->mechTypes, + const char *, i+2); + asn1_read_OID(asn1, token->mechTypes, token->mechTypes + i); + } + token->mechTypes[i] = NULL; + + asn1_end_tag(asn1); + asn1_end_tag(asn1); + break; + /* Read reqFlags */ + case ASN1_CONTEXT(1): + asn1_start_tag(asn1, ASN1_CONTEXT(1)); + asn1_read_BitString(asn1, mem_ctx, &token->reqFlags, + &token->reqFlagsPadding); + asn1_end_tag(asn1); + break; + /* Read mechToken */ + case ASN1_CONTEXT(2): + asn1_start_tag(asn1, ASN1_CONTEXT(2)); + asn1_read_OctetString(asn1, mem_ctx, &token->mechToken); + asn1_end_tag(asn1); + break; + /* Read mecListMIC */ + case ASN1_CONTEXT(3): + { + uint8_t type_peek; + asn1_start_tag(asn1, ASN1_CONTEXT(3)); + if (!asn1_peek_uint8(asn1, &type_peek)) { + asn1->has_error = true; + break; + } + if (type_peek == ASN1_OCTET_STRING) { + asn1_read_OctetString(asn1, mem_ctx, + &token->mechListMIC); + } else { + /* RFC 2478 says we have an Octet String here, + but W2k sends something different... */ + char *mechListMIC; + asn1_push_tag(asn1, ASN1_SEQUENCE(0)); + asn1_push_tag(asn1, ASN1_CONTEXT(0)); + asn1_read_GeneralString(asn1, mem_ctx, &mechListMIC); + asn1_pop_tag(asn1); + asn1_pop_tag(asn1); + + token->targetPrincipal = mechListMIC; + } + asn1_end_tag(asn1); + break; + } + default: + asn1->has_error = true; + break; + } + } + + asn1_end_tag(asn1); + asn1_end_tag(asn1); + + return !asn1->has_error; +} + +static bool write_negTokenInit(struct asn1_data *asn1, struct spnego_negTokenInit *token) +{ + asn1_push_tag(asn1, ASN1_CONTEXT(0)); + asn1_push_tag(asn1, ASN1_SEQUENCE(0)); + + /* Write mechTypes */ + if (token->mechTypes && *token->mechTypes) { + int i; + + asn1_push_tag(asn1, ASN1_CONTEXT(0)); + asn1_push_tag(asn1, ASN1_SEQUENCE(0)); + for (i = 0; token->mechTypes[i]; i++) { + asn1_write_OID(asn1, token->mechTypes[i]); + } + asn1_pop_tag(asn1); + asn1_pop_tag(asn1); + } + + /* write reqFlags */ + if (token->reqFlags.length > 0) { + asn1_push_tag(asn1, ASN1_CONTEXT(1)); + asn1_write_BitString(asn1, token->reqFlags.data, + token->reqFlags.length, + token->reqFlagsPadding); + asn1_pop_tag(asn1); + } + + /* write mechToken */ + if (token->mechToken.data) { + asn1_push_tag(asn1, ASN1_CONTEXT(2)); + asn1_write_OctetString(asn1, token->mechToken.data, + token->mechToken.length); + asn1_pop_tag(asn1); + } + + /* write mechListMIC */ + if (token->mechListMIC.data) { + asn1_push_tag(asn1, ASN1_CONTEXT(3)); +#if 0 + /* This is what RFC 2478 says ... */ + asn1_write_OctetString(asn1, token->mechListMIC.data, + token->mechListMIC.length); +#else + /* ... but unfortunately this is what Windows + sends/expects */ + asn1_push_tag(asn1, ASN1_SEQUENCE(0)); + asn1_push_tag(asn1, ASN1_CONTEXT(0)); + asn1_push_tag(asn1, ASN1_GENERAL_STRING); + asn1_write(asn1, token->mechListMIC.data, + token->mechListMIC.length); + asn1_pop_tag(asn1); + asn1_pop_tag(asn1); + asn1_pop_tag(asn1); +#endif + asn1_pop_tag(asn1); + } + + asn1_pop_tag(asn1); + asn1_pop_tag(asn1); + + return !asn1->has_error; +} + +static bool read_negTokenTarg(struct asn1_data *asn1, TALLOC_CTX *mem_ctx, + struct spnego_negTokenTarg *token) +{ + ZERO_STRUCTP(token); + + asn1_start_tag(asn1, ASN1_CONTEXT(1)); + asn1_start_tag(asn1, ASN1_SEQUENCE(0)); + + while (!asn1->has_error && 0 < asn1_tag_remaining(asn1)) { + uint8_t context; + if (!asn1_peek_uint8(asn1, &context)) { + asn1->has_error = true; + break; + } + + switch (context) { + case ASN1_CONTEXT(0): + asn1_start_tag(asn1, ASN1_CONTEXT(0)); + asn1_start_tag(asn1, ASN1_ENUMERATED); + asn1_read_uint8(asn1, &token->negResult); + asn1_end_tag(asn1); + asn1_end_tag(asn1); + break; + case ASN1_CONTEXT(1): + asn1_start_tag(asn1, ASN1_CONTEXT(1)); + asn1_read_OID(asn1, mem_ctx, &token->supportedMech); + asn1_end_tag(asn1); + break; + case ASN1_CONTEXT(2): + asn1_start_tag(asn1, ASN1_CONTEXT(2)); + asn1_read_OctetString(asn1, mem_ctx, &token->responseToken); + asn1_end_tag(asn1); + break; + case ASN1_CONTEXT(3): + asn1_start_tag(asn1, ASN1_CONTEXT(3)); + asn1_read_OctetString(asn1, mem_ctx, &token->mechListMIC); + asn1_end_tag(asn1); + break; + default: + asn1->has_error = true; + break; + } + } + + asn1_end_tag(asn1); + asn1_end_tag(asn1); + + return !asn1->has_error; +} + +static bool write_negTokenTarg(struct asn1_data *asn1, struct spnego_negTokenTarg *token) +{ + asn1_push_tag(asn1, ASN1_CONTEXT(1)); + asn1_push_tag(asn1, ASN1_SEQUENCE(0)); + + if (token->negResult != SPNEGO_NONE_RESULT) { + asn1_push_tag(asn1, ASN1_CONTEXT(0)); + asn1_write_enumerated(asn1, token->negResult); + asn1_pop_tag(asn1); + } + + if (token->supportedMech) { + asn1_push_tag(asn1, ASN1_CONTEXT(1)); + asn1_write_OID(asn1, token->supportedMech); + asn1_pop_tag(asn1); + } + + if (token->responseToken.data) { + asn1_push_tag(asn1, ASN1_CONTEXT(2)); + asn1_write_OctetString(asn1, token->responseToken.data, + token->responseToken.length); + asn1_pop_tag(asn1); + } + + if (token->mechListMIC.data) { + asn1_push_tag(asn1, ASN1_CONTEXT(3)); + asn1_write_OctetString(asn1, token->mechListMIC.data, + token->mechListMIC.length); + asn1_pop_tag(asn1); + } + + asn1_pop_tag(asn1); + asn1_pop_tag(asn1); + + return !asn1->has_error; +} + +ssize_t spnego_read_data(TALLOC_CTX *mem_ctx, DATA_BLOB data, struct spnego_data *token) +{ + struct asn1_data *asn1; + ssize_t ret = -1; + uint8_t context; + + ZERO_STRUCTP(token); + + if (data.length == 0) { + return ret; + } + + asn1 = asn1_init(mem_ctx); + if (asn1 == NULL) { + return -1; + } + + asn1_load(asn1, data); + + if (!asn1_peek_uint8(asn1, &context)) { + asn1->has_error = true; + } else { + switch (context) { + case ASN1_APPLICATION(0): + asn1_start_tag(asn1, ASN1_APPLICATION(0)); + asn1_check_OID(asn1, OID_SPNEGO); + if (read_negTokenInit(asn1, mem_ctx, &token->negTokenInit)) { + token->type = SPNEGO_NEG_TOKEN_INIT; + } + asn1_end_tag(asn1); + break; + case ASN1_CONTEXT(1): + if (read_negTokenTarg(asn1, mem_ctx, &token->negTokenTarg)) { + token->type = SPNEGO_NEG_TOKEN_TARG; + } + break; + default: + asn1->has_error = true; + break; + } + } + + if (!asn1->has_error) ret = asn1->ofs; + asn1_free(asn1); + + return ret; +} + +ssize_t spnego_write_data(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct spnego_data *spnego) +{ + struct asn1_data *asn1 = asn1_init(mem_ctx); + ssize_t ret = -1; + + if (asn1 == NULL) { + return -1; + } + + switch (spnego->type) { + case SPNEGO_NEG_TOKEN_INIT: + asn1_push_tag(asn1, ASN1_APPLICATION(0)); + asn1_write_OID(asn1, OID_SPNEGO); + write_negTokenInit(asn1, &spnego->negTokenInit); + asn1_pop_tag(asn1); + break; + case SPNEGO_NEG_TOKEN_TARG: + write_negTokenTarg(asn1, &spnego->negTokenTarg); + break; + default: + asn1->has_error = true; + break; + } + + if (!asn1->has_error) { + *blob = data_blob_talloc(mem_ctx, asn1->data, asn1->length); + ret = asn1->ofs; + } + asn1_free(asn1); + + return ret; +} + +bool spnego_free_data(struct spnego_data *spnego) +{ + bool ret = true; + + if (!spnego) goto out; + + switch(spnego->type) { + case SPNEGO_NEG_TOKEN_INIT: + if (spnego->negTokenInit.mechTypes) { + talloc_free(spnego->negTokenInit.mechTypes); + } + data_blob_free(&spnego->negTokenInit.reqFlags); + data_blob_free(&spnego->negTokenInit.mechToken); + data_blob_free(&spnego->negTokenInit.mechListMIC); + talloc_free(spnego->negTokenInit.targetPrincipal); + break; + case SPNEGO_NEG_TOKEN_TARG: + if (spnego->negTokenTarg.supportedMech) { + talloc_free(discard_const(spnego->negTokenTarg.supportedMech)); + } + data_blob_free(&spnego->negTokenTarg.responseToken); + data_blob_free(&spnego->negTokenTarg.mechListMIC); + break; + default: + ret = false; + break; + } + ZERO_STRUCTP(spnego); +out: + return ret; +} + +bool spnego_write_mech_types(TALLOC_CTX *mem_ctx, + const char **mech_types, + DATA_BLOB *blob) +{ + struct asn1_data *asn1 = asn1_init(mem_ctx); + + /* Write mechTypes */ + if (mech_types && *mech_types) { + int i; + + asn1_push_tag(asn1, ASN1_SEQUENCE(0)); + for (i = 0; mech_types[i]; i++) { + asn1_write_OID(asn1, mech_types[i]); + } + asn1_pop_tag(asn1); + } + + if (asn1->has_error) { + asn1_free(asn1); + return false; + } + + *blob = data_blob_talloc(mem_ctx, asn1->data, asn1->length); + if (blob->length != asn1->length) { + asn1_free(asn1); + return false; + } + + asn1_free(asn1); + + return true; +} diff --git a/libcli/auth/spnego_proto.h b/libcli/auth/spnego_proto.h new file mode 100644 index 0000000000..5fd5e59c65 --- /dev/null +++ b/libcli/auth/spnego_proto.h @@ -0,0 +1,28 @@ +/* + Unix SMB/CIFS implementation. + + RFC2478 Compliant SPNEGO implementation + + Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2003 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +ssize_t spnego_read_data(TALLOC_CTX *mem_ctx, DATA_BLOB data, struct spnego_data *token); +ssize_t spnego_write_data(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct spnego_data *spnego); +bool spnego_free_data(struct spnego_data *spnego); +bool spnego_write_mech_types(TALLOC_CTX *mem_ctx, + const char **mech_types, + DATA_BLOB *blob); diff --git a/libcli/cldap/cldap.c b/libcli/cldap/cldap.c new file mode 100644 index 0000000000..191d0eeee4 --- /dev/null +++ b/libcli/cldap/cldap.c @@ -0,0 +1,1125 @@ +/* + Unix SMB/CIFS implementation. + + cldap client library + + Copyright (C) Andrew Tridgell 2005 + Copyright (C) Stefan Metzmacher 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +/* + see RFC1798 for details of CLDAP + + basic properties + - carried over UDP on port 389 + - request and response matched by message ID + - request consists of only a single searchRequest element + - response can be in one of two forms + - a single searchResponse, followed by a searchResult + - a single searchResult +*/ + +#include "includes.h" +#include <tevent.h> +#include "../lib/util/dlinklist.h" +#include "../libcli/ldap/ldap_message.h" +#include "../libcli/ldap/ldap_ndr.h" +#include "../libcli/cldap/cldap.h" +#include "../lib/tsocket/tsocket.h" +#include "../libcli/security/dom_sid.h" +#include "../librpc/gen_ndr/ndr_nbt.h" +#include "../lib/util/asn1.h" +#include "../lib/util/tevent_ntstatus.h" + +#undef strcasecmp + +/* + context structure for operations on cldap packets +*/ +struct cldap_socket { + /* the low level socket */ + struct tdgram_context *sock; + + /* + * Are we in connected mode, which means + * we get ICMP errors back instead of timing + * out requests. And we can only send requests + * to the connected peer. + */ + bool connected; + + /* + * we allow sync requests only, if the caller + * did not pass an event context to cldap_socket_init() + */ + struct { + bool allow_poll; + struct tevent_context *ctx; + } event; + + /* the queue for outgoing dgrams */ + struct tevent_queue *send_queue; + + /* do we have an async tsocket_recvfrom request pending */ + struct tevent_req *recv_subreq; + + struct { + /* a queue of pending search requests */ + struct cldap_search_state *list; + + /* mapping from message_id to pending request */ + struct idr_context *idr; + } searches; + + /* what to do with incoming request packets */ + struct { + void (*handler)(struct cldap_socket *, + void *private_data, + struct cldap_incoming *); + void *private_data; + } incoming; +}; + +struct cldap_search_state { + struct cldap_search_state *prev, *next; + + struct { + struct cldap_socket *cldap; + } caller; + + int message_id; + + struct { + uint32_t idx; + uint32_t delay; + uint32_t count; + struct tsocket_address *dest; + DATA_BLOB blob; + } request; + + struct { + struct cldap_incoming *in; + struct asn1_data *asn1; + } response; + + struct tevent_req *req; +}; + +static int cldap_socket_destructor(struct cldap_socket *c) +{ + while (c->searches.list) { + struct cldap_search_state *s = c->searches.list; + DLIST_REMOVE(c->searches.list, s); + ZERO_STRUCT(s->caller); + } + + talloc_free(c->recv_subreq); + talloc_free(c->send_queue); + talloc_free(c->sock); + return 0; +} + +static void cldap_recvfrom_done(struct tevent_req *subreq); + +static bool cldap_recvfrom_setup(struct cldap_socket *c) +{ + if (c->recv_subreq) { + return true; + } + + if (!c->searches.list && !c->incoming.handler) { + return true; + } + + c->recv_subreq = tdgram_recvfrom_send(c, c->event.ctx, c->sock); + if (!c->recv_subreq) { + return false; + } + tevent_req_set_callback(c->recv_subreq, cldap_recvfrom_done, c); + + return true; +} + +static void cldap_recvfrom_stop(struct cldap_socket *c) +{ + if (!c->recv_subreq) { + return; + } + + if (c->searches.list || c->incoming.handler) { + return; + } + + talloc_free(c->recv_subreq); + c->recv_subreq = NULL; +} + +static void cldap_socket_recv_dgram(struct cldap_socket *c, + struct cldap_incoming *in); + +static void cldap_recvfrom_done(struct tevent_req *subreq) +{ + struct cldap_socket *c = tevent_req_callback_data(subreq, + struct cldap_socket); + struct cldap_incoming *in = NULL; + ssize_t ret; + + c->recv_subreq = NULL; + + in = talloc_zero(c, struct cldap_incoming); + if (!in) { + goto nomem; + } + + ret = tdgram_recvfrom_recv(subreq, + &in->recv_errno, + in, + &in->buf, + &in->src); + talloc_free(subreq); + subreq = NULL; + if (ret >= 0) { + in->len = ret; + } + if (ret == -1 && in->recv_errno == 0) { + in->recv_errno = EIO; + } + + /* this function should free or steal 'in' */ + cldap_socket_recv_dgram(c, in); + in = NULL; + + if (!cldap_recvfrom_setup(c)) { + goto nomem; + } + + return; + +nomem: + talloc_free(subreq); + talloc_free(in); + /*TODO: call a dead socket handler */ + return; +} + +/* + handle recv events on a cldap socket +*/ +static void cldap_socket_recv_dgram(struct cldap_socket *c, + struct cldap_incoming *in) +{ + DATA_BLOB blob; + struct asn1_data *asn1; + void *p; + struct cldap_search_state *search; + NTSTATUS status; + + if (in->recv_errno != 0) { + goto error; + } + + blob = data_blob_const(in->buf, in->len); + + asn1 = asn1_init(in); + if (!asn1) { + goto nomem; + } + + if (!asn1_load(asn1, blob)) { + goto nomem; + } + + in->ldap_msg = talloc(in, struct ldap_message); + if (in->ldap_msg == NULL) { + goto nomem; + } + + /* this initial decode is used to find the message id */ + status = ldap_decode(asn1, NULL, in->ldap_msg); + if (!NT_STATUS_IS_OK(status)) { + goto nterror; + } + + /* find the pending request */ + p = idr_find(c->searches.idr, in->ldap_msg->messageid); + if (p == NULL) { + if (!c->incoming.handler) { + goto done; + } + + /* this function should free or steal 'in' */ + c->incoming.handler(c, c->incoming.private_data, in); + return; + } + + search = talloc_get_type(p, struct cldap_search_state); + search->response.in = talloc_move(search, &in); + search->response.asn1 = asn1; + search->response.asn1->ofs = 0; + + tevent_req_done(search->req); + goto done; + +nomem: + in->recv_errno = ENOMEM; +error: + status = map_nt_error_from_unix(in->recv_errno); +nterror: + /* in connected mode the first pending search gets the error */ + if (!c->connected) { + /* otherwise we just ignore the error */ + goto done; + } + if (!c->searches.list) { + goto done; + } + tevent_req_nterror(c->searches.list->req, status); +done: + talloc_free(in); +} + +/* + initialise a cldap_sock +*/ +NTSTATUS cldap_socket_init(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + const struct tsocket_address *local_addr, + const struct tsocket_address *remote_addr, + struct cldap_socket **_cldap) +{ + struct cldap_socket *c = NULL; + struct tsocket_address *any = NULL; + NTSTATUS status; + int ret; + + c = talloc_zero(mem_ctx, struct cldap_socket); + if (!c) { + goto nomem; + } + + if (!ev) { + ev = tevent_context_init(c); + if (!ev) { + goto nomem; + } + c->event.allow_poll = true; + } + c->event.ctx = ev; + + if (!local_addr) { + ret = tsocket_address_inet_from_strings(c, "ip", + NULL, 0, + &any); + if (ret != 0) { + status = map_nt_error_from_unix(errno); + goto nterror; + } + local_addr = any; + } + + c->searches.idr = idr_init(c); + if (!c->searches.idr) { + goto nomem; + } + + ret = tdgram_inet_udp_socket(local_addr, remote_addr, + c, &c->sock); + if (ret != 0) { + status = map_nt_error_from_unix(errno); + goto nterror; + } + talloc_free(any); + + if (remote_addr) { + c->connected = true; + } + + c->send_queue = tevent_queue_create(c, "cldap_send_queue"); + if (!c->send_queue) { + goto nomem; + } + + talloc_set_destructor(c, cldap_socket_destructor); + + *_cldap = c; + return NT_STATUS_OK; + +nomem: + status = NT_STATUS_NO_MEMORY; +nterror: + talloc_free(c); + return status; +} + +/* + setup a handler for incoming requests +*/ +NTSTATUS cldap_set_incoming_handler(struct cldap_socket *c, + void (*handler)(struct cldap_socket *, + void *private_data, + struct cldap_incoming *), + void *private_data) +{ + if (c->connected) { + return NT_STATUS_PIPE_CONNECTED; + } + + /* if sync requests are allowed, we don't allow an incoming handler */ + if (c->event.allow_poll) { + return NT_STATUS_INVALID_PIPE_STATE; + } + + c->incoming.handler = handler; + c->incoming.private_data = private_data; + + if (!cldap_recvfrom_setup(c)) { + ZERO_STRUCT(c->incoming); + return NT_STATUS_NO_MEMORY; + } + + return NT_STATUS_OK; +} + +struct cldap_reply_state { + struct tsocket_address *dest; + DATA_BLOB blob; +}; + +static void cldap_reply_state_destroy(struct tevent_req *subreq); + +/* + queue a cldap reply for send +*/ +NTSTATUS cldap_reply_send(struct cldap_socket *cldap, struct cldap_reply *io) +{ + struct cldap_reply_state *state = NULL; + struct ldap_message *msg; + DATA_BLOB blob1, blob2; + NTSTATUS status; + struct tevent_req *subreq; + + if (cldap->connected) { + return NT_STATUS_PIPE_CONNECTED; + } + + if (!io->dest) { + return NT_STATUS_INVALID_ADDRESS; + } + + state = talloc(cldap, struct cldap_reply_state); + NT_STATUS_HAVE_NO_MEMORY(state); + + state->dest = tsocket_address_copy(io->dest, state); + if (!state->dest) { + goto nomem; + } + + msg = talloc(state, struct ldap_message); + if (!msg) { + goto nomem; + } + + msg->messageid = io->messageid; + msg->controls = NULL; + + if (io->response) { + msg->type = LDAP_TAG_SearchResultEntry; + msg->r.SearchResultEntry = *io->response; + + if (!ldap_encode(msg, NULL, &blob1, state)) { + status = NT_STATUS_INVALID_PARAMETER; + goto failed; + } + } else { + blob1 = data_blob(NULL, 0); + } + + msg->type = LDAP_TAG_SearchResultDone; + msg->r.SearchResultDone = *io->result; + + if (!ldap_encode(msg, NULL, &blob2, state)) { + status = NT_STATUS_INVALID_PARAMETER; + goto failed; + } + talloc_free(msg); + + state->blob = data_blob_talloc(state, NULL, blob1.length + blob2.length); + if (!state->blob.data) { + goto nomem; + } + + memcpy(state->blob.data, blob1.data, blob1.length); + memcpy(state->blob.data+blob1.length, blob2.data, blob2.length); + data_blob_free(&blob1); + data_blob_free(&blob2); + + subreq = tdgram_sendto_queue_send(state, + cldap->event.ctx, + cldap->sock, + cldap->send_queue, + state->blob.data, + state->blob.length, + state->dest); + if (!subreq) { + goto nomem; + } + /* the callback will just free the state, as we don't need a result */ + tevent_req_set_callback(subreq, cldap_reply_state_destroy, state); + + return NT_STATUS_OK; + +nomem: + status = NT_STATUS_NO_MEMORY; +failed: + talloc_free(state); + return status; +} + +static void cldap_reply_state_destroy(struct tevent_req *subreq) +{ + struct cldap_reply_state *state = tevent_req_callback_data(subreq, + struct cldap_reply_state); + + /* we don't want to know the result here, we just free the state */ + talloc_free(subreq); + talloc_free(state); +} + +static int cldap_search_state_destructor(struct cldap_search_state *s) +{ + if (s->caller.cldap) { + if (s->message_id != -1) { + idr_remove(s->caller.cldap->searches.idr, s->message_id); + s->message_id = -1; + } + DLIST_REMOVE(s->caller.cldap->searches.list, s); + cldap_recvfrom_stop(s->caller.cldap); + ZERO_STRUCT(s->caller); + } + + return 0; +} + +static void cldap_search_state_queue_done(struct tevent_req *subreq); +static void cldap_search_state_wakeup_done(struct tevent_req *subreq); + +/* + queue a cldap reply for send +*/ +struct tevent_req *cldap_search_send(TALLOC_CTX *mem_ctx, + struct cldap_socket *cldap, + const struct cldap_search *io) +{ + struct tevent_req *req, *subreq; + struct cldap_search_state *state = NULL; + struct ldap_message *msg; + struct ldap_SearchRequest *search; + struct timeval now; + struct timeval end; + uint32_t i; + int ret; + + req = tevent_req_create(mem_ctx, &state, + struct cldap_search_state); + if (!req) { + return NULL; + } + ZERO_STRUCTP(state); + state->req = req; + state->caller.cldap = cldap; + state->message_id = -1; + + talloc_set_destructor(state, cldap_search_state_destructor); + + if (io->in.dest_address) { + if (cldap->connected) { + tevent_req_nterror(req, NT_STATUS_PIPE_CONNECTED); + goto post; + } + ret = tsocket_address_inet_from_strings(state, + "ip", + io->in.dest_address, + io->in.dest_port, + &state->request.dest); + if (ret != 0) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + goto post; + } + } else { + if (!cldap->connected) { + tevent_req_nterror(req, NT_STATUS_INVALID_ADDRESS); + goto post; + } + state->request.dest = NULL; + } + + state->message_id = idr_get_new_random(cldap->searches.idr, + state, UINT16_MAX); + if (state->message_id == -1) { + tevent_req_nterror(req, NT_STATUS_INSUFFICIENT_RESOURCES); + goto post; + } + + msg = talloc(state, struct ldap_message); + if (tevent_req_nomem(msg, req)) { + goto post; + } + + msg->messageid = state->message_id; + msg->type = LDAP_TAG_SearchRequest; + msg->controls = NULL; + search = &msg->r.SearchRequest; + + search->basedn = ""; + search->scope = LDAP_SEARCH_SCOPE_BASE; + search->deref = LDAP_DEREFERENCE_NEVER; + search->timelimit = 0; + search->sizelimit = 0; + search->attributesonly = false; + search->num_attributes = str_list_length(io->in.attributes); + search->attributes = io->in.attributes; + search->tree = ldb_parse_tree(msg, io->in.filter); + if (tevent_req_nomem(search->tree, req)) { + goto post; + } + + if (!ldap_encode(msg, NULL, &state->request.blob, state)) { + tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER); + goto post; + } + talloc_free(msg); + + state->request.idx = 0; + state->request.delay = 10*1000*1000; + state->request.count = 3; + if (io->in.timeout > 0) { + state->request.delay = io->in.timeout * 1000 * 1000; + state->request.count = io->in.retries + 1; + } + + now = tevent_timeval_current(); + end = now; + for (i = 0; i < state->request.count; i++) { + end = tevent_timeval_add(&end, 0, state->request.delay); + } + + if (!tevent_req_set_endtime(req, state->caller.cldap->event.ctx, end)) { + tevent_req_nomem(NULL, req); + goto post; + } + + subreq = tdgram_sendto_queue_send(state, + state->caller.cldap->event.ctx, + state->caller.cldap->sock, + state->caller.cldap->send_queue, + state->request.blob.data, + state->request.blob.length, + state->request.dest); + if (tevent_req_nomem(subreq, req)) { + goto post; + } + tevent_req_set_callback(subreq, cldap_search_state_queue_done, req); + + DLIST_ADD_END(cldap->searches.list, state, struct cldap_search_state *); + + return req; + + post: + return tevent_req_post(req, cldap->event.ctx); +} + +static void cldap_search_state_queue_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + struct cldap_search_state *state = tevent_req_data(req, + struct cldap_search_state); + ssize_t ret; + int sys_errno = 0; + struct timeval next; + + ret = tdgram_sendto_queue_recv(subreq, &sys_errno); + talloc_free(subreq); + if (ret == -1) { + NTSTATUS status; + status = map_nt_error_from_unix(sys_errno); + DLIST_REMOVE(state->caller.cldap->searches.list, state); + ZERO_STRUCT(state->caller.cldap); + tevent_req_nterror(req, status); + return; + } + + state->request.idx++; + + /* wait for incoming traffic */ + if (!cldap_recvfrom_setup(state->caller.cldap)) { + tevent_req_nomem(NULL, req); + return; + } + + if (state->request.idx > state->request.count) { + /* we just wait for the response or a timeout */ + return; + } + + next = tevent_timeval_current_ofs(0, state->request.delay); + subreq = tevent_wakeup_send(state, + state->caller.cldap->event.ctx, + next); + if (tevent_req_nomem(subreq, req)) { + return; + } + tevent_req_set_callback(subreq, cldap_search_state_wakeup_done, req); +} + +static void cldap_search_state_wakeup_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + struct cldap_search_state *state = tevent_req_data(req, + struct cldap_search_state); + bool ok; + + ok = tevent_wakeup_recv(subreq); + talloc_free(subreq); + if (!ok) { + tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR); + return; + } + + subreq = tdgram_sendto_queue_send(state, + state->caller.cldap->event.ctx, + state->caller.cldap->sock, + state->caller.cldap->send_queue, + state->request.blob.data, + state->request.blob.length, + state->request.dest); + if (tevent_req_nomem(subreq, req)) { + return; + } + tevent_req_set_callback(subreq, cldap_search_state_queue_done, req); +} + +/* + receive a cldap reply +*/ +NTSTATUS cldap_search_recv(struct tevent_req *req, + TALLOC_CTX *mem_ctx, + struct cldap_search *io) +{ + struct cldap_search_state *state = tevent_req_data(req, + struct cldap_search_state); + struct ldap_message *ldap_msg; + NTSTATUS status; + + if (tevent_req_is_nterror(req, &status)) { + goto failed; + } + + ldap_msg = talloc(mem_ctx, struct ldap_message); + if (!ldap_msg) { + goto nomem; + } + + status = ldap_decode(state->response.asn1, NULL, ldap_msg); + if (!NT_STATUS_IS_OK(status)) { + goto failed; + } + + ZERO_STRUCT(io->out); + + /* the first possible form has a search result in first place */ + if (ldap_msg->type == LDAP_TAG_SearchResultEntry) { + io->out.response = talloc(mem_ctx, struct ldap_SearchResEntry); + if (!io->out.response) { + goto nomem; + } + *io->out.response = ldap_msg->r.SearchResultEntry; + + /* decode the 2nd part */ + status = ldap_decode(state->response.asn1, NULL, ldap_msg); + if (!NT_STATUS_IS_OK(status)) { + goto failed; + } + } + + if (ldap_msg->type != LDAP_TAG_SearchResultDone) { + status = NT_STATUS_LDAP(LDAP_PROTOCOL_ERROR); + goto failed; + } + + io->out.result = talloc(mem_ctx, struct ldap_Result); + if (!io->out.result) { + goto nomem; + } + *io->out.result = ldap_msg->r.SearchResultDone; + + if (io->out.result->resultcode != LDAP_SUCCESS) { + status = NT_STATUS_LDAP(io->out.result->resultcode); + goto failed; + } + + tevent_req_received(req); + return NT_STATUS_OK; + +nomem: + status = NT_STATUS_NO_MEMORY; +failed: + tevent_req_received(req); + return status; +} + + +/* + synchronous cldap search +*/ +NTSTATUS cldap_search(struct cldap_socket *cldap, + TALLOC_CTX *mem_ctx, + struct cldap_search *io) +{ + struct tevent_req *req; + NTSTATUS status; + + if (!cldap->event.allow_poll) { + return NT_STATUS_INVALID_PIPE_STATE; + } + + if (cldap->searches.list) { + return NT_STATUS_PIPE_BUSY; + } + + req = cldap_search_send(mem_ctx, cldap, io); + NT_STATUS_HAVE_NO_MEMORY(req); + + if (!tevent_req_poll(req, cldap->event.ctx)) { + talloc_free(req); + return NT_STATUS_INTERNAL_ERROR; + } + + status = cldap_search_recv(req, mem_ctx, io); + talloc_free(req); + + return status; +} + +struct cldap_netlogon_state { + struct cldap_search search; +}; + +static void cldap_netlogon_state_done(struct tevent_req *subreq); +/* + queue a cldap netlogon for send +*/ +struct tevent_req *cldap_netlogon_send(TALLOC_CTX *mem_ctx, + struct cldap_socket *cldap, + const struct cldap_netlogon *io) +{ + struct tevent_req *req, *subreq; + struct cldap_netlogon_state *state; + char *filter; + static const char * const attr[] = { "NetLogon", NULL }; + + req = tevent_req_create(mem_ctx, &state, + struct cldap_netlogon_state); + if (!req) { + return NULL; + } + + filter = talloc_asprintf(state, "(&(NtVer=%s)", + ldap_encode_ndr_uint32(state, io->in.version)); + if (tevent_req_nomem(filter, req)) { + goto post; + } + if (io->in.user) { + filter = talloc_asprintf_append_buffer(filter, "(User=%s)", io->in.user); + if (tevent_req_nomem(filter, req)) { + goto post; + } + } + if (io->in.host) { + filter = talloc_asprintf_append_buffer(filter, "(Host=%s)", io->in.host); + if (tevent_req_nomem(filter, req)) { + goto post; + } + } + if (io->in.realm) { + filter = talloc_asprintf_append_buffer(filter, "(DnsDomain=%s)", io->in.realm); + if (tevent_req_nomem(filter, req)) { + goto post; + } + } + if (io->in.acct_control != -1) { + filter = talloc_asprintf_append_buffer(filter, "(AAC=%s)", + ldap_encode_ndr_uint32(state, io->in.acct_control)); + if (tevent_req_nomem(filter, req)) { + goto post; + } + } + if (io->in.domain_sid) { + struct dom_sid *sid = dom_sid_parse_talloc(state, io->in.domain_sid); + if (tevent_req_nomem(sid, req)) { + goto post; + } + filter = talloc_asprintf_append_buffer(filter, "(domainSid=%s)", + ldap_encode_ndr_dom_sid(state, sid)); + if (tevent_req_nomem(filter, req)) { + goto post; + } + } + if (io->in.domain_guid) { + struct GUID guid; + NTSTATUS status; + status = GUID_from_string(io->in.domain_guid, &guid); + if (tevent_req_nterror(req, status)) { + goto post; + } + filter = talloc_asprintf_append_buffer(filter, "(DomainGuid=%s)", + ldap_encode_ndr_GUID(state, &guid)); + if (tevent_req_nomem(filter, req)) { + goto post; + } + } + filter = talloc_asprintf_append_buffer(filter, ")"); + if (tevent_req_nomem(filter, req)) { + goto post; + } + + if (io->in.dest_address) { + state->search.in.dest_address = talloc_strdup(state, + io->in.dest_address); + if (tevent_req_nomem(state->search.in.dest_address, req)) { + goto post; + } + state->search.in.dest_port = io->in.dest_port; + } else { + state->search.in.dest_address = NULL; + state->search.in.dest_port = 0; + } + state->search.in.filter = filter; + state->search.in.attributes = attr; + state->search.in.timeout = 2; + state->search.in.retries = 2; + + subreq = cldap_search_send(state, cldap, &state->search); + if (tevent_req_nomem(subreq, req)) { + goto post; + } + tevent_req_set_callback(subreq, cldap_netlogon_state_done, req); + + return req; +post: + return tevent_req_post(req, cldap->event.ctx); +} + +static void cldap_netlogon_state_done(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + struct cldap_netlogon_state *state = tevent_req_data(req, + struct cldap_netlogon_state); + NTSTATUS status; + + status = cldap_search_recv(subreq, state, &state->search); + talloc_free(subreq); + + if (tevent_req_nterror(req, status)) { + return; + } + + tevent_req_done(req); +} + +/* + receive a cldap netlogon reply +*/ +NTSTATUS cldap_netlogon_recv(struct tevent_req *req, + struct smb_iconv_convenience *iconv_convenience, + TALLOC_CTX *mem_ctx, + struct cldap_netlogon *io) +{ + struct cldap_netlogon_state *state = tevent_req_data(req, + struct cldap_netlogon_state); + NTSTATUS status; + DATA_BLOB *data; + + if (tevent_req_is_nterror(req, &status)) { + goto failed; + } + + if (state->search.out.response == NULL) { + status = NT_STATUS_NOT_FOUND; + goto failed; + } + + if (state->search.out.response->num_attributes != 1 || + strcasecmp(state->search.out.response->attributes[0].name, "netlogon") != 0 || + state->search.out.response->attributes[0].num_values != 1 || + state->search.out.response->attributes[0].values->length < 2) { + status = NT_STATUS_UNEXPECTED_NETWORK_ERROR; + goto failed; + } + data = state->search.out.response->attributes[0].values; + + status = pull_netlogon_samlogon_response(data, mem_ctx, + iconv_convenience, + &io->out.netlogon); + if (!NT_STATUS_IS_OK(status)) { + goto failed; + } + + if (io->in.map_response) { + map_netlogon_samlogon_response(&io->out.netlogon); + } + + status = NT_STATUS_OK; +failed: + tevent_req_received(req); + return status; +} + +/* + sync cldap netlogon search +*/ +NTSTATUS cldap_netlogon(struct cldap_socket *cldap, + struct smb_iconv_convenience *iconv_convenience, + TALLOC_CTX *mem_ctx, + struct cldap_netlogon *io) +{ + struct tevent_req *req; + NTSTATUS status; + + if (!cldap->event.allow_poll) { + return NT_STATUS_INVALID_PIPE_STATE; + } + + if (cldap->searches.list) { + return NT_STATUS_PIPE_BUSY; + } + + req = cldap_netlogon_send(mem_ctx, cldap, io); + NT_STATUS_HAVE_NO_MEMORY(req); + + if (!tevent_req_poll(req, cldap->event.ctx)) { + talloc_free(req); + return NT_STATUS_INTERNAL_ERROR; + } + + status = cldap_netlogon_recv(req, iconv_convenience, mem_ctx, io); + talloc_free(req); + + return status; +} + + +/* + send an empty reply (used on any error, so the client doesn't keep waiting + or send the bad request again) +*/ +NTSTATUS cldap_empty_reply(struct cldap_socket *cldap, + uint32_t message_id, + struct tsocket_address *dest) +{ + NTSTATUS status; + struct cldap_reply reply; + struct ldap_Result result; + + reply.messageid = message_id; + reply.dest = dest; + reply.response = NULL; + reply.result = &result; + + ZERO_STRUCT(result); + + status = cldap_reply_send(cldap, &reply); + + return status; +} + +/* + send an error reply (used on any error, so the client doesn't keep waiting + or send the bad request again) +*/ +NTSTATUS cldap_error_reply(struct cldap_socket *cldap, + uint32_t message_id, + struct tsocket_address *dest, + int resultcode, + const char *errormessage) +{ + NTSTATUS status; + struct cldap_reply reply; + struct ldap_Result result; + + reply.messageid = message_id; + reply.dest = dest; + reply.response = NULL; + reply.result = &result; + + ZERO_STRUCT(result); + result.resultcode = resultcode; + result.errormessage = errormessage; + + status = cldap_reply_send(cldap, &reply); + + return status; +} + + +/* + send a netlogon reply +*/ +NTSTATUS cldap_netlogon_reply(struct cldap_socket *cldap, + struct smb_iconv_convenience *iconv_convenience, + uint32_t message_id, + struct tsocket_address *dest, + uint32_t version, + struct netlogon_samlogon_response *netlogon) +{ + NTSTATUS status; + struct cldap_reply reply; + struct ldap_SearchResEntry response; + struct ldap_Result result; + TALLOC_CTX *tmp_ctx = talloc_new(cldap); + DATA_BLOB blob; + + status = push_netlogon_samlogon_response(&blob, tmp_ctx, + iconv_convenience, + netlogon); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(tmp_ctx); + return status; + } + reply.messageid = message_id; + reply.dest = dest; + reply.response = &response; + reply.result = &result; + + ZERO_STRUCT(result); + + response.dn = ""; + response.num_attributes = 1; + response.attributes = talloc(tmp_ctx, struct ldb_message_element); + NT_STATUS_HAVE_NO_MEMORY(response.attributes); + response.attributes->name = "netlogon"; + response.attributes->num_values = 1; + response.attributes->values = &blob; + + status = cldap_reply_send(cldap, &reply); + + talloc_free(tmp_ctx); + + return status; +} + diff --git a/libcli/cldap/cldap.h b/libcli/cldap/cldap.h new file mode 100644 index 0000000000..111fa2cfc4 --- /dev/null +++ b/libcli/cldap/cldap.h @@ -0,0 +1,133 @@ +/* + Unix SMB/CIFS implementation. + + a async CLDAP library + + Copyright (C) Andrew Tridgell 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "../libcli/netlogon.h" + +struct ldap_message; +struct tsocket_address; +struct cldap_socket; + +struct cldap_incoming { + int recv_errno; + uint8_t *buf; + size_t len; + struct tsocket_address *src; + struct ldap_message *ldap_msg; +}; + +/* + a general cldap search request +*/ +struct cldap_search { + struct { + const char *dest_address; + uint16_t dest_port; + const char *filter; + const char * const *attributes; + int timeout; + int retries; + } in; + struct { + struct ldap_SearchResEntry *response; + struct ldap_Result *result; + } out; +}; + +NTSTATUS cldap_socket_init(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + const struct tsocket_address *local_addr, + const struct tsocket_address *remote_addr, + struct cldap_socket **_cldap); + +NTSTATUS cldap_set_incoming_handler(struct cldap_socket *cldap, + void (*handler)(struct cldap_socket *, + void *private_data, + struct cldap_incoming *), + void *private_data); +struct tevent_req *cldap_search_send(TALLOC_CTX *mem_ctx, + struct cldap_socket *cldap, + const struct cldap_search *io); +NTSTATUS cldap_search_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, + struct cldap_search *io); +NTSTATUS cldap_search(struct cldap_socket *cldap, TALLOC_CTX *mem_ctx, + struct cldap_search *io); + +/* + a general cldap reply +*/ +struct cldap_reply { + uint32_t messageid; + struct tsocket_address *dest; + struct ldap_SearchResEntry *response; + struct ldap_Result *result; +}; + +NTSTATUS cldap_reply_send(struct cldap_socket *cldap, struct cldap_reply *io); + +NTSTATUS cldap_empty_reply(struct cldap_socket *cldap, + uint32_t message_id, + struct tsocket_address *dst); +NTSTATUS cldap_error_reply(struct cldap_socket *cldap, + uint32_t message_id, + struct tsocket_address *dst, + int resultcode, + const char *errormessage); + +/* + a netlogon cldap request +*/ +struct cldap_netlogon { + struct { + const char *dest_address; + uint16_t dest_port; + const char *realm; + const char *host; + const char *user; + const char *domain_guid; + const char *domain_sid; + int acct_control; + uint32_t version; + bool map_response; + } in; + struct { + struct netlogon_samlogon_response netlogon; + } out; +}; + +struct tevent_req *cldap_netlogon_send(TALLOC_CTX *mem_ctx, + struct cldap_socket *cldap, + const struct cldap_netlogon *io); +NTSTATUS cldap_netlogon_recv(struct tevent_req *req, + struct smb_iconv_convenience *iconv_convenience, + TALLOC_CTX *mem_ctx, + struct cldap_netlogon *io); +NTSTATUS cldap_netlogon(struct cldap_socket *cldap, + struct smb_iconv_convenience *iconv_convenience, + TALLOC_CTX *mem_ctx, + struct cldap_netlogon *io); + +NTSTATUS cldap_netlogon_reply(struct cldap_socket *cldap, + struct smb_iconv_convenience *iconv_convenience, + uint32_t message_id, + struct tsocket_address *dst, + uint32_t version, + struct netlogon_samlogon_response *netlogon); + diff --git a/libcli/cldap/config.mk b/libcli/cldap/config.mk new file mode 100644 index 0000000000..a4a75b4909 --- /dev/null +++ b/libcli/cldap/config.mk @@ -0,0 +1,7 @@ +[SUBSYSTEM::LIBCLI_CLDAP] +PUBLIC_DEPENDENCIES = LIBCLI_LDAP +PRIVATE_DEPENDENCIES = LIBTSOCKET LIBSAMBA-UTIL UTIL_TEVENT LIBLDB LIBCLI_NETLOGON + +LIBCLI_CLDAP_OBJ_FILES = ../libcli/cldap/cldap.o +# PUBLIC_HEADERS += ../libcli/cldap/cldap.h + diff --git a/libcli/drsuapi/config.mk b/libcli/drsuapi/config.mk new file mode 100644 index 0000000000..4c68702280 --- /dev/null +++ b/libcli/drsuapi/config.mk @@ -0,0 +1,6 @@ +[SUBSYSTEM::LIBCLI_DRSUAPI] +PUBLIC_DEPENDENCIES = \ + LIBCLI_AUTH + +LIBCLI_DRSUAPI_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/drsuapi/, \ + repl_decrypt.o) diff --git a/libcli/drsuapi/drsuapi.h b/libcli/drsuapi/drsuapi.h new file mode 100644 index 0000000000..a4fb15fa49 --- /dev/null +++ b/libcli/drsuapi/drsuapi.h @@ -0,0 +1,38 @@ +/* + Unix SMB/CIFS mplementation. + Helper functions for applying replicated objects + + Copyright (C) Stefan Metzmacher <metze@samba.org> 2007 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +*/ + +WERROR drsuapi_decrypt_attribute_value(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + bool rid_crypt, + uint32_t rid, + DATA_BLOB *in, + DATA_BLOB *out); + +WERROR drsuapi_decrypt_attribute(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + uint32_t rid, + struct drsuapi_DsReplicaAttribute *attr); + + +WERROR drsuapi_encrypt_attribute(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + uint32_t rid, + struct drsuapi_DsReplicaAttribute *attr); diff --git a/libcli/drsuapi/repl_decrypt.c b/libcli/drsuapi/repl_decrypt.c new file mode 100644 index 0000000000..924e79992f --- /dev/null +++ b/libcli/drsuapi/repl_decrypt.c @@ -0,0 +1,352 @@ +/* + Unix SMB/CIFS mplementation. + Helper functions for applying replicated objects + + Copyright (C) Stefan Metzmacher <metze@samba.org> 2007 + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "includes.h" +#include "../lib/util/dlinklist.h" +#include "librpc/gen_ndr/ndr_misc.h" +#include "librpc/gen_ndr/ndr_drsuapi.h" +#include "librpc/gen_ndr/ndr_drsblobs.h" +#include "../lib/crypto/crypto.h" +#include "../libcli/drsuapi/drsuapi.h" +#include "libcli/auth/libcli_auth.h" + +WERROR drsuapi_decrypt_attribute_value(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + bool rid_crypt, + uint32_t rid, + DATA_BLOB *in, + DATA_BLOB *out) +{ + DATA_BLOB confounder; + DATA_BLOB enc_buffer; + + struct MD5Context md5; + uint8_t _enc_key[16]; + DATA_BLOB enc_key; + + DATA_BLOB dec_buffer; + + uint32_t crc32_given; + uint32_t crc32_calc; + DATA_BLOB checked_buffer; + + DATA_BLOB plain_buffer; + + /* + * users with rid == 0 should not exist + */ + if (rid_crypt && rid == 0) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + /* + * the first 16 bytes at the beginning are the confounder + * followed by the 4 byte crc32 checksum + */ + if (in->length < 20) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + confounder = data_blob_const(in->data, 16); + enc_buffer = data_blob_const(in->data + 16, in->length - 16); + + /* + * build the encryption key md5 over the session key followed + * by the confounder + * + * here the gensec session key is used and + * not the dcerpc ncacn_ip_tcp "SystemLibraryDTC" key! + */ + enc_key = data_blob_const(_enc_key, sizeof(_enc_key)); + MD5Init(&md5); + MD5Update(&md5, gensec_skey->data, gensec_skey->length); + MD5Update(&md5, confounder.data, confounder.length); + MD5Final(enc_key.data, &md5); + + /* + * copy the encrypted buffer part and + * decrypt it using the created encryption key using arcfour + */ + dec_buffer = data_blob_const(enc_buffer.data, enc_buffer.length); + arcfour_crypt_blob(dec_buffer.data, dec_buffer.length, &enc_key); + + /* + * the first 4 byte are the crc32 checksum + * of the remaining bytes + */ + crc32_given = IVAL(dec_buffer.data, 0); + crc32_calc = crc32_calc_buffer(dec_buffer.data + 4 , dec_buffer.length - 4); + checked_buffer = data_blob_const(dec_buffer.data + 4, dec_buffer.length - 4); + + plain_buffer = data_blob_talloc(mem_ctx, checked_buffer.data, checked_buffer.length); + W_ERROR_HAVE_NO_MEMORY(plain_buffer.data); + + if (crc32_given != crc32_calc) { + return WERR_SEC_E_DECRYPT_FAILURE; + } + /* + * The following rid_crypt obfuscation isn't session specific + * and not really needed here, because we allways know the rid of the + * user account. + * + * some attributes with this 'additional encryption' include + * dBCSPwd, unicodePwd, ntPwdHistory, lmPwdHistory + * + * But for the rest of samba it's easier when we remove this static + * obfuscation here + */ + if (rid_crypt) { + uint32_t i, num_hashes; + + if ((checked_buffer.length % 16) != 0) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + num_hashes = plain_buffer.length / 16; + for (i = 0; i < num_hashes; i++) { + uint32_t offset = i * 16; + sam_rid_crypt(rid, checked_buffer.data + offset, plain_buffer.data + offset, 0); + } + } + + *out = plain_buffer; + return WERR_OK; +} + +WERROR drsuapi_decrypt_attribute(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + uint32_t rid, + struct drsuapi_DsReplicaAttribute *attr) +{ + WERROR status; + DATA_BLOB *enc_data; + DATA_BLOB plain_data; + bool rid_crypt = false; + + if (attr->value_ctr.num_values == 0) { + return WERR_OK; + } + + switch (attr->attid) { + case DRSUAPI_ATTRIBUTE_dBCSPwd: + case DRSUAPI_ATTRIBUTE_unicodePwd: + case DRSUAPI_ATTRIBUTE_ntPwdHistory: + case DRSUAPI_ATTRIBUTE_lmPwdHistory: + rid_crypt = true; + break; + case DRSUAPI_ATTRIBUTE_supplementalCredentials: + case DRSUAPI_ATTRIBUTE_priorValue: + case DRSUAPI_ATTRIBUTE_currentValue: + case DRSUAPI_ATTRIBUTE_trustAuthOutgoing: + case DRSUAPI_ATTRIBUTE_trustAuthIncoming: + case DRSUAPI_ATTRIBUTE_initialAuthOutgoing: + case DRSUAPI_ATTRIBUTE_initialAuthIncoming: + break; + default: + return WERR_OK; + } + + if (attr->value_ctr.num_values > 1) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + if (!attr->value_ctr.values[0].blob) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + enc_data = attr->value_ctr.values[0].blob; + + status = drsuapi_decrypt_attribute_value(mem_ctx, + gensec_skey, + rid_crypt, + rid, + enc_data, + &plain_data); + W_ERROR_NOT_OK_RETURN(status); + + talloc_free(attr->value_ctr.values[0].blob->data); + *attr->value_ctr.values[0].blob = plain_data; + + return WERR_OK; +} + +static WERROR drsuapi_encrypt_attribute_value(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + bool rid_crypt, + uint32_t rid, + DATA_BLOB *in, + DATA_BLOB *out) +{ + DATA_BLOB rid_crypt_out = data_blob(NULL, 0); + DATA_BLOB confounder; + + struct MD5Context md5; + uint8_t _enc_key[16]; + DATA_BLOB enc_key; + + DATA_BLOB enc_buffer; + + uint32_t crc32_calc; + + /* + * users with rid == 0 should not exist + */ + if (rid_crypt && rid == 0) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + /* + * The following rid_crypt obfuscation isn't session specific + * and not really needed here, because we allways know the rid of the + * user account. + * + * some attributes with this 'additional encryption' include + * dBCSPwd, unicodePwd, ntPwdHistory, lmPwdHistory + * + * But for the rest of samba it's easier when we remove this static + * obfuscation here + */ + if (rid_crypt) { + uint32_t i, num_hashes; + rid_crypt_out = data_blob_talloc(mem_ctx, in->data, in->length); + W_ERROR_HAVE_NO_MEMORY(rid_crypt_out.data); + + if ((rid_crypt_out.length % 16) != 0) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + num_hashes = rid_crypt_out.length / 16; + for (i = 0; i < num_hashes; i++) { + uint32_t offset = i * 16; + sam_rid_crypt(rid, in->data + offset, rid_crypt_out.data + offset, 1); + } + in = &rid_crypt_out; + } + + /* + * the first 16 bytes at the beginning are the confounder + * followed by the 4 byte crc32 checksum + */ + + enc_buffer = data_blob_talloc(mem_ctx, NULL, in->length+20); + if (!enc_buffer.data) { + talloc_free(rid_crypt_out.data); + return WERR_NOMEM; + }; + + confounder = data_blob_const(enc_buffer.data, 16); + generate_random_buffer(confounder.data, confounder.length); + + /* + * build the encryption key md5 over the session key followed + * by the confounder + * + * here the gensec session key is used and + * not the dcerpc ncacn_ip_tcp "SystemLibraryDTC" key! + */ + enc_key = data_blob_const(_enc_key, sizeof(_enc_key)); + MD5Init(&md5); + MD5Update(&md5, gensec_skey->data, gensec_skey->length); + MD5Update(&md5, confounder.data, confounder.length); + MD5Final(enc_key.data, &md5); + + /* + * the first 4 byte are the crc32 checksum + * of the remaining bytes + */ + crc32_calc = crc32_calc_buffer(in->data, in->length); + SIVAL(enc_buffer.data, 16, crc32_calc); + + /* + * copy the plain buffer part and + * encrypt it using the created encryption key using arcfour + */ + memcpy(enc_buffer.data+20, in->data, in->length); + talloc_free(rid_crypt_out.data); + + arcfour_crypt_blob(enc_buffer.data+16, enc_buffer.length-16, &enc_key); + + *out = enc_buffer; + + return WERR_OK; +} + +/* + encrypt a DRSUAPI attribute ready for sending over the wire + Only some attribute types are encrypted + */ +WERROR drsuapi_encrypt_attribute(TALLOC_CTX *mem_ctx, + const DATA_BLOB *gensec_skey, + uint32_t rid, + struct drsuapi_DsReplicaAttribute *attr) +{ + WERROR status; + DATA_BLOB *plain_data; + DATA_BLOB enc_data; + bool rid_crypt = false; + + if (attr->value_ctr.num_values == 0) { + return WERR_OK; + } + + switch (attr->attid) { + case DRSUAPI_ATTRIBUTE_dBCSPwd: + case DRSUAPI_ATTRIBUTE_unicodePwd: + case DRSUAPI_ATTRIBUTE_ntPwdHistory: + case DRSUAPI_ATTRIBUTE_lmPwdHistory: + rid_crypt = true; + break; + case DRSUAPI_ATTRIBUTE_supplementalCredentials: + case DRSUAPI_ATTRIBUTE_priorValue: + case DRSUAPI_ATTRIBUTE_currentValue: + case DRSUAPI_ATTRIBUTE_trustAuthOutgoing: + case DRSUAPI_ATTRIBUTE_trustAuthIncoming: + case DRSUAPI_ATTRIBUTE_initialAuthOutgoing: + case DRSUAPI_ATTRIBUTE_initialAuthIncoming: + break; + default: + return WERR_OK; + } + + if (attr->value_ctr.num_values > 1) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + if (!attr->value_ctr.values[0].blob) { + return WERR_DS_DRA_INVALID_PARAMETER; + } + + plain_data = attr->value_ctr.values[0].blob; + + status = drsuapi_encrypt_attribute_value(mem_ctx, + gensec_skey, + rid_crypt, + rid, + plain_data, + &enc_data); + W_ERROR_NOT_OK_RETURN(status); + + talloc_free(attr->value_ctr.values[0].blob->data); + *attr->value_ctr.values[0].blob = enc_data; + + return WERR_OK; +} + diff --git a/libcli/ldap/ldap_message.c b/libcli/ldap/ldap_message.c index 9b00d0188d..8b0f8a2ea1 100644 --- a/libcli/ldap/ldap_message.c +++ b/libcli/ldap/ldap_message.c @@ -1230,8 +1230,8 @@ _PUBLIC_ NTSTATUS ldap_decode(struct asn1_data *data, msg->type = LDAP_TAG_SearchRequest; asn1_start_tag(data, tag); asn1_read_OctetString_talloc(msg, data, &r->basedn); - asn1_read_enumerated(data, (int *)&(r->scope)); - asn1_read_enumerated(data, (int *)&(r->deref)); + asn1_read_enumerated(data, (int *)(void *)&(r->scope)); + asn1_read_enumerated(data, (int *)(void *)&(r->deref)); asn1_read_Integer(data, &sizelimit); r->sizelimit = sizelimit; asn1_read_Integer(data, &timelimit); diff --git a/libcli/named_pipe_auth/config.mk b/libcli/named_pipe_auth/config.mk new file mode 100644 index 0000000000..6d44ef4141 --- /dev/null +++ b/libcli/named_pipe_auth/config.mk @@ -0,0 +1,4 @@ +[SUBSYSTEM::NAMED_PIPE_AUTH_TSTREAM] +PUBLIC_DEPENDENCIES = NDR_NAMED_PIPE_AUTH TEVENT TSOCKET + +NAMED_PIPE_AUTH_TSTREAM_OBJ_FILES = ../libcli/named_pipe_auth/npa_tstream.o diff --git a/libcli/named_pipe_auth/npa_tstream.c b/libcli/named_pipe_auth/npa_tstream.c new file mode 100644 index 0000000000..1c9ab8f626 --- /dev/null +++ b/libcli/named_pipe_auth/npa_tstream.c @@ -0,0 +1,1071 @@ +/* + Unix SMB/CIFS implementation. + + Copyright (C) Stefan Metzmacher 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "system/network.h" +#include "../util/tevent_unix.h" +#include "../lib/tsocket/tsocket.h" +#include "../lib/tsocket/tsocket_internal.h" +#include "../librpc/gen_ndr/ndr_named_pipe_auth.h" +#include "../libcli/named_pipe_auth/npa_tstream.h" +#include "libcli/raw/smb.h" + +static const struct tstream_context_ops tstream_npa_ops; + +struct tstream_npa { + struct tstream_context *unix_stream; + + uint16_t file_type; + + struct iovec pending; +}; + +struct tstream_npa_connect_state { + struct { + struct tevent_context *ev; + struct smb_iconv_convenience *smb_iconv_c; + } caller; + + const char *unix_path; + struct tsocket_address *unix_laddr; + struct tsocket_address *unix_raddr; + struct tstream_context *unix_stream; + + struct named_pipe_auth_req auth_req; + DATA_BLOB auth_req_blob; + struct iovec auth_req_iov; + + struct named_pipe_auth_rep auth_rep; + DATA_BLOB auth_rep_blob; +}; + +static void tstream_npa_connect_unix_done(struct tevent_req *subreq); + +struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct smb_iconv_convenience *smb_iconv_c, + const char *directory, + const char *npipe, + const struct tsocket_address *client, + const char *client_name_in, + const struct tsocket_address *server, + const char *server_name, + const struct netr_SamInfo3 *sam_info3, + DATA_BLOB session_key, + DATA_BLOB delegated_creds) +{ + struct tevent_req *req; + struct tstream_npa_connect_state *state; + struct tevent_req *subreq; + int ret; + enum ndr_err_code ndr_err; + + req = tevent_req_create(mem_ctx, &state, + struct tstream_npa_connect_state); + if (!req) { + return NULL; + } + + state->caller.ev = ev; + state->caller.smb_iconv_c = smb_iconv_c; + + state->unix_path = talloc_asprintf(state, "%s/%s", + directory, + npipe); + if (tevent_req_nomem(state->unix_path, req)) { + goto post; + } + + ret = tsocket_address_unix_from_path(state, + "", + &state->unix_laddr); + if (ret == -1) { + tevent_req_error(req, errno); + goto post; + } + + ret = tsocket_address_unix_from_path(state, + state->unix_path, + &state->unix_raddr); + if (ret == -1) { + tevent_req_error(req, errno); + goto post; + } + + ZERO_STRUCT(state->auth_req); + if (client) { + struct named_pipe_auth_req_info3 *info3; + + if (!server) { + tevent_req_error(req, EINVAL); + goto post; + } + + state->auth_req.level = 3; + info3 = &state->auth_req.info.info3; + + info3->client_name = client_name_in; + info3->client_addr = tsocket_address_inet_addr_string(client, state); + if (!info3->client_addr) { + /* errno might be EINVAL */ + tevent_req_error(req, errno); + goto post; + } + info3->client_port = tsocket_address_inet_port(client); + if (!info3->client_name) { + info3->client_name = info3->client_addr; + } + + info3->server_addr = tsocket_address_inet_addr_string(server, state); + if (!info3->server_addr) { + /* errno might be EINVAL */ + tevent_req_error(req, errno); + goto post; + } + info3->server_port = tsocket_address_inet_port(server); + if (!info3->server_name) { + info3->server_name = info3->server_addr; + } + + info3->sam_info3 = discard_const_p(struct netr_SamInfo3, sam_info3); + info3->session_key_length = session_key.length; + info3->session_key = session_key.data; + info3->gssapi_delegated_creds_length = delegated_creds.length; + info3->gssapi_delegated_creds = delegated_creds.data; + + } else if (sam_info3) { + state->auth_req.level = 1; + state->auth_req.info.info1 = *sam_info3; + } else { + state->auth_req.level = 0; + } + + if (DEBUGLVL(10)) { + NDR_PRINT_DEBUG(named_pipe_auth_req, &state->auth_req); + } + + ndr_err = ndr_push_struct_blob(&state->auth_req_blob, + state, smb_iconv_c, &state->auth_req, + (ndr_push_flags_fn_t)ndr_push_named_pipe_auth_req); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + tevent_req_error(req, EINVAL); + goto post; + } + + state->auth_req_iov.iov_base = state->auth_req_blob.data; + state->auth_req_iov.iov_len = state->auth_req_blob.length; + + subreq = tstream_unix_connect_send(state, + state->caller.ev, + state->unix_laddr, + state->unix_raddr); + if (tevent_req_nomem(subreq, req)) { + goto post; + } + tevent_req_set_callback(subreq, tstream_npa_connect_unix_done, req); + + return req; + +post: + tevent_req_post(req, ev); + return req; +} + +static void tstream_npa_connect_writev_done(struct tevent_req *subreq); + +static void tstream_npa_connect_unix_done(struct tevent_req *subreq) +{ + struct tevent_req *req = + tevent_req_callback_data(subreq, + struct tevent_req); + struct tstream_npa_connect_state *state = + tevent_req_data(req, + struct tstream_npa_connect_state); + int ret; + int sys_errno; + + ret = tstream_unix_connect_recv(subreq, &sys_errno, + state, &state->unix_stream); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + subreq = tstream_writev_send(state, + state->caller.ev, + state->unix_stream, + &state->auth_req_iov, 1); + if (tevent_req_nomem(subreq, req)) { + return; + } + tevent_req_set_callback(subreq, tstream_npa_connect_writev_done, req); +} + +static int tstream_npa_connect_next_vector(struct tstream_context *unix_stream, + void *private_data, + TALLOC_CTX *mem_ctx, + struct iovec **_vector, + size_t *_count); +static void tstream_npa_connect_readv_done(struct tevent_req *subreq); + +static void tstream_npa_connect_writev_done(struct tevent_req *subreq) +{ + struct tevent_req *req = + tevent_req_callback_data(subreq, + struct tevent_req); + struct tstream_npa_connect_state *state = + tevent_req_data(req, + struct tstream_npa_connect_state); + int ret; + int sys_errno; + + ret = tstream_writev_recv(subreq, &sys_errno); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + state->auth_rep_blob = data_blob_const(NULL, 0); + + subreq = tstream_readv_pdu_send(state, state->caller.ev, + state->unix_stream, + tstream_npa_connect_next_vector, + state); + if (tevent_req_nomem(subreq, req)) { + return; + } + tevent_req_set_callback(subreq, tstream_npa_connect_readv_done, req); +} + +static int tstream_npa_connect_next_vector(struct tstream_context *unix_stream, + void *private_data, + TALLOC_CTX *mem_ctx, + struct iovec **_vector, + size_t *_count) +{ + struct tstream_npa_connect_state *state = talloc_get_type_abort(private_data, + struct tstream_npa_connect_state); + struct iovec *vector; + size_t count; + off_t ofs = 0; + + if (state->auth_rep_blob.length == 0) { + state->auth_rep_blob = data_blob_talloc(state, NULL, 4); + if (!state->auth_rep_blob.data) { + return -1; + } + } else if (state->auth_rep_blob.length == 4) { + uint32_t msg_len; + + ofs = 4; + + msg_len = RIVAL(state->auth_rep_blob.data, 0); + + if (msg_len > 0x00FFFFFF) { + errno = EMSGSIZE; + return -1; + } + + if (msg_len == 0) { + errno = EMSGSIZE; + return -1; + } + + msg_len += ofs; + + state->auth_rep_blob.data = talloc_realloc(state, + state->auth_rep_blob.data, + uint8_t, msg_len); + if (!state->auth_rep_blob.data) { + return -1; + } + state->auth_rep_blob.length = msg_len; + } else { + *_vector = NULL; + *_count = 0; + return 0; + } + + /* we need to get a message header */ + vector = talloc_array(mem_ctx, struct iovec, 1); + if (!vector) { + return -1; + } + vector[0].iov_base = state->auth_rep_blob.data + ofs; + vector[0].iov_len = state->auth_rep_blob.length - ofs; + count = 1; + + *_vector = vector; + *_count = count; + return 0; +} + +static void tstream_npa_connect_readv_done(struct tevent_req *subreq) +{ + struct tevent_req *req = + tevent_req_callback_data(subreq, + struct tevent_req); + struct tstream_npa_connect_state *state = + tevent_req_data(req, + struct tstream_npa_connect_state); + int ret; + int sys_errno; + enum ndr_err_code ndr_err; + + ret = tstream_readv_pdu_recv(subreq, &sys_errno); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + DEBUG(10,("name_pipe_auth_rep(client)[%u]\n", + (uint32_t)state->auth_rep_blob.length)); + dump_data(11, state->auth_rep_blob.data, state->auth_rep_blob.length); + + ndr_err = ndr_pull_struct_blob( + &state->auth_rep_blob, state, + state->caller.smb_iconv_c, &state->auth_rep, + (ndr_pull_flags_fn_t)ndr_pull_named_pipe_auth_rep); + + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + DEBUG(0, ("ndr_pull_named_pipe_auth_rep failed: %s\n", + ndr_map_error2string(ndr_err))); + tevent_req_error(req, EIO); + return; + } + + if (DEBUGLVL(10)) { + NDR_PRINT_DEBUG(named_pipe_auth_rep, &state->auth_rep); + } + + if (state->auth_rep.length < 16) { + DEBUG(0, ("req invalid length: %u < 16\n", + state->auth_rep.length)); + tevent_req_error(req, EIO); + return; + } + + if (strcmp(NAMED_PIPE_AUTH_MAGIC, state->auth_rep.magic) != 0) { + DEBUG(0, ("req invalid magic: %s != %s\n", + state->auth_rep.magic, NAMED_PIPE_AUTH_MAGIC)); + tevent_req_error(req, EIO); + return; + } + + if (!NT_STATUS_IS_OK(state->auth_rep.status)) { + DEBUG(0, ("req failed: %s\n", + nt_errstr(state->auth_rep.status))); + tevent_req_error(req, EACCES); + return; + } + + if (state->auth_rep.level != state->auth_req.level) { + DEBUG(0, ("req invalid level: %u != %u\n", + state->auth_rep.level, state->auth_req.level)); + tevent_req_error(req, EIO); + return; + } + + tevent_req_done(req); +} + +int _tstream_npa_connect_recv(struct tevent_req *req, + int *perrno, + TALLOC_CTX *mem_ctx, + struct tstream_context **_stream, + uint16_t *_file_type, + uint16_t *_device_state, + uint64_t *_allocation_size, + const char *location) +{ + struct tstream_npa_connect_state *state = + tevent_req_data(req, + struct tstream_npa_connect_state); + struct tstream_context *stream; + struct tstream_npa *npas; + uint16_t device_state = 0; + uint64_t allocation_size = 0; + + if (tevent_req_is_unix_error(req, perrno)) { + tevent_req_received(req); + return -1; + } + + stream = tstream_context_create(mem_ctx, + &tstream_npa_ops, + &npas, + struct tstream_npa, + location); + if (!stream) { + return -1; + } + ZERO_STRUCTP(npas); + + npas->unix_stream = talloc_move(stream, &state->unix_stream); + switch (state->auth_rep.level) { + case 0: + case 1: + npas->file_type = FILE_TYPE_BYTE_MODE_PIPE; + device_state = 0x00ff; + allocation_size = 2048; + break; + case 2: + npas->file_type = state->auth_rep.info.info2.file_type; + device_state = state->auth_rep.info.info2.device_state; + allocation_size = state->auth_rep.info.info2.allocation_size; + break; + case 3: + npas->file_type = state->auth_rep.info.info3.file_type; + device_state = state->auth_rep.info.info3.device_state; + allocation_size = state->auth_rep.info.info3.allocation_size; + break; + } + + *_stream = stream; + *_file_type = npas->file_type; + *_device_state = device_state; + *_allocation_size = allocation_size; + tevent_req_received(req); + return 0; +} + +static ssize_t tstream_npa_pending_bytes(struct tstream_context *stream) +{ + struct tstream_npa *npas = tstream_context_data(stream, + struct tstream_npa); + ssize_t ret; + + if (!npas->unix_stream) { + errno = ENOTCONN; + return -1; + } + + switch (npas->file_type) { + case FILE_TYPE_BYTE_MODE_PIPE: + ret = tstream_pending_bytes(npas->unix_stream); + break; + + case FILE_TYPE_MESSAGE_MODE_PIPE: + ret = npas->pending.iov_len; + break; + + default: + ret = -1; + } + + return ret; +} + +struct tstream_npa_readv_state { + struct tstream_context *stream; + + struct iovec *vector; + size_t count; + + /* the header for message mode */ + uint8_t hdr[2]; + bool wait_for_hdr; + + int ret; +}; + +static void tstream_npa_readv_byte_mode_handler(struct tevent_req *subreq); +static int tstream_npa_readv_next_vector(struct tstream_context *stream, + void *private_data, + TALLOC_CTX *mem_ctx, + struct iovec **_vector, + size_t *_count); +static void tstream_npa_readv_msg_mode_handler(struct tevent_req *subreq); + +static struct tevent_req *tstream_npa_readv_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct tstream_context *stream, + struct iovec *vector, + size_t count) +{ + struct tevent_req *req; + struct tstream_npa_readv_state *state; + struct tstream_npa *npas = tstream_context_data(stream, struct tstream_npa); + struct tevent_req *subreq; + off_t ofs; + size_t left; + uint8_t *pbase; + + req = tevent_req_create(mem_ctx, &state, + struct tstream_npa_readv_state); + if (!req) { + return NULL; + } + + state->stream = stream; + state->ret = 0; + + if (!npas->unix_stream) { + tevent_req_error(req, ENOTCONN); + goto post; + } + + switch (npas->file_type) { + case FILE_TYPE_BYTE_MODE_PIPE: + state->vector = vector; + state->count = count; + + subreq = tstream_readv_send(state, + ev, + npas->unix_stream, + state->vector, + state->count); + if (tevent_req_nomem(subreq,req)) { + goto post; + } + tevent_req_set_callback(subreq, + tstream_npa_readv_byte_mode_handler, + req); + + return req; + + case FILE_TYPE_MESSAGE_MODE_PIPE: + /* + * we make a copy of the vector and prepend a header + * with the length + */ + state->vector = talloc_array(state, struct iovec, count); + if (tevent_req_nomem(state->vector, req)) { + goto post; + } + memcpy(state->vector, vector, sizeof(struct iovec)*count); + state->count = count; + + /* + * copy the pending buffer first + */ + ofs = 0; + left = npas->pending.iov_len; + pbase = (uint8_t *)npas->pending.iov_base; + + while (left > 0 && state->count > 0) { + uint8_t *base; + base = (uint8_t *)state->vector[0].iov_base; + if (left < state->vector[0].iov_len) { + memcpy(base, pbase + ofs, left); + + base += left; + state->vector[0].iov_base = base; + state->vector[0].iov_len -= left; + + ofs += left; + left = 0; + TALLOC_FREE(pbase); + ZERO_STRUCT(npas->pending); + break; + } + memcpy(base, pbase + ofs, state->vector[0].iov_len); + + ofs += state->vector[0].iov_len; + left -= state->vector[0].iov_len; + state->vector += 1; + state->count -= 1; + + if (left == 0) { + TALLOC_FREE(pbase); + ZERO_STRUCT(npas->pending); + break; + } + } + + if (left > 0) { + memmove(pbase, pbase + ofs, left); + npas->pending.iov_base = pbase; + npas->pending.iov_len = left; + /* + * this cannot fail and even if it + * fails we can handle it + */ + pbase = talloc_realloc(npas, pbase, uint8_t, left); + if (pbase) { + npas->pending.iov_base = pbase; + } + pbase = NULL; + } + + state->ret += ofs; + + if (state->count == 0) { + tevent_req_done(req); + goto post; + } + + ZERO_STRUCT(state->hdr); + state->wait_for_hdr = false; + + subreq = tstream_readv_pdu_send(state, + ev, + npas->unix_stream, + tstream_npa_readv_next_vector, + state); + if (tevent_req_nomem(subreq, req)) { + goto post; + } + tevent_req_set_callback(subreq, + tstream_npa_readv_msg_mode_handler, + req); + + return req; + } + + /* this can't happen */ + tevent_req_error(req, EINVAL); + goto post; + + post: + tevent_req_post(req, ev); + return req; +} + +static void tstream_npa_readv_byte_mode_handler(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + struct tstream_npa_readv_state *state = tevent_req_data(req, + struct tstream_npa_readv_state); + int ret; + int sys_errno; + + ret = tstream_readv_recv(subreq, &sys_errno); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + state->ret = ret; + + tevent_req_done(req); +} + +static int tstream_npa_readv_next_vector(struct tstream_context *unix_stream, + void *private_data, + TALLOC_CTX *mem_ctx, + struct iovec **_vector, + size_t *_count) +{ + struct tstream_npa_readv_state *state = talloc_get_type_abort(private_data, + struct tstream_npa_readv_state); + struct tstream_npa *npas = tstream_context_data(state->stream, + struct tstream_npa); + struct iovec *vector; + size_t count; + uint16_t msg_len; + size_t left; + + if (state->count == 0) { + *_vector = NULL; + *_count = 0; + return 0; + } + + if (!state->wait_for_hdr) { + /* we need to get a message header */ + vector = talloc_array(mem_ctx, struct iovec, 1); + if (!vector) { + return -1; + } + ZERO_STRUCT(state->hdr); + vector[0].iov_base = state->hdr; + vector[0].iov_len = sizeof(state->hdr); + + count = 1; + + state->wait_for_hdr = true; + + *_vector = vector; + *_count = count; + return 0; + } + + /* and now fill the callers buffers and maybe the pending buffer */ + state->wait_for_hdr = false; + + msg_len = SVAL(state->hdr, 0); + + if (msg_len == 0) { + errno = EIO; + return -1; + } + + state->wait_for_hdr = false; + + /* +1 because we may need to fill the pending buffer */ + vector = talloc_array(mem_ctx, struct iovec, state->count + 1); + if (!vector) { + return -1; + } + + count = 0; + left = msg_len; + while (left > 0 && state->count > 0) { + if (left < state->vector[0].iov_len) { + uint8_t *base; + base = (uint8_t *)state->vector[0].iov_base; + vector[count].iov_base = base; + vector[count].iov_len = left; + count++; + base += left; + state->vector[0].iov_base = base; + state->vector[0].iov_len -= left; + break; + } + vector[count] = state->vector[0]; + count++; + left -= state->vector[0].iov_len; + state->vector += 1; + state->count -= 1; + } + + if (left > 0) { + /* + * if the message if longer than the buffers the caller + * requested, we need to consume the rest of the message + * into the pending buffer, where the next readv can + * be served from. + */ + npas->pending.iov_base = talloc_array(npas, uint8_t, left); + if (!npas->pending.iov_base) { + return -1; + } + npas->pending.iov_len = left; + + vector[count] = npas->pending; + count++; + } + + state->ret += (msg_len - left); + + *_vector = vector; + *_count = count; + return 0; +} + +static void tstream_npa_readv_msg_mode_handler(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + int ret; + int sys_errno; + + ret = tstream_readv_pdu_recv(subreq, &sys_errno); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + /* + * we do not set state->ret here as ret includes the headr size. + * we set it in tstream_npa_readv_pdu_next_vector() + */ + + tevent_req_done(req); +} + +static int tstream_npa_readv_recv(struct tevent_req *req, + int *perrno) +{ + struct tstream_npa_readv_state *state = tevent_req_data(req, + struct tstream_npa_readv_state); + int ret; + + ret = tsocket_simple_int_recv(req, perrno); + if (ret == 0) { + ret = state->ret; + } + + tevent_req_received(req); + return ret; +} + +struct tstream_npa_writev_state { + const struct iovec *vector; + size_t count; + + /* the header for message mode */ + uint8_t hdr[2]; + + int ret; +}; + +static void tstream_npa_writev_handler(struct tevent_req *subreq); + +static struct tevent_req *tstream_npa_writev_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct tstream_context *stream, + const struct iovec *vector, + size_t count) +{ + struct tevent_req *req; + struct tstream_npa_writev_state *state; + struct tstream_npa *npas = tstream_context_data(stream, struct tstream_npa); + struct tevent_req *subreq; + size_t msg_len; + size_t i; + struct iovec *new_vector; + + req = tevent_req_create(mem_ctx, &state, + struct tstream_npa_writev_state); + if (!req) { + return NULL; + } + + state->ret = 0; + + if (!npas->unix_stream) { + tevent_req_error(req, ENOTCONN); + goto post; + } + + switch (npas->file_type) { + case FILE_TYPE_BYTE_MODE_PIPE: + state->vector = vector; + state->count = count; + break; + + case FILE_TYPE_MESSAGE_MODE_PIPE: + /* + * we make a copy of the vector and prepend a header + * with the length + */ + new_vector = talloc_array(state, struct iovec, count + 1); + if (tevent_req_nomem(new_vector, req)) { + goto post; + } + new_vector[0].iov_base = state->hdr; + new_vector[0].iov_len = sizeof(state->hdr); + memcpy(new_vector + 1, vector, sizeof(struct iovec)*count); + + state->vector = new_vector; + state->count = count + 1; + + msg_len = 0; + for (i=0; i < count; i++) { + msg_len += vector[i].iov_len; + } + + if (msg_len > UINT16_MAX) { + tevent_req_error(req, EMSGSIZE); + goto post; + } + + SSVAL(state->hdr, 0, msg_len); + break; + } + + subreq = tstream_writev_send(state, + ev, + npas->unix_stream, + state->vector, + state->count); + if (tevent_req_nomem(subreq, req)) { + goto post; + } + tevent_req_set_callback(subreq, tstream_npa_writev_handler, req); + + return req; + + post: + tevent_req_post(req, ev); + return req; +} + +static void tstream_npa_writev_handler(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + struct tstream_npa_writev_state *state = tevent_req_data(req, + struct tstream_npa_writev_state); + int ret; + int sys_errno; + + ret = tstream_writev_recv(subreq, &sys_errno); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + state->ret = ret; + + tevent_req_done(req); +} + +static int tstream_npa_writev_recv(struct tevent_req *req, + int *perrno) +{ + struct tstream_npa_writev_state *state = tevent_req_data(req, + struct tstream_npa_writev_state); + int ret; + + ret = tsocket_simple_int_recv(req, perrno); + if (ret == 0) { + ret = state->ret; + } + + tevent_req_received(req); + return ret; +} + +struct tstream_npa_disconnect_state { + struct tstream_context *stream; +}; + +static void tstream_npa_disconnect_handler(struct tevent_req *subreq); + +static struct tevent_req *tstream_npa_disconnect_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct tstream_context *stream) +{ + struct tstream_npa *npas = tstream_context_data(stream, struct tstream_npa); + struct tevent_req *req; + struct tstream_npa_disconnect_state *state; + struct tevent_req *subreq; + + req = tevent_req_create(mem_ctx, &state, + struct tstream_npa_disconnect_state); + if (req == NULL) { + return NULL; + } + + state->stream = stream; + + if (!npas->unix_stream) { + tevent_req_error(req, ENOTCONN); + goto post; + } + + subreq = tstream_disconnect_send(state, + ev, + npas->unix_stream); + if (tevent_req_nomem(subreq, req)) { + goto post; + } + tevent_req_set_callback(subreq, tstream_npa_disconnect_handler, req); + + return req; + +post: + tevent_req_post(req, ev); + return req; +} + +static void tstream_npa_disconnect_handler(struct tevent_req *subreq) +{ + struct tevent_req *req = tevent_req_callback_data(subreq, + struct tevent_req); + struct tstream_npa_disconnect_state *state = tevent_req_data(req, + struct tstream_npa_disconnect_state); + struct tstream_context *stream = state->stream; + struct tstream_npa *npas = tstream_context_data(stream, struct tstream_npa); + int ret; + int sys_errno; + + ret = tstream_disconnect_recv(subreq, &sys_errno); + TALLOC_FREE(subreq); + if (ret == -1) { + tevent_req_error(req, sys_errno); + return; + } + + TALLOC_FREE(npas->unix_stream); + + tevent_req_done(req); +} + +static int tstream_npa_disconnect_recv(struct tevent_req *req, + int *perrno) +{ + int ret; + + ret = tsocket_simple_int_recv(req, perrno); + + tevent_req_received(req); + return ret; +} + +static const struct tstream_context_ops tstream_npa_ops = { + .name = "npa", + + .pending_bytes = tstream_npa_pending_bytes, + + .readv_send = tstream_npa_readv_send, + .readv_recv = tstream_npa_readv_recv, + + .writev_send = tstream_npa_writev_send, + .writev_recv = tstream_npa_writev_recv, + + .disconnect_send = tstream_npa_disconnect_send, + .disconnect_recv = tstream_npa_disconnect_recv, +}; + +int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx, + int fd, + uint16_t file_type, + struct tstream_context **_stream, + const char *location) +{ + struct tstream_context *stream; + struct tstream_npa *npas; + int ret; + + switch (file_type) { + case FILE_TYPE_BYTE_MODE_PIPE: + break; + case FILE_TYPE_MESSAGE_MODE_PIPE: + break; + default: + errno = EINVAL; + return -1; + } + + stream = tstream_context_create(mem_ctx, + &tstream_npa_ops, + &npas, + struct tstream_npa, + location); + if (!stream) { + return -1; + } + ZERO_STRUCTP(npas); + + npas->file_type = file_type; + + ret = tstream_bsd_existing_socket(stream, fd, + &npas->unix_stream); + if (ret == -1) { + int saved_errno = errno; + talloc_free(stream); + errno = saved_errno; + return -1; + } + + *_stream = stream; + return 0; +} + diff --git a/libcli/named_pipe_auth/npa_tstream.h b/libcli/named_pipe_auth/npa_tstream.h new file mode 100644 index 0000000000..bff010f094 --- /dev/null +++ b/libcli/named_pipe_auth/npa_tstream.h @@ -0,0 +1,60 @@ +/* + Unix SMB/CIFS implementation. + + Copyright (C) Stefan Metzmacher 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef NPA_TSTREAM_H +#define NPA_TSTREAM_H + +struct tevent_req; +struct tevent_context; +struct netr_SamInfo3; + +struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev, + struct smb_iconv_convenience *smb_iconv_c, + const char *directory, + const char *npipe, + const struct tsocket_address *client, + const char *client_name_in, + const struct tsocket_address *server, + const char *server_name, + const struct netr_SamInfo3 *info3, + DATA_BLOB session_key, + DATA_BLOB delegated_creds); +int _tstream_npa_connect_recv(struct tevent_req *req, + int *perrno, + TALLOC_CTX *mem_ctx, + struct tstream_context **stream, + uint16_t *file_type, + uint16_t *device_state, + uint64_t *allocation_size, + const char *location); +#define tstream_npa_connect_recv(req, perrno, mem_ctx, stream, f, d, a) \ + _tstream_npa_connect_recv(req, perrno, mem_ctx, stream, f, d, a, \ + __location__) + +int _tstream_npa_existing_socket(TALLOC_CTX *mem_ctx, + int fd, + uint16_t file_type, + struct tstream_context **_stream, + const char *location); +#define tstream_npa_existing_socket(mem_ctx, fd, ft, stream) \ + _tstream_npa_existing_socket(mem_ctx, fd, ft, stream, \ + __location__) + +#endif /* NPA_TSTREAM_H */ diff --git a/libcli/nbt/config.mk b/libcli/nbt/config.mk new file mode 100644 index 0000000000..c26118ec50 --- /dev/null +++ b/libcli/nbt/config.mk @@ -0,0 +1,50 @@ +[SUBSYSTEM::NDR_NBT_BUF] + +NDR_NBT_BUF_OBJ_FILES = $(libclinbtsrcdir)/nbtname.o + +$(eval $(call proto_header_template,$(libclinbtsrcdir)/nbtname.h,$(NDR_NBT_BUF_OBJ_FILES:.o=.c))) + +[SUBSYSTEM::LIBCLI_NBT] +PUBLIC_DEPENDENCIES = LIBNDR NDR_NBT LIBCLI_COMPOSITE LIBEVENTS \ + NDR_SECURITY samba_socket LIBSAMBA-UTIL + +LIBCLI_NBT_OBJ_FILES = $(addprefix $(libclinbtsrcdir)/, \ + lmhosts.o \ + nbtsocket.o \ + namequery.o \ + nameregister.o \ + namerefresh.o \ + namerelease.o) + +[BINARY::nmblookup] +INSTALLDIR = BINDIR +PRIVATE_DEPENDENCIES = \ + LIBSAMBA-HOSTCONFIG \ + LIBSAMBA-UTIL \ + LIBCLI_NBT \ + LIBPOPT \ + POPT_SAMBA \ + LIBNETIF \ + LIBCLI_RESOLVE + +nmblookup_OBJ_FILES = $(libclinbtsrcdir)/tools/nmblookup.o +MANPAGES += $(libclinbtsrcdir)/man/nmblookup.1 + +[SUBSYSTEM::LIBCLI_NDR_NETLOGON] +PUBLIC_DEPENDENCIES = LIBNDR \ + NDR_SECURITY + +LIBCLI_NDR_NETLOGON_OBJ_FILES = $(addprefix $(libclinbtsrcdir)/../, ndr_netlogon.o) + +[SUBSYSTEM::LIBCLI_NETLOGON] +PUBLIC_DEPENDENCIES = LIBSAMBA-UTIL LIBCLI_NDR_NETLOGON + +LIBCLI_NETLOGON_OBJ_FILES = $(addprefix $(libclinbtsrcdir)/, \ + ../netlogon.o) + +[PYTHON::python_netbios] +LIBRARY_REALNAME = samba/netbios.$(SHLIBEXT) +PUBLIC_DEPENDENCIES = LIBCLI_NBT DYNCONFIG LIBSAMBA-HOSTCONFIG + +python_netbios_OBJ_FILES = $(libclinbtsrcdir)/pynbt.o + diff --git a/libcli/nbt/libnbt.h b/libcli/nbt/libnbt.h index a37a213b08..2abcb56971 100644 --- a/libcli/nbt/libnbt.h +++ b/libcli/nbt/libnbt.h @@ -24,7 +24,7 @@ #include "librpc/gen_ndr/nbt.h" #include "librpc/ndr/libndr.h" - +#include "system/network.h" /* possible states for pending requests */ @@ -355,4 +355,9 @@ NTSTATUS nbt_name_register_wins_recv(struct composite_context *c, TALLOC_CTX *me struct nbt_name_register_wins *io); +XFILE *startlmhosts(const char *fname); +bool getlmhostsent(TALLOC_CTX *ctx, XFILE *fp, char **pp_name, int *name_type, + struct sockaddr_storage *pss); +void endlmhosts(XFILE *fp); + #endif /* __LIBNBT_H__ */ diff --git a/libcli/nbt/lmhosts.c b/libcli/nbt/lmhosts.c new file mode 100644 index 0000000000..11703a27e8 --- /dev/null +++ b/libcli/nbt/lmhosts.c @@ -0,0 +1,157 @@ +/* + Unix SMB/CIFS implementation. + + manipulate nbt name structures + + Copyright (C) Andrew Tridgell 1994-1998 + Copyright (C) Jeremy Allison 2007 + Copyright (C) Andrew Bartlett 2009. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "lib/util/xfile.h" +#include "lib/util/util_net.h" +#include "system/filesys.h" +#include "system/network.h" + +/******************************************************** + Start parsing the lmhosts file. +*********************************************************/ + +XFILE *startlmhosts(const char *fname) +{ + XFILE *fp = x_fopen(fname,O_RDONLY, 0); + if (!fp) { + DEBUG(4,("startlmhosts: Can't open lmhosts file %s. " + "Error was %s\n", + fname, strerror(errno))); + return NULL; + } + return fp; +} + +/******************************************************** + Parse the next line in the lmhosts file. +*********************************************************/ + +bool getlmhostsent(TALLOC_CTX *ctx, XFILE *fp, char **pp_name, int *name_type, + struct sockaddr_storage *pss) +{ + char line[1024]; + + *pp_name = NULL; + + while(!x_feof(fp) && !x_ferror(fp)) { + char *ip = NULL; + char *flags = NULL; + char *extra = NULL; + char *name = NULL; + const char *ptr; + char *ptr1 = NULL; + int count = 0; + + *name_type = -1; + + if (!fgets_slash(line,sizeof(line),fp)) { + continue; + } + + if (*line == '#') { + continue; + } + + ptr = line; + + if (next_token_talloc(ctx, &ptr, &ip, NULL)) + ++count; + if (next_token_talloc(ctx, &ptr, &name, NULL)) + ++count; + if (next_token_talloc(ctx, &ptr, &flags, NULL)) + ++count; + if (next_token_talloc(ctx, &ptr, &extra, NULL)) + ++count; + + if (count <= 0) + continue; + + if (count > 0 && count < 2) { + DEBUG(0,("getlmhostsent: Ill formed hosts line [%s]\n", + line)); + continue; + } + + if (count >= 4) { + DEBUG(0,("getlmhostsent: too many columns " + "in lmhosts file (obsolete syntax)\n")); + continue; + } + + if (!flags) { + flags = talloc_strdup(ctx, ""); + if (!flags) { + continue; + } + } + + DEBUG(4, ("getlmhostsent: lmhost entry: %s %s %s\n", + ip, name, flags)); + + if (strchr_m(flags,'G') || strchr_m(flags,'S')) { + DEBUG(0,("getlmhostsent: group flag " + "in lmhosts ignored (obsolete)\n")); + continue; + } + + if (!interpret_string_addr(pss, ip, AI_NUMERICHOST)) { + DEBUG(0,("getlmhostsent: invalid address " + "%s.\n", ip)); + } + + /* Extra feature. If the name ends in '#XX', + * where XX is a hex number, then only add that name type. */ + if((ptr1 = strchr_m(name, '#')) != NULL) { + char *endptr; + ptr1++; + + *name_type = (int)strtol(ptr1, &endptr, 16); + if(!*ptr1 || (endptr == ptr1)) { + DEBUG(0,("getlmhostsent: invalid name " + "%s containing '#'.\n", name)); + continue; + } + + *(--ptr1) = '\0'; /* Truncate at the '#' */ + } + + *pp_name = talloc_strdup(ctx, name); + if (!*pp_name) { + return false; + } + return true; + } + + return false; +} + +/******************************************************** + Finish parsing the lmhosts file. +*********************************************************/ + +void endlmhosts(XFILE *fp) +{ + x_fclose(fp); +} + diff --git a/libcli/samsync/config.mk b/libcli/samsync/config.mk new file mode 100644 index 0000000000..bea909e398 --- /dev/null +++ b/libcli/samsync/config.mk @@ -0,0 +1,6 @@ +[SUBSYSTEM::LIBCLI_SAMSYNC] +PUBLIC_DEPENDENCIES = \ + LIBCLI_AUTH + +LIBCLI_SAMSYNC_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/samsync/, \ + decrypt.o) diff --git a/libcli/samsync/decrypt.c b/libcli/samsync/decrypt.c new file mode 100644 index 0000000000..b3fab712bc --- /dev/null +++ b/libcli/samsync/decrypt.c @@ -0,0 +1,174 @@ +/* + Unix SMB/CIFS implementation. + + Extract the user/system database from a remote SamSync server + + Copyright (C) Andrew Bartlett <abartlet@samba.org> 2004-2005 + Copyright (C) Guenther Deschner <gd@samba.org> 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + + +#include "includes.h" +#include "../lib/crypto/crypto.h" +#include "../libcli/auth/libcli_auth.h" +#include "../libcli/samsync/samsync.h" +#include "librpc/gen_ndr/ndr_netlogon.h" + +/** + * Decrypt and extract the user's passwords. + * + * The writes decrypted (no longer 'RID encrypted' or arcfour encrypted) + * passwords back into the structure + */ + +static NTSTATUS fix_user(TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds, + enum netr_SamDatabaseID database_id, + struct netr_DELTA_ENUM *delta) +{ + + uint32_t rid = delta->delta_id_union.rid; + struct netr_DELTA_USER *user = delta->delta_union.user; + struct samr_Password lm_hash; + struct samr_Password nt_hash; + unsigned char zero_buf[16]; + + memset(zero_buf, '\0', sizeof(zero_buf)); + + /* Note that win2000 may send us all zeros + * for the hashes if it doesn't + * think this channel is secure enough. */ + if (user->lm_password_present) { + if (memcmp(user->lmpassword.hash, zero_buf, 16) != 0) { + sam_rid_crypt(rid, user->lmpassword.hash, lm_hash.hash, 0); + } else { + memset(lm_hash.hash, '\0', sizeof(lm_hash.hash)); + } + user->lmpassword = lm_hash; + } + + if (user->nt_password_present) { + if (memcmp(user->ntpassword.hash, zero_buf, 16) != 0) { + sam_rid_crypt(rid, user->ntpassword.hash, nt_hash.hash, 0); + } else { + memset(nt_hash.hash, '\0', sizeof(nt_hash.hash)); + } + user->ntpassword = nt_hash; + } + + if (user->user_private_info.SensitiveData) { + DATA_BLOB data; + struct netr_USER_KEYS keys; + enum ndr_err_code ndr_err; + data.data = user->user_private_info.SensitiveData; + data.length = user->user_private_info.DataLength; + netlogon_creds_arcfour_crypt(creds, data.data, data.length); + user->user_private_info.SensitiveData = data.data; + user->user_private_info.DataLength = data.length; + + ndr_err = ndr_pull_struct_blob(&data, mem_ctx, NULL, &keys, + (ndr_pull_flags_fn_t)ndr_pull_netr_USER_KEYS); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + dump_data(10, data.data, data.length); + return ndr_map_error2ntstatus(ndr_err); + } + + /* Note that win2000 may send us all zeros + * for the hashes if it doesn't + * think this channel is secure enough. */ + if (keys.keys.keys2.lmpassword.length == 16) { + if (memcmp(keys.keys.keys2.lmpassword.pwd.hash, + zero_buf, 16) != 0) { + sam_rid_crypt(rid, + keys.keys.keys2.lmpassword.pwd.hash, + lm_hash.hash, 0); + } else { + memset(lm_hash.hash, '\0', sizeof(lm_hash.hash)); + } + user->lmpassword = lm_hash; + user->lm_password_present = true; + } + if (keys.keys.keys2.ntpassword.length == 16) { + if (memcmp(keys.keys.keys2.ntpassword.pwd.hash, + zero_buf, 16) != 0) { + sam_rid_crypt(rid, + keys.keys.keys2.ntpassword.pwd.hash, + nt_hash.hash, 0); + } else { + memset(nt_hash.hash, '\0', sizeof(nt_hash.hash)); + } + user->ntpassword = nt_hash; + user->nt_password_present = true; + } + /* TODO: rid decrypt history fields */ + } + return NT_STATUS_OK; +} + +/** + * Decrypt and extract the secrets + * + * The writes decrypted secrets back into the structure + */ +static NTSTATUS fix_secret(TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds, + enum netr_SamDatabaseID database, + struct netr_DELTA_ENUM *delta) +{ + struct netr_DELTA_SECRET *secret = delta->delta_union.secret; + netlogon_creds_arcfour_crypt(creds, secret->current_cipher.cipher_data, + secret->current_cipher.maxlen); + + netlogon_creds_arcfour_crypt(creds, secret->old_cipher.cipher_data, + secret->old_cipher.maxlen); + + return NT_STATUS_OK; +} + +/** + * Fix up the delta, dealing with encryption issues so that the final + * callback need only do the printing or application logic + */ + +NTSTATUS samsync_fix_delta(TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds, + enum netr_SamDatabaseID database_id, + struct netr_DELTA_ENUM *delta) +{ + NTSTATUS status = NT_STATUS_OK; + + switch (delta->delta_type) { + case NETR_DELTA_USER: + + status = fix_user(mem_ctx, + creds, + database_id, + delta); + break; + case NETR_DELTA_SECRET: + + status = fix_secret(mem_ctx, + creds, + database_id, + delta); + break; + default: + break; + } + + return status; +} + diff --git a/libcli/samsync/samsync.h b/libcli/samsync/samsync.h new file mode 100644 index 0000000000..df76f1b17b --- /dev/null +++ b/libcli/samsync/samsync.h @@ -0,0 +1,34 @@ +/* + Unix SMB/CIFS implementation. + + Extract the user/system database from a remote SamSync server + + Copyright (C) Guenther Deschner <gd@samba.org> 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __SAMSYNC_SAMSYNC_H__ +#define __SAMSYNC_SAMSYNC_H__ + +/** + * Fix up the delta, dealing with encryption issues so that the final + * callback need only do the printing or application logic + */ +NTSTATUS samsync_fix_delta(TALLOC_CTX *mem_ctx, + struct netlogon_creds_CredentialState *creds, + enum netr_SamDatabaseID database_id, + struct netr_DELTA_ENUM *delta); + +#endif /* __SAMSYNC_SAMSYNC_H__ */ diff --git a/libcli/security/config.mk b/libcli/security/config.mk index 56d8e138ff..060429bd67 100644 --- a/libcli/security/config.mk +++ b/libcli/security/config.mk @@ -2,4 +2,4 @@ PRIVATE_DEPENDENCIES = TALLOC LIBSECURITY_COMMON_OBJ_FILES = $(addprefix $(libclicommonsrcdir)/security/, \ - dom_sid.o) + dom_sid.o display_sec.o secace.o secacl.o security_descriptor.o) diff --git a/libcli/security/display_sec.c b/libcli/security/display_sec.c new file mode 100644 index 0000000000..bec657da86 --- /dev/null +++ b/libcli/security/display_sec.c @@ -0,0 +1,322 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Andrew Tridgell 1992-1999 + Copyright (C) Luke Kenneth Casson Leighton 1996 - 1999 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "librpc/gen_ndr/security.h" +#include "libcli/security/secace.h" +#include "libcli/security/dom_sid.h" +#include "librpc/ndr/libndr.h" + +/**************************************************************************** +convert a security permissions into a string +****************************************************************************/ + +char *get_sec_mask_str(TALLOC_CTX *ctx, uint32_t type) +{ + char *typestr = talloc_strdup(ctx, ""); + + if (!typestr) { + return NULL; + } + + if (type & SEC_GENERIC_ALL) { + typestr = talloc_asprintf_append(typestr, + "Generic all access "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_GENERIC_EXECUTE) { + typestr = talloc_asprintf_append(typestr, + "Generic execute access"); + if (!typestr) { + return NULL; + } + } + if (type & SEC_GENERIC_WRITE) { + typestr = talloc_asprintf_append(typestr, + "Generic write access "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_GENERIC_READ) { + typestr = talloc_asprintf_append(typestr, + "Generic read access "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_FLAG_MAXIMUM_ALLOWED) { + typestr = talloc_asprintf_append(typestr, + "MAXIMUM_ALLOWED_ACCESS "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_FLAG_SYSTEM_SECURITY) { + typestr = talloc_asprintf_append(typestr, + "SYSTEM_SECURITY_ACCESS "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_STD_SYNCHRONIZE) { + typestr = talloc_asprintf_append(typestr, + "SYNCHRONIZE_ACCESS "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_STD_WRITE_OWNER) { + typestr = talloc_asprintf_append(typestr, + "WRITE_OWNER_ACCESS "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_STD_WRITE_DAC) { + typestr = talloc_asprintf_append(typestr, + "WRITE_DAC_ACCESS "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_STD_READ_CONTROL) { + typestr = talloc_asprintf_append(typestr, + "READ_CONTROL_ACCESS "); + if (!typestr) { + return NULL; + } + } + if (type & SEC_STD_DELETE) { + typestr = talloc_asprintf_append(typestr, + "DELETE_ACCESS "); + if (!typestr) { + return NULL; + } + } + + printf("\t\tSpecific bits: 0x%lx\n", (unsigned long)type&SEC_MASK_SPECIFIC); + + return typestr; +} + +/**************************************************************************** + display sec_access structure + ****************************************************************************/ +void display_sec_access(uint32_t *info) +{ + char *mask_str = get_sec_mask_str(NULL, *info); + printf("\t\tPermissions: 0x%x: %s\n", *info, mask_str ? mask_str : ""); + talloc_free(mask_str); +} + +/**************************************************************************** + display sec_ace flags + ****************************************************************************/ +void display_sec_ace_flags(uint8_t flags) +{ + if (flags & SEC_ACE_FLAG_OBJECT_INHERIT) + printf("SEC_ACE_FLAG_OBJECT_INHERIT "); + if (flags & SEC_ACE_FLAG_CONTAINER_INHERIT) + printf(" SEC_ACE_FLAG_CONTAINER_INHERIT "); + if (flags & SEC_ACE_FLAG_NO_PROPAGATE_INHERIT) + printf("SEC_ACE_FLAG_NO_PROPAGATE_INHERIT "); + if (flags & SEC_ACE_FLAG_INHERIT_ONLY) + printf("SEC_ACE_FLAG_INHERIT_ONLY "); + if (flags & SEC_ACE_FLAG_INHERITED_ACE) + printf("SEC_ACE_FLAG_INHERITED_ACE "); +/* if (flags & SEC_ACE_FLAG_VALID_INHERIT) + printf("SEC_ACE_FLAG_VALID_INHERIT "); */ + if (flags & SEC_ACE_FLAG_SUCCESSFUL_ACCESS) + printf("SEC_ACE_FLAG_SUCCESSFUL_ACCESS "); + if (flags & SEC_ACE_FLAG_FAILED_ACCESS) + printf("SEC_ACE_FLAG_FAILED_ACCESS "); + + printf("\n"); +} + +/**************************************************************************** + display sec_ace object + ****************************************************************************/ +static void disp_sec_ace_object(struct security_ace_object *object) +{ + if (object->flags & SEC_ACE_OBJECT_TYPE_PRESENT) { + printf("Object type: SEC_ACE_OBJECT_TYPE_PRESENT\n"); + printf("Object GUID: %s\n", GUID_string(talloc_tos(), + &object->type.type)); + } + if (object->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT) { + printf("Object type: SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT\n"); + printf("Object GUID: %s\n", GUID_string(talloc_tos(), + &object->inherited_type.inherited_type)); + } +} + +/**************************************************************************** + display sec_ace structure + ****************************************************************************/ +void display_sec_ace(struct security_ace *ace) +{ + char *sid_str; + + printf("\tACE\n\t\ttype: "); + switch (ace->type) { + case SEC_ACE_TYPE_ACCESS_ALLOWED: + printf("ACCESS ALLOWED"); + break; + case SEC_ACE_TYPE_ACCESS_DENIED: + printf("ACCESS DENIED"); + break; + case SEC_ACE_TYPE_SYSTEM_AUDIT: + printf("SYSTEM AUDIT"); + break; + case SEC_ACE_TYPE_SYSTEM_ALARM: + printf("SYSTEM ALARM"); + break; + case SEC_ACE_TYPE_ALLOWED_COMPOUND: + printf("SEC_ACE_TYPE_ALLOWED_COMPOUND"); + break; + case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: + printf("SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT"); + break; + case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: + printf("SEC_ACE_TYPE_ACCESS_DENIED_OBJECT"); + break; + case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: + printf("SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT"); + break; + case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: + printf("SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT"); + break; + default: + printf("????"); + break; + } + + printf(" (%d) flags: 0x%02x ", ace->type, ace->flags); + display_sec_ace_flags(ace->flags); + display_sec_access(&ace->access_mask); + sid_str = dom_sid_string(NULL, &ace->trustee); + printf("\t\tSID: %s\n\n", sid_str); + talloc_free(sid_str); + + if (sec_ace_object(ace->type)) { + disp_sec_ace_object(&ace->object.object); + } + +} + +/**************************************************************************** + display sec_acl structure + ****************************************************************************/ +void display_sec_acl(struct security_acl *sec_acl) +{ + int i; + + printf("\tACL\tNum ACEs:\t%d\trevision:\t%x\n", + sec_acl->num_aces, sec_acl->revision); + printf("\t---\n"); + + if (sec_acl->size != 0 && sec_acl->num_aces != 0) { + for (i = 0; i < sec_acl->num_aces; i++) { + display_sec_ace(&sec_acl->aces[i]); + } + } +} + +void display_acl_type(uint16_t type) +{ + printf("type: 0x%04x: ", type); + + if (type & SEC_DESC_OWNER_DEFAULTED) /* 0x0001 */ + printf("SEC_DESC_OWNER_DEFAULTED "); + if (type & SEC_DESC_GROUP_DEFAULTED) /* 0x0002 */ + printf("SEC_DESC_GROUP_DEFAULTED "); + if (type & SEC_DESC_DACL_PRESENT) /* 0x0004 */ + printf("SEC_DESC_DACL_PRESENT "); + if (type & SEC_DESC_DACL_DEFAULTED) /* 0x0008 */ + printf("SEC_DESC_DACL_DEFAULTED "); + if (type & SEC_DESC_SACL_PRESENT) /* 0x0010 */ + printf("SEC_DESC_SACL_PRESENT "); + if (type & SEC_DESC_SACL_DEFAULTED) /* 0x0020 */ + printf("SEC_DESC_SACL_DEFAULTED "); + if (type & SEC_DESC_DACL_TRUSTED) /* 0x0040 */ + printf("SEC_DESC_DACL_TRUSTED "); + if (type & SEC_DESC_SERVER_SECURITY) /* 0x0080 */ + printf("SEC_DESC_SERVER_SECURITY "); + if (type & SEC_DESC_DACL_AUTO_INHERIT_REQ) /* 0x0100 */ + printf("SEC_DESC_DACL_AUTO_INHERIT_REQ "); + if (type & SEC_DESC_SACL_AUTO_INHERIT_REQ) /* 0x0200 */ + printf("SEC_DESC_SACL_AUTO_INHERIT_REQ "); + if (type & SEC_DESC_DACL_AUTO_INHERITED) /* 0x0400 */ + printf("SEC_DESC_DACL_AUTO_INHERITED "); + if (type & SEC_DESC_SACL_AUTO_INHERITED) /* 0x0800 */ + printf("SEC_DESC_SACL_AUTO_INHERITED "); + if (type & SEC_DESC_DACL_PROTECTED) /* 0x1000 */ + printf("SEC_DESC_DACL_PROTECTED "); + if (type & SEC_DESC_SACL_PROTECTED) /* 0x2000 */ + printf("SEC_DESC_SACL_PROTECTED "); + if (type & SEC_DESC_RM_CONTROL_VALID) /* 0x4000 */ + printf("SEC_DESC_RM_CONTROL_VALID "); + if (type & SEC_DESC_SELF_RELATIVE) /* 0x8000 */ + printf("SEC_DESC_SELF_RELATIVE "); + + printf("\n"); +} + +/**************************************************************************** + display sec_desc structure + ****************************************************************************/ +void display_sec_desc(struct security_descriptor *sec) +{ + char *sid_str; + + if (!sec) { + printf("NULL\n"); + return; + } + + printf("revision: %d\n", sec->revision); + display_acl_type(sec->type); + + if (sec->sacl) { + printf("SACL\n"); + display_sec_acl(sec->sacl); + } + + if (sec->dacl) { + printf("DACL\n"); + display_sec_acl(sec->dacl); + } + + if (sec->owner_sid) { + sid_str = dom_sid_string(NULL, sec->owner_sid); + printf("\tOwner SID:\t%s\n", sid_str); + talloc_free(sid_str); + } + + if (sec->group_sid) { + sid_str = dom_sid_string(NULL, sec->group_sid); + printf("\tGroup SID:\t%s\n", sid_str); + talloc_free(sid_str); + } +} diff --git a/libcli/security/secacl.c b/libcli/security/secacl.c index 9373ef5812..29afe460b1 100644 --- a/libcli/security/secacl.c +++ b/libcli/security/secacl.c @@ -51,7 +51,7 @@ struct security_acl *make_sec_acl(TALLOC_CTX *ctx, positive number. */ if ((num_aces) && - ((dst->aces = talloc_array(ctx, struct security_ace, num_aces)) + ((dst->aces = talloc_array(dst, struct security_ace, num_aces)) == NULL)) { return NULL; } diff --git a/libcli/security/security_descriptor.c b/libcli/security/security_descriptor.c new file mode 100644 index 0000000000..b77a281852 --- /dev/null +++ b/libcli/security/security_descriptor.c @@ -0,0 +1,584 @@ +/* + Unix SMB/CIFS implementation. + + security descriptror utility functions + + Copyright (C) Andrew Tridgell 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "libcli/security/security_descriptor.h" +#include "libcli/security/dom_sid.h" + +/* + return a blank security descriptor (no owners, dacl or sacl) +*/ +struct security_descriptor *security_descriptor_initialise(TALLOC_CTX *mem_ctx) +{ + struct security_descriptor *sd; + + sd = talloc(mem_ctx, struct security_descriptor); + if (!sd) { + return NULL; + } + + sd->revision = SD_REVISION; + /* we mark as self relative, even though it isn't while it remains + a pointer in memory because this simplifies the ndr code later. + All SDs that we store/emit are in fact SELF_RELATIVE + */ + sd->type = SEC_DESC_SELF_RELATIVE; + + sd->owner_sid = NULL; + sd->group_sid = NULL; + sd->sacl = NULL; + sd->dacl = NULL; + + return sd; +} + +struct security_acl *security_acl_dup(TALLOC_CTX *mem_ctx, + const struct security_acl *oacl) +{ + struct security_acl *nacl; + + nacl = talloc (mem_ctx, struct security_acl); + if (nacl == NULL) { + return NULL; + } + + nacl->aces = (struct security_ace *)talloc_memdup (nacl, oacl->aces, sizeof(struct security_ace) * oacl->num_aces); + if ((nacl->aces == NULL) && (oacl->num_aces > 0)) { + goto failed; + } + + nacl->revision = oacl->revision; + nacl->size = oacl->size; + nacl->num_aces = oacl->num_aces; + + return nacl; + + failed: + talloc_free (nacl); + return NULL; + +} + +struct security_acl *security_acl_concatenate(TALLOC_CTX *mem_ctx, + const struct security_acl *acl1, + const struct security_acl *acl2) +{ + struct security_acl *nacl; + int i; + + if (!acl1 && !acl2) + return NULL; + + if (!acl1){ + nacl = security_acl_dup(mem_ctx, acl2); + return nacl; + } + + if (!acl2){ + nacl = security_acl_dup(mem_ctx, acl1); + return nacl; + } + + nacl = talloc (mem_ctx, struct security_acl); + if (nacl == NULL) { + return NULL; + } + + nacl->revision = acl1->revision; + nacl->size = acl1->size + acl2->size; + nacl->num_aces = acl1->num_aces + acl2->num_aces; + + if (nacl->num_aces == 0) + return nacl; + + nacl->aces = (struct security_ace *)talloc_array (mem_ctx, struct security_ace, acl1->num_aces+acl2->num_aces); + if ((nacl->aces == NULL) && (nacl->num_aces > 0)) { + goto failed; + } + + for (i = 0; i < acl1->num_aces; i++) + nacl->aces[i] = acl1->aces[i]; + for (i = 0; i < acl2->num_aces; i++) + nacl->aces[i + acl1->num_aces] = acl2->aces[i]; + + return nacl; + + failed: + talloc_free (nacl); + return NULL; + +} + +/* + talloc and copy a security descriptor + */ +struct security_descriptor *security_descriptor_copy(TALLOC_CTX *mem_ctx, + const struct security_descriptor *osd) +{ + struct security_descriptor *nsd; + + nsd = talloc_zero(mem_ctx, struct security_descriptor); + if (!nsd) { + return NULL; + } + + if (osd->owner_sid) { + nsd->owner_sid = dom_sid_dup(nsd, osd->owner_sid); + if (nsd->owner_sid == NULL) { + goto failed; + } + } + + if (osd->group_sid) { + nsd->group_sid = dom_sid_dup(nsd, osd->group_sid); + if (nsd->group_sid == NULL) { + goto failed; + } + } + + if (osd->sacl) { + nsd->sacl = security_acl_dup(nsd, osd->sacl); + if (nsd->sacl == NULL) { + goto failed; + } + } + + if (osd->dacl) { + nsd->dacl = security_acl_dup(nsd, osd->dacl); + if (nsd->dacl == NULL) { + goto failed; + } + } + + nsd->revision = osd->revision; + nsd->type = osd->type; + + return nsd; + + failed: + talloc_free(nsd); + + return NULL; +} + +/* + add an ACE to an ACL of a security_descriptor +*/ + +static NTSTATUS security_descriptor_acl_add(struct security_descriptor *sd, + bool add_to_sacl, + const struct security_ace *ace) +{ + struct security_acl *acl = NULL; + + if (add_to_sacl) { + acl = sd->sacl; + } else { + acl = sd->dacl; + } + + if (acl == NULL) { + acl = talloc(sd, struct security_acl); + if (acl == NULL) { + return NT_STATUS_NO_MEMORY; + } + acl->revision = SECURITY_ACL_REVISION_NT4; + acl->size = 0; + acl->num_aces = 0; + acl->aces = NULL; + } + + acl->aces = talloc_realloc(acl, acl->aces, + struct security_ace, acl->num_aces+1); + if (acl->aces == NULL) { + return NT_STATUS_NO_MEMORY; + } + + acl->aces[acl->num_aces] = *ace; + + switch (acl->aces[acl->num_aces].type) { + case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: + case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: + case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: + case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: + acl->revision = SECURITY_ACL_REVISION_ADS; + break; + default: + break; + } + + acl->num_aces++; + + if (add_to_sacl) { + sd->sacl = acl; + sd->type |= SEC_DESC_SACL_PRESENT; + } else { + sd->dacl = acl; + sd->type |= SEC_DESC_DACL_PRESENT; + } + + return NT_STATUS_OK; +} + +/* + add an ACE to the SACL of a security_descriptor +*/ + +NTSTATUS security_descriptor_sacl_add(struct security_descriptor *sd, + const struct security_ace *ace) +{ + return security_descriptor_acl_add(sd, true, ace); +} + +/* + add an ACE to the DACL of a security_descriptor +*/ + +NTSTATUS security_descriptor_dacl_add(struct security_descriptor *sd, + const struct security_ace *ace) +{ + return security_descriptor_acl_add(sd, false, ace); +} + +/* + delete the ACE corresponding to the given trustee in an ACL of a + security_descriptor +*/ + +static NTSTATUS security_descriptor_acl_del(struct security_descriptor *sd, + bool sacl_del, + const struct dom_sid *trustee) +{ + int i; + bool found = false; + struct security_acl *acl = NULL; + + if (sacl_del) { + acl = sd->sacl; + } else { + acl = sd->dacl; + } + + if (acl == NULL) { + return NT_STATUS_OBJECT_NAME_NOT_FOUND; + } + + /* there can be multiple ace's for one trustee */ + for (i=0;i<acl->num_aces;i++) { + if (dom_sid_equal(trustee, &acl->aces[i].trustee)) { + memmove(&acl->aces[i], &acl->aces[i+1], + sizeof(acl->aces[i]) * (acl->num_aces - (i+1))); + acl->num_aces--; + if (acl->num_aces == 0) { + acl->aces = NULL; + } + found = true; + } + } + + if (!found) { + return NT_STATUS_OBJECT_NAME_NOT_FOUND; + } + + acl->revision = SECURITY_ACL_REVISION_NT4; + + for (i=0;i<acl->num_aces;i++) { + switch (acl->aces[i].type) { + case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: + case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: + case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: + case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: + acl->revision = SECURITY_ACL_REVISION_ADS; + return NT_STATUS_OK; + default: + break; /* only for the switch statement */ + } + } + + return NT_STATUS_OK; +} + +/* + delete the ACE corresponding to the given trustee in the DACL of a + security_descriptor +*/ + +NTSTATUS security_descriptor_dacl_del(struct security_descriptor *sd, + const struct dom_sid *trustee) +{ + return security_descriptor_acl_del(sd, false, trustee); +} + +/* + delete the ACE corresponding to the given trustee in the SACL of a + security_descriptor +*/ + +NTSTATUS security_descriptor_sacl_del(struct security_descriptor *sd, + const struct dom_sid *trustee) +{ + return security_descriptor_acl_del(sd, true, trustee); +} + +/* + compare two security ace structures +*/ +bool security_ace_equal(const struct security_ace *ace1, + const struct security_ace *ace2) +{ + if (ace1 == ace2) return true; + if (!ace1 || !ace2) return false; + if (ace1->type != ace2->type) return false; + if (ace1->flags != ace2->flags) return false; + if (ace1->access_mask != ace2->access_mask) return false; + if (!dom_sid_equal(&ace1->trustee, &ace2->trustee)) return false; + + return true; +} + + +/* + compare two security acl structures +*/ +bool security_acl_equal(const struct security_acl *acl1, + const struct security_acl *acl2) +{ + int i; + + if (acl1 == acl2) return true; + if (!acl1 || !acl2) return false; + if (acl1->revision != acl2->revision) return false; + if (acl1->num_aces != acl2->num_aces) return false; + + for (i=0;i<acl1->num_aces;i++) { + if (!security_ace_equal(&acl1->aces[i], &acl2->aces[i])) return false; + } + return true; +} + +/* + compare two security descriptors. +*/ +bool security_descriptor_equal(const struct security_descriptor *sd1, + const struct security_descriptor *sd2) +{ + if (sd1 == sd2) return true; + if (!sd1 || !sd2) return false; + if (sd1->revision != sd2->revision) return false; + if (sd1->type != sd2->type) return false; + + if (!dom_sid_equal(sd1->owner_sid, sd2->owner_sid)) return false; + if (!dom_sid_equal(sd1->group_sid, sd2->group_sid)) return false; + if (!security_acl_equal(sd1->sacl, sd2->sacl)) return false; + if (!security_acl_equal(sd1->dacl, sd2->dacl)) return false; + + return true; +} + +/* + compare two security descriptors, but allow certain (missing) parts + to be masked out of the comparison +*/ +bool security_descriptor_mask_equal(const struct security_descriptor *sd1, + const struct security_descriptor *sd2, + uint32_t mask) +{ + if (sd1 == sd2) return true; + if (!sd1 || !sd2) return false; + if (sd1->revision != sd2->revision) return false; + if ((sd1->type & mask) != (sd2->type & mask)) return false; + + if (!dom_sid_equal(sd1->owner_sid, sd2->owner_sid)) return false; + if (!dom_sid_equal(sd1->group_sid, sd2->group_sid)) return false; + if ((mask & SEC_DESC_DACL_PRESENT) && !security_acl_equal(sd1->dacl, sd2->dacl)) return false; + if ((mask & SEC_DESC_SACL_PRESENT) && !security_acl_equal(sd1->sacl, sd2->sacl)) return false; + + return true; +} + + +static struct security_descriptor *security_descriptor_appendv(struct security_descriptor *sd, + bool add_ace_to_sacl, + va_list ap) +{ + const char *sidstr; + + while ((sidstr = va_arg(ap, const char *))) { + struct dom_sid *sid; + struct security_ace *ace = talloc_zero(sd, struct security_ace); + NTSTATUS status; + + if (ace == NULL) { + talloc_free(sd); + return NULL; + } + ace->type = va_arg(ap, unsigned int); + ace->access_mask = va_arg(ap, unsigned int); + ace->flags = va_arg(ap, unsigned int); + sid = dom_sid_parse_talloc(ace, sidstr); + if (sid == NULL) { + talloc_free(sd); + return NULL; + } + ace->trustee = *sid; + if (add_ace_to_sacl) { + status = security_descriptor_sacl_add(sd, ace); + } else { + status = security_descriptor_dacl_add(sd, ace); + } + /* TODO: check: would talloc_free(ace) here be correct? */ + if (!NT_STATUS_IS_OK(status)) { + talloc_free(sd); + return NULL; + } + } + + return sd; +} + +struct security_descriptor *security_descriptor_append(struct security_descriptor *sd, + ...) +{ + va_list ap; + + va_start(ap, sd); + sd = security_descriptor_appendv(sd, false, ap); + va_end(ap); + + return sd; +} + +static struct security_descriptor *security_descriptor_createv(TALLOC_CTX *mem_ctx, + uint16_t sd_type, + const char *owner_sid, + const char *group_sid, + bool add_ace_to_sacl, + va_list ap) +{ + struct security_descriptor *sd; + + sd = security_descriptor_initialise(mem_ctx); + if (sd == NULL) { + return NULL; + } + + sd->type |= sd_type; + + if (owner_sid) { + sd->owner_sid = dom_sid_parse_talloc(sd, owner_sid); + if (sd->owner_sid == NULL) { + talloc_free(sd); + return NULL; + } + } + if (group_sid) { + sd->group_sid = dom_sid_parse_talloc(sd, group_sid); + if (sd->group_sid == NULL) { + talloc_free(sd); + return NULL; + } + } + + return security_descriptor_appendv(sd, add_ace_to_sacl, ap); +} + +/* + create a security descriptor using string SIDs. This is used by the + torture code to allow the easy creation of complex ACLs + This is a varargs function. The list of DACL ACEs ends with a NULL sid. + + Each ACE contains a set of 4 parameters: + SID, ACCESS_TYPE, MASK, FLAGS + + a typical call would be: + + sd = security_descriptor_dacl_create(mem_ctx, + sd_type_flags, + mysid, + mygroup, + SID_NT_AUTHENTICATED_USERS, + SEC_ACE_TYPE_ACCESS_ALLOWED, + SEC_FILE_ALL, + SEC_ACE_FLAG_OBJECT_INHERIT, + NULL); + that would create a sd with one DACL ACE +*/ + +struct security_descriptor *security_descriptor_dacl_create(TALLOC_CTX *mem_ctx, + uint16_t sd_type, + const char *owner_sid, + const char *group_sid, + ...) +{ + struct security_descriptor *sd = NULL; + va_list ap; + va_start(ap, group_sid); + sd = security_descriptor_createv(mem_ctx, sd_type, owner_sid, + group_sid, false, ap); + va_end(ap); + + return sd; +} + +struct security_descriptor *security_descriptor_sacl_create(TALLOC_CTX *mem_ctx, + uint16_t sd_type, + const char *owner_sid, + const char *group_sid, + ...) +{ + struct security_descriptor *sd = NULL; + va_list ap; + va_start(ap, group_sid); + sd = security_descriptor_createv(mem_ctx, sd_type, owner_sid, + group_sid, true, ap); + va_end(ap); + + return sd; +} + +struct security_ace *security_ace_create(TALLOC_CTX *mem_ctx, + const char *sid_str, + enum security_ace_type type, + uint32_t access_mask, + uint8_t flags) + +{ + struct dom_sid *sid; + struct security_ace *ace; + + ace = talloc_zero(mem_ctx, struct security_ace); + if (ace == NULL) { + return NULL; + } + + sid = dom_sid_parse_talloc(ace, sid_str); + if (sid == NULL) { + talloc_free(ace); + return NULL; + } + + ace->trustee = *sid; + ace->type = type; + ace->access_mask = access_mask; + ace->flags = flags; + + return ace; +} diff --git a/libcli/security/security_descriptor.h b/libcli/security/security_descriptor.h new file mode 100644 index 0000000000..bc5761ab6f --- /dev/null +++ b/libcli/security/security_descriptor.h @@ -0,0 +1,71 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + + Copyright (C) 2009 Jelmer Vernooij <jelmer@samba.org> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __SECURITY_DESCRIPTOR_H__ +#define __SECURITY_DESCRIPTOR_H__ + +#include "librpc/gen_ndr/security.h" + +struct security_descriptor *security_descriptor_initialise(TALLOC_CTX *mem_ctx); +struct security_descriptor *security_descriptor_copy(TALLOC_CTX *mem_ctx, + const struct security_descriptor *osd); +NTSTATUS security_descriptor_sacl_add(struct security_descriptor *sd, + const struct security_ace *ace); +NTSTATUS security_descriptor_dacl_add(struct security_descriptor *sd, + const struct security_ace *ace); +NTSTATUS security_descriptor_dacl_del(struct security_descriptor *sd, + const struct dom_sid *trustee); +NTSTATUS security_descriptor_sacl_del(struct security_descriptor *sd, + const struct dom_sid *trustee); +bool security_ace_equal(const struct security_ace *ace1, + const struct security_ace *ace2); +bool security_acl_equal(const struct security_acl *acl1, + const struct security_acl *acl2); +bool security_descriptor_equal(const struct security_descriptor *sd1, + const struct security_descriptor *sd2); +bool security_descriptor_mask_equal(const struct security_descriptor *sd1, + const struct security_descriptor *sd2, + uint32_t mask); +struct security_descriptor *security_descriptor_append(struct security_descriptor *sd, + ...); +struct security_descriptor *security_descriptor_dacl_create(TALLOC_CTX *mem_ctx, + uint16_t sd_type, + const char *owner_sid, + const char *group_sid, + ...); +struct security_descriptor *security_descriptor_sacl_create(TALLOC_CTX *mem_ctx, + uint16_t sd_type, + const char *owner_sid, + const char *group_sid, + ...); +struct security_ace *security_ace_create(TALLOC_CTX *mem_ctx, + const char *sid_str, + enum security_ace_type type, + uint32_t access_mask, + uint8_t flags); + +struct security_acl *security_acl_dup(TALLOC_CTX *mem_ctx, + const struct security_acl *oacl); + +struct security_acl *security_acl_concatenate(TALLOC_CTX *mem_ctx, + const struct security_acl *acl1, + const struct security_acl *acl2); + +#endif /* __SECURITY_DESCRIPTOR_H__ */ diff --git a/libcli/smb/config.mk b/libcli/smb/config.mk new file mode 100644 index 0000000000..57c25c3844 --- /dev/null +++ b/libcli/smb/config.mk @@ -0,0 +1,11 @@ +# common SMB and SMB2 stuff +[SUBSYSTEM::LIBCLI_SMB_COMMON] +PUBLIC_DEPENDENCIES = LIBTALLOC + +LIBCLI_SMB_COMMON_OBJ_FILES = $(addprefix ../libcli/smb/, \ + smb2_create_blob.o) + +$(eval $(call proto_header_template, \ + ../libcli/smb/smb_common_proto.h, \ + $(LIBCLI_SMB_COMMON_OBJ_FILES:.o=.c))) + diff --git a/libcli/smb/smb2_constants.h b/libcli/smb/smb2_constants.h new file mode 100644 index 0000000000..3047809b74 --- /dev/null +++ b/libcli/smb/smb2_constants.h @@ -0,0 +1,175 @@ +/* + Unix SMB/CIFS implementation. + + SMB2 client library header + + Copyright (C) Andrew Tridgell 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __LIBCLI_SMB2_SMB2_CONSTANTS_H__ +#define __LIBCLI_SMB2_SMB2_CONSTANTS_H__ + +/* offsets into header elements for a sync SMB2 request */ +#define SMB2_HDR_PROTOCOL_ID 0x00 +#define SMB2_HDR_LENGTH 0x04 +#define SMB2_HDR_EPOCH 0x06 +#define SMB2_HDR_STATUS 0x08 +#define SMB2_HDR_OPCODE 0x0c +#define SMB2_HDR_CREDIT 0x0e +#define SMB2_HDR_FLAGS 0x10 +#define SMB2_HDR_NEXT_COMMAND 0x14 +#define SMB2_HDR_MESSAGE_ID 0x18 +#define SMB2_HDR_PID 0x20 +#define SMB2_HDR_TID 0x24 +#define SMB2_HDR_SESSION_ID 0x28 +#define SMB2_HDR_SIGNATURE 0x30 /* 16 bytes */ +#define SMB2_HDR_BODY 0x40 + +/* header flags */ +#define SMB2_HDR_FLAG_REDIRECT 0x01 +#define SMB2_HDR_FLAG_ASYNC 0x02 +#define SMB2_HDR_FLAG_CHAINED 0x04 +#define SMB2_HDR_FLAG_SIGNED 0x08 +#define SMB2_HDR_FLAG_DFS 0x10000000 + +/* SMB2 opcodes */ +#define SMB2_OP_NEGPROT 0x00 +#define SMB2_OP_SESSSETUP 0x01 +#define SMB2_OP_LOGOFF 0x02 +#define SMB2_OP_TCON 0x03 +#define SMB2_OP_TDIS 0x04 +#define SMB2_OP_CREATE 0x05 +#define SMB2_OP_CLOSE 0x06 +#define SMB2_OP_FLUSH 0x07 +#define SMB2_OP_READ 0x08 +#define SMB2_OP_WRITE 0x09 +#define SMB2_OP_LOCK 0x0a +#define SMB2_OP_IOCTL 0x0b +#define SMB2_OP_CANCEL 0x0c +#define SMB2_OP_KEEPALIVE 0x0d +#define SMB2_OP_FIND 0x0e +#define SMB2_OP_NOTIFY 0x0f +#define SMB2_OP_GETINFO 0x10 +#define SMB2_OP_SETINFO 0x11 +#define SMB2_OP_BREAK 0x12 + +#define SMB2_MAGIC 0x424D53FE /* 0xFE 'S' 'M' 'B' */ + +/* SMB2 negotiate dialects */ +#define SMB2_DIALECT_REVISION_000 0x0000 /* early beta dialect */ +#define SMB2_DIALECT_REVISION_202 0x0202 +#define SMB2_DIALECT_REVISION_210 0x0210 +#define SMB2_DIALECT_REVISION_2FF 0x02FF + +/* SMB2 negotiate security_mode */ +#define SMB2_NEGOTIATE_SIGNING_ENABLED 0x01 +#define SMB2_NEGOTIATE_SIGNING_REQUIRED 0x02 + +/* SMB2 capabilities - only 1 so far. I'm sure more will be added */ +#define SMB2_CAP_DFS 0x00000001 +#define SMB2_CAP_LEASING 0x00000002 /* only in dialect 0x210 */ +/* so we can spot new caps as added */ +#define SMB2_CAP_ALL SMB2_CAP_DFS + +/* SMB2 session flags */ +#define SMB2_SESSION_FLAG_IS_GUEST 0x0001 +#define SMB2_SESSION_FLAG_IS_NULL 0x0002 + +/* SMB2 share flags */ +#define SMB2_SHAREFLAG_MANUAL_CACHING 0x0000 +#define SMB2_SHAREFLAG_AUTO_CACHING 0x0010 +#define SMB2_SHAREFLAG_VDO_CACHING 0x0020 +#define SMB2_SHAREFLAG_NO_CACHING 0x0030 +#define SMB2_SHAREFLAG_DFS 0x0001 +#define SMB2_SHAREFLAG_DFS_ROOT 0x0002 +#define SMB2_SHAREFLAG_RESTRICT_EXCLUSIVE_OPENS 0x0100 +#define SMB2_SHAREFLAG_FORCE_SHARED_DELETE 0x0200 +#define SMB2_SHAREFLAG_ALLOW_NAMESPACE_CACHING 0x0400 +#define SMB2_SHAREFLAG_ACCESS_BASED_DIRECTORY_ENUM 0x0800 +#define SMB2_SHAREFLAG_ALL 0x0F33 + +/* SMB2 create security flags */ +#define SMB2_SECURITY_DYNAMIC_TRACKING 0x01 +#define SMB2_SECURITY_EFFECTIVE_ONLY 0x02 + +/* SMB2 lock flags */ +#define SMB2_LOCK_FLAG_NONE 0x00000000 +#define SMB2_LOCK_FLAG_SHARED 0x00000001 +#define SMB2_LOCK_FLAG_EXCLUSIVE 0x00000002 +#define SMB2_LOCK_FLAG_UNLOCK 0x00000004 +#define SMB2_LOCK_FLAG_FAIL_IMMEDIATELY 0x00000010 +#define SMB2_LOCK_FLAG_ALL_MASK 0x00000017 + +/* SMB2 requested oplock levels */ +#define SMB2_OPLOCK_LEVEL_NONE 0x00 +#define SMB2_OPLOCK_LEVEL_II 0x01 +#define SMB2_OPLOCK_LEVEL_EXCLUSIVE 0x08 +#define SMB2_OPLOCK_LEVEL_BATCH 0x09 +#define SMB2_OPLOCK_LEVEL_LEASE 0xFF + +/* SMB2 lease bits */ +#define SMB2_LEASE_NONE 0x00 +#define SMB2_LEASE_READ 0x01 +#define SMB2_LEASE_HANDLE 0x02 +#define SMB2_LEASE_WRITE 0x04 + +/* SMB2 lease break flags */ +#define SMB2_NOTIFY_BREAK_LEASE_FLAG_ACK_REQUIRED 0x01 + +/* SMB2 impersonation levels */ +#define SMB2_IMPERSONATION_ANONYMOUS 0x00 +#define SMB2_IMPERSONATION_IDENTIFICATION 0x01 +#define SMB2_IMPERSONATION_IMPERSONATION 0x02 +#define SMB2_IMPERSONATION_DELEGATE 0x03 + +/* SMB2 create tags */ +#define SMB2_CREATE_TAG_EXTA "ExtA" +#define SMB2_CREATE_TAG_MXAC "MxAc" +#define SMB2_CREATE_TAG_SECD "SecD" +#define SMB2_CREATE_TAG_DHNQ "DHnQ" +#define SMB2_CREATE_TAG_DHNC "DHnC" +#define SMB2_CREATE_TAG_ALSI "AlSi" +#define SMB2_CREATE_TAG_TWRP "TWrp" +#define SMB2_CREATE_TAG_QFID "QFid" +#define SMB2_CREATE_TAG_RQLS "RqLs" + +/* SMB2 Create ignore some more create_options */ +#define SMB2_CREATE_OPTIONS_NOT_SUPPORTED_MASK (NTCREATEX_OPTIONS_TREE_CONNECTION | \ + NTCREATEX_OPTIONS_OPFILTER) + +/* + SMB2 uses different level numbers for the same old SMB trans2 search levels +*/ +#define SMB2_FIND_DIRECTORY_INFO 0x01 +#define SMB2_FIND_FULL_DIRECTORY_INFO 0x02 +#define SMB2_FIND_BOTH_DIRECTORY_INFO 0x03 +#define SMB2_FIND_NAME_INFO 0x0C +#define SMB2_FIND_ID_BOTH_DIRECTORY_INFO 0x25 +#define SMB2_FIND_ID_FULL_DIRECTORY_INFO 0x26 + +/* flags for SMB2 find */ +#define SMB2_CONTINUE_FLAG_RESTART 0x01 +#define SMB2_CONTINUE_FLAG_SINGLE 0x02 +#define SMB2_CONTINUE_FLAG_INDEX 0x04 +#define SMB2_CONTINUE_FLAG_REOPEN 0x10 + +/* getinfo classes */ +#define SMB2_GETINFO_FILE 0x01 +#define SMB2_GETINFO_FS 0x02 +#define SMB2_GETINFO_SECURITY 0x03 +#define SMB2_GETINFO_QUOTA 0x04 + +#endif diff --git a/libcli/smb/smb2_create_blob.c b/libcli/smb/smb2_create_blob.c new file mode 100644 index 0000000000..444dc840af --- /dev/null +++ b/libcli/smb/smb2_create_blob.c @@ -0,0 +1,203 @@ +/* + Unix SMB/CIFS implementation. + + SMB2 Create Context Blob handling + + Copyright (C) Andrew Tridgell 2005 + Copyright (C) Stefan Metzmacher 2008-2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "../libcli/smb/smb_common.h" + +static size_t smb2_create_blob_padding(uint32_t offset, size_t n) +{ + if ((offset & (n-1)) == 0) return 0; + return n - (offset & (n-1)); +} + +/* + parse a set of SMB2 create blobs +*/ +NTSTATUS smb2_create_blob_parse(TALLOC_CTX *mem_ctx, const DATA_BLOB buffer, + struct smb2_create_blobs *blobs) +{ + const uint8_t *data = buffer.data; + uint32_t remaining = buffer.length; + + while (remaining > 0) { + uint32_t next; + uint32_t name_offset, name_length; + uint32_t reserved, data_offset; + uint32_t data_length; + char *tag; + DATA_BLOB b; + NTSTATUS status; + + if (remaining < 16) { + return NT_STATUS_INVALID_PARAMETER; + } + next = IVAL(data, 0); + name_offset = SVAL(data, 4); + name_length = SVAL(data, 6); + reserved = SVAL(data, 8); + data_offset = SVAL(data, 10); + data_length = IVAL(data, 12); + + if ((next & 0x7) != 0 || + next > remaining || + name_offset < 16 || + name_offset > remaining || + name_length != 4 || /* windows enforces this */ + name_offset + name_length > remaining || + data_offset < name_offset + name_length || + data_offset > remaining || + data_offset + (uint64_t)data_length > remaining) { + return NT_STATUS_INVALID_PARAMETER; + } + + tag = talloc_strndup(mem_ctx, (const char *)data + name_offset, name_length); + if (tag == NULL) { + return NT_STATUS_NO_MEMORY; + } + + b = data_blob_const(data+data_offset, data_length); + status = smb2_create_blob_add(mem_ctx, blobs, tag, b); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + talloc_free(tag); + + if (next == 0) break; + + remaining -= next; + data += next; + + if (remaining < 16) { + return NT_STATUS_INVALID_PARAMETER; + } + } + + return NT_STATUS_OK; +} + + +/* + add a blob to a smb2_create attribute blob +*/ +static NTSTATUS smb2_create_blob_push_one(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer, + const struct smb2_create_blob *blob, + bool last) +{ + uint32_t ofs = buffer->length; + size_t tag_length = strlen(blob->tag); + uint8_t pad = smb2_create_blob_padding(blob->data.length+tag_length, 4); + + if (!data_blob_realloc(mem_ctx, buffer, + buffer->length + 0x14 + tag_length + blob->data.length + pad)) + return NT_STATUS_NO_MEMORY; + + if (last) { + SIVAL(buffer->data, ofs+0x00, 0); + } else { + SIVAL(buffer->data, ofs+0x00, 0x14 + tag_length + blob->data.length + pad); + } + SSVAL(buffer->data, ofs+0x04, 0x10); /* offset of tag */ + SIVAL(buffer->data, ofs+0x06, tag_length); /* tag length */ + SSVAL(buffer->data, ofs+0x0A, 0x14 + tag_length); /* offset of data */ + SIVAL(buffer->data, ofs+0x0C, blob->data.length); + memcpy(buffer->data+ofs+0x10, blob->tag, tag_length); + SIVAL(buffer->data, ofs+0x10+tag_length, 0); /* pad? */ + memcpy(buffer->data+ofs+0x14+tag_length, blob->data.data, blob->data.length); + memset(buffer->data+ofs+0x14+tag_length+blob->data.length, 0, pad); + + return NT_STATUS_OK; +} + + +/* + create a buffer of a set of create blobs +*/ +NTSTATUS smb2_create_blob_push(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer, + const struct smb2_create_blobs blobs) +{ + int i; + NTSTATUS status; + + *buffer = data_blob(NULL, 0); + for (i=0; i < blobs.num_blobs; i++) { + bool last = false; + const struct smb2_create_blob *c; + + if ((i + 1) == blobs.num_blobs) { + last = true; + } + + c = &blobs.blobs[i]; + status = smb2_create_blob_push_one(mem_ctx, buffer, c, last); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + } + return NT_STATUS_OK; +} + + +NTSTATUS smb2_create_blob_add(TALLOC_CTX *mem_ctx, struct smb2_create_blobs *b, + const char *tag, DATA_BLOB data) +{ + struct smb2_create_blob *array; + + array = talloc_realloc(mem_ctx, b->blobs, + struct smb2_create_blob, + b->num_blobs + 1); + NT_STATUS_HAVE_NO_MEMORY(array); + b->blobs = array; + + b->blobs[b->num_blobs].tag = talloc_strdup(b->blobs, tag); + NT_STATUS_HAVE_NO_MEMORY(b->blobs[b->num_blobs].tag); + + if (data.data) { + b->blobs[b->num_blobs].data = data_blob_talloc(b->blobs, + data.data, + data.length); + NT_STATUS_HAVE_NO_MEMORY(b->blobs[b->num_blobs].data.data); + } else { + b->blobs[b->num_blobs].data = data_blob(NULL, 0); + } + + b->num_blobs += 1; + + return NT_STATUS_OK; +} + +/* + * return the first blob with the given tag + */ +struct smb2_create_blob *smb2_create_blob_find(const struct smb2_create_blobs *b, + const char *tag) +{ + uint32_t i; + + for (i=0; i < b->num_blobs; i++) { + if (strcmp(b->blobs[i].tag, tag) == 0) { + return &b->blobs[i]; + } + } + + return NULL; +} diff --git a/libcli/smb/smb2_create_blob.h b/libcli/smb/smb2_create_blob.h new file mode 100644 index 0000000000..008befe41a --- /dev/null +++ b/libcli/smb/smb2_create_blob.h @@ -0,0 +1,57 @@ +/* + Unix SMB/CIFS implementation. + + SMB2 Create Context Blob handling + + Copyright (C) Andrew Tridgell 2005 + Copyright (C) Stefan Metzmacher 2008-2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _LIBCLI_SMB_SMB2_CREATE_BLOB_H_ +#define _LIBCLI_SMB_SMB2_CREATE_BLOB_H_ + +struct smb2_create_blob { + const char *tag; + DATA_BLOB data; +}; + +struct smb2_create_blobs { + uint32_t num_blobs; + struct smb2_create_blob *blobs; +}; + +/* + parse a set of SMB2 create blobs +*/ +NTSTATUS smb2_create_blob_parse(TALLOC_CTX *mem_ctx, const DATA_BLOB buffer, + struct smb2_create_blobs *blobs); + +/* + create a buffer of a set of create blobs +*/ +NTSTATUS smb2_create_blob_push(TALLOC_CTX *mem_ctx, DATA_BLOB *buffer, + const struct smb2_create_blobs blobs); + +NTSTATUS smb2_create_blob_add(TALLOC_CTX *mem_ctx, struct smb2_create_blobs *b, + const char *tag, DATA_BLOB data); + +/* + * return the first blob with the given tag + */ +struct smb2_create_blob *smb2_create_blob_find(const struct smb2_create_blobs *b, + const char *tag); + +#endif /* _LIBCLI_SMB_SMB2_CREATE_BLOB_H_ */ diff --git a/libcli/smb/smb_common.h b/libcli/smb/smb_common.h new file mode 100644 index 0000000000..d6186ab526 --- /dev/null +++ b/libcli/smb/smb_common.h @@ -0,0 +1,28 @@ +/* + Unix SMB/CIFS implementation. + + SMB and SMB2 common header + + Copyright (C) Stefan Metzmacher 2009 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __LIBCLI_SMB_SMB_COMMON_H__ +#define __LIBCLI_SMB_SMB_COMMON_H__ + +#include "../libcli/smb/smb2_constants.h" +#include "../libcli/smb/smb2_create_blob.h" + +#endif diff --git a/libcli/util/doserr.c b/libcli/util/doserr.c index ed220cc134..958c617ac9 100644 --- a/libcli/util/doserr.c +++ b/libcli/util/doserr.c @@ -52,6 +52,10 @@ static const struct werror_code_struct dos_errs[] = { "WERR_NO_MORE_ITEMS", WERR_NO_MORE_ITEMS }, { "WERR_MORE_DATA", WERR_MORE_DATA }, { "WERR_UNKNOWN_PRINTER_DRIVER", WERR_UNKNOWN_PRINTER_DRIVER }, + { "WERR_UNKNOWN_PRINTPROCESSOR", WERR_UNKNOWN_PRINTPROCESSOR }, + { "WERR_INVALID_SEPARATOR_FILE", WERR_INVALID_SEPARATOR_FILE }, + { "WERR_INVALID_PRIORITY", WERR_INVALID_PRIORITY }, + { "WERR_UNKNOWN_PORT", WERR_UNKNOWN_PORT }, { "WERR_INVALID_PRINTER_NAME", WERR_INVALID_PRINTER_NAME }, { "WERR_PRINTER_ALREADY_EXISTS", WERR_PRINTER_ALREADY_EXISTS }, { "WERR_INVALID_DATATYPE", WERR_INVALID_DATATYPE }, @@ -62,7 +66,7 @@ static const struct werror_code_struct dos_errs[] = { "WERR_BUF_TOO_SMALL", WERR_BUF_TOO_SMALL }, { "WERR_JOB_NOT_FOUND", WERR_JOB_NOT_FOUND }, { "WERR_DEST_NOT_FOUND", WERR_DEST_NOT_FOUND }, - { "WERR_GROUP_NOT_FOUND", WERR_GROUP_NOT_FOUND }, + { "WERR_GROUPNOTFOUND", WERR_GROUPNOTFOUND }, { "WERR_USER_NOT_FOUND", WERR_USER_NOT_FOUND }, { "WERR_NOT_LOCAL_DOMAIN", WERR_NOT_LOCAL_DOMAIN }, { "WERR_DOMAIN_CONTROLLER_NOT_FOUND", WERR_DOMAIN_CONTROLLER_NOT_FOUND }, @@ -72,7 +76,7 @@ static const struct werror_code_struct dos_errs[] = { "WERR_SETUP_DOMAIN_CONTROLLER", WERR_SETUP_DOMAIN_CONTROLLER }, { "WERR_DEVICE_NOT_AVAILABLE", WERR_DEVICE_NOT_AVAILABLE }, { "WERR_DEFAULT_JOIN_REQUIRED", WERR_DEFAULT_JOIN_REQUIRED }, - { "WERR_USER_EXISTS", WERR_USER_EXISTS }, + { "WERR_USEREXISTS", WERR_USEREXISTS }, { "WERR_REVISION_MISMATCH", WERR_REVISION_MISMATCH }, { "WERR_NO_LOGON_SERVERS", WERR_NO_LOGON_SERVERS }, { "WERR_NO_SUCH_LOGON_SESSION", WERR_NO_SUCH_LOGON_SESSION }, @@ -101,7 +105,7 @@ static const struct werror_code_struct dos_errs[] = { "WERR_INVALID_COMPUTERNAME", WERR_INVALID_COMPUTERNAME }, { "WERR_INVALID_DOMAINNAME", WERR_INVALID_DOMAINNAME }, { "WERR_MACHINE_LOCKED", WERR_MACHINE_LOCKED }, - { "WERR_DC_NOT_FOUND", WERR_DC_NOT_FOUND }, + { "WERR_DCNOTFOUND", WERR_DCNOTFOUND }, { "WERR_NO_LOGON_SERVERS", WERR_NO_LOGON_SERVERS }, { "WERR_NO_SUCH_LOGON_SESSION", WERR_NO_SUCH_LOGON_SESSION }, { "WERR_NO_SUCH_PRIVILEGE", WERR_NO_SUCH_PRIVILEGE }, @@ -109,10 +113,43 @@ static const struct werror_code_struct dos_errs[] = { "WERR_NO_SUCH_USER", WERR_NO_SUCH_USER }, { "WERR_NO_SUCH_DOMAIN", WERR_NO_SUCH_DOMAIN }, { "WERR_NO_SYSTEM_RESOURCES", WERR_NO_SYSTEM_RESOURCES }, - { "WERR_DS_SERVICE_BUSY", WERR_DS_SERVICE_BUSY }, - { "WERR_DS_SERVICE_UNAVAILABLE", WERR_DS_SERVICE_UNAVAILABLE }, + { "WERR_DS_NO_ATTRIBUTE_OR_VALUE", WERR_DS_NO_ATTRIBUTE_OR_VALUE }, + { "WERR_DS_INVALID_ATTRIBUTE_SYNTAX", WERR_DS_INVALID_ATTRIBUTE_SYNTAX }, + { "WERR_DS_ATTRIBUTE_TYPE_UNDEFINED", WERR_DS_ATTRIBUTE_TYPE_UNDEFINED }, + { "WERR_DS_ATTRIBUTE_OR_VALUE_EXISTS", WERR_DS_ATTRIBUTE_OR_VALUE_EXISTS }, + { "WERR_DS_BUSY", WERR_DS_BUSY }, + { "WERR_DS_UNAVAILABLE", WERR_DS_UNAVAILABLE }, + { "WERR_DS_OBJ_CLASS_VIOLATION", WERR_DS_OBJ_CLASS_VIOLATION }, + { "WERR_DS_CANT_ON_NON_LEAF", WERR_DS_CANT_ON_NON_LEAF }, + { "WERR_DS_CANT_ON_RDN", WERR_DS_CANT_ON_RDN }, + { "WERR_DS_CANT_MOD_OBJ_CLASS", WERR_DS_CANT_MOD_OBJ_CLASS }, + { "WERR_DS_OPERATIONS_ERROR", WERR_DS_OPERATIONS_ERROR }, + { "WERR_DS_PROTOCOL_ERROR", WERR_DS_PROTOCOL_ERROR }, + { "WERR_DS_TIMELIMIT_EXCEEEDED", WERR_DS_TIMELIMIT_EXCEEDED }, + { "WERR_DS_SIZE_LIMIT_EXCEEDED", WERR_DS_SIZE_LIMIT_EXCEEDED }, + { "WERR_DS_ADMIN_LIMIT_EXCEEEDED", WERR_DS_ADMIN_LIMIT_EXCEEDED }, + { "WERR_DS_COMPARE_FALSE", WERR_DS_COMPARE_FALSE }, + { "WERR_DS_COMPARE_TRUE", WERR_DS_COMPARE_TRUE }, + { "WERR_DS_AUTH_METHOD_NOT_SUPPORTED", WERR_DS_AUTH_METHOD_NOT_SUPPORTED }, + { "WERR_DS_STRONG_AUTH_REQUIRED", WERR_DS_STRONG_AUTH_REQUIRED }, + { "WERR_DS_INAPPROPRIATE_AUTH", WERR_DS_INAPPROPRIATE_AUTH }, + { "WERR_DS_REFERRAL", WERR_DS_REFERRAL }, + { "WERR_DS_UNAVAILABLE_CRIT_EXTENSION", WERR_DS_UNAVAILABLE_CRIT_EXTENSION }, + { "WERR_DS_CONFIDENTIALITY_REQUIRED", WERR_DS_CONFIDENTIALITY_REQUIRED }, + { "WERR_DS_INAPPROPRIATE_MATCHING", WERR_DS_INAPPROPRIATE_MATCHING }, + { "WERR_DS_CONSTRAINT_VIOLATION", WERR_DS_CONSTRAINT_VIOLATION }, { "WERR_DS_NO_SUCH_OBJECT", WERR_DS_NO_SUCH_OBJECT }, + { "WERR_DS_ALIAS_PROBLEM", WERR_DS_ALIAS_PROBLEM }, + { "WERR_DS_INVALID_DN_SYNTAX", WERR_DS_INVALID_DN_SYNTAX }, + { "WERR_DS_ALIAS_DEREF_PROBLEM", WERR_DS_ALIAS_DEREF_PROBLEM }, + { "WERR_DS_UNWILLING_TO_PERFORM", WERR_DS_UNWILLING_TO_PERFORM }, + { "WERR_DS_LOOP_DETECT", WERR_DS_LOOP_DETECT }, + { "WERR_DS_NAMING_VIOLATION", WERR_DS_NAMING_VIOLATION }, + { "WERR_DS_AFFECTS_MULTIPLE_DSAS", WERR_DS_AFFECTS_MULTIPLE_DSAS }, + { "WERR_DS_OBJ_STRING_NAME_EXISTS", WERR_DS_OBJ_STRING_NAME_EXISTS }, { "WERR_DS_OBJ_NOT_FOUND", WERR_DS_OBJ_NOT_FOUND }, + { "WERR_DS_GENERIC_ERROR", WERR_DS_GENERIC_ERROR }, + { "WERR_DS_INSUFF_ACCESS_RIGHTS", WERR_DS_INSUFF_ACCESS_RIGHTS }, { "WERR_DS_SCHEMA_NOT_LOADED", WERR_DS_SCHEMA_NOT_LOADED }, { "WERR_DS_SCHEMA_ALLOC_FAILED", WERR_DS_SCHEMA_ALLOC_FAILED }, { "WERR_DS_ATT_SCHEMA_REQ_SYNTAX", WERR_DS_ATT_SCHEMA_REQ_SYNTAX }, @@ -141,7 +178,7 @@ static const struct werror_code_struct dos_errs[] = { "WERR_SERVER_UNAVAILABLE", WERR_SERVER_UNAVAILABLE }, { "WERR_INVALID_USER_BUFFER", WERR_INVALID_USER_BUFFER }, { "WERR_NO_TRUST_SAM_ACCOUNT", WERR_NO_TRUST_SAM_ACCOUNT }, - { "WERR_CLASS_NOT_REGISTERED", WERR_CLASS_NOT_REGISTERED }, + { "WERR_INVALID_PRINTER_COMMAND", WERR_INVALID_PRINTER_COMMAND }, { "WERR_NO_SHUTDOWN_IN_PROGRESS", WERR_NO_SHUTDOWN_IN_PROGRESS }, { "WERR_SHUTDOWN_ALREADY_IN_PROGRESS", WERR_SHUTDOWN_ALREADY_IN_PROGRESS }, { "WERR_SEC_E_ENCRYPT_FAILURE", WERR_SEC_E_ENCRYPT_FAILURE }, @@ -179,6 +216,2367 @@ static const struct werror_code_struct dos_errs[] = { "WERR_UNKNOWN_PRINT_MONITOR", WERR_UNKNOWN_PRINT_MONITOR }, { "WERR_PASSWORD_RESTRICTION", WERR_PASSWORD_RESTRICTION }, { "WERR_WRONG_PASSWORD", WERR_WRONG_PASSWORD }, + { "WERR_CLASS_NOT_REGISTERED", WERR_CLASS_NOT_REGISTERED }, + /***************************************************************************** + Auto-generated Win32 error from: + http://msdn.microsoft.com/en-us/library/cc231199%28PROT.10%29.aspx + *****************************************************************************/ + /* BEGIN GENERATED-WIN32-ERROR-CODES */ + { "WERR_NERR_SUCCESS", WERR_NERR_SUCCESS }, + { "WERR_INVALID_FUNCTION", WERR_INVALID_FUNCTION }, + { "WERR_FILE_NOT_FOUND", WERR_FILE_NOT_FOUND }, + { "WERR_PATH_NOT_FOUND", WERR_PATH_NOT_FOUND }, + { "WERR_TOO_MANY_OPEN_FILES", WERR_TOO_MANY_OPEN_FILES }, + { "WERR_INVALID_HANDLE", WERR_INVALID_HANDLE }, + { "WERR_ARENA_TRASHED", WERR_ARENA_TRASHED }, + { "WERR_NOT_ENOUGH_MEMORY", WERR_NOT_ENOUGH_MEMORY }, + { "WERR_INVALID_BLOCK", WERR_INVALID_BLOCK }, + { "WERR_BAD_ENVIRONMENT", WERR_BAD_ENVIRONMENT }, + { "WERR_BAD_FORMAT", WERR_BAD_FORMAT }, + { "WERR_INVALID_ACCESS", WERR_INVALID_ACCESS }, + { "WERR_INVALID_DATA", WERR_INVALID_DATA }, + { "WERR_OUTOFMEMORY", WERR_OUTOFMEMORY }, + { "WERR_INVALID_DRIVE", WERR_INVALID_DRIVE }, + { "WERR_CURRENT_DIRECTORY", WERR_CURRENT_DIRECTORY }, + { "WERR_NOT_SAME_DEVICE", WERR_NOT_SAME_DEVICE }, + { "WERR_NO_MORE_FILES", WERR_NO_MORE_FILES }, + { "WERR_WRITE_PROTECT", WERR_WRITE_PROTECT }, + { "WERR_BAD_UNIT", WERR_BAD_UNIT }, + { "WERR_NOT_READY", WERR_NOT_READY }, + { "WERR_BAD_COMMAND", WERR_BAD_COMMAND }, + { "WERR_CRC", WERR_CRC }, + { "WERR_BAD_LENGTH", WERR_BAD_LENGTH }, + { "WERR_SEEK", WERR_SEEK }, + { "WERR_NOT_DOS_DISK", WERR_NOT_DOS_DISK }, + { "WERR_SECTOR_NOT_FOUND", WERR_SECTOR_NOT_FOUND }, + { "WERR_OUT_OF_PAPER", WERR_OUT_OF_PAPER }, + { "WERR_WRITE_FAULT", WERR_WRITE_FAULT }, + { "WERR_READ_FAULT", WERR_READ_FAULT }, + { "WERR_GEN_FAILURE", WERR_GEN_FAILURE }, + { "WERR_SHARING_VIOLATION", WERR_SHARING_VIOLATION }, + { "WERR_LOCK_VIOLATION", WERR_LOCK_VIOLATION }, + { "WERR_WRONG_DISK", WERR_WRONG_DISK }, + { "WERR_SHARING_BUFFER_EXCEEDED", WERR_SHARING_BUFFER_EXCEEDED }, + { "WERR_HANDLE_EOF", WERR_HANDLE_EOF }, + { "WERR_HANDLE_DISK_FULL", WERR_HANDLE_DISK_FULL }, + { "WERR_REM_NOT_LIST", WERR_REM_NOT_LIST }, + { "WERR_NETWORK_BUSY", WERR_NETWORK_BUSY }, + { "WERR_DEV_NOT_EXIST", WERR_DEV_NOT_EXIST }, + { "WERR_TOO_MANY_CMDS", WERR_TOO_MANY_CMDS }, + { "WERR_ADAP_HDW_ERR", WERR_ADAP_HDW_ERR }, + { "WERR_BAD_REM_ADAP", WERR_BAD_REM_ADAP }, + { "WERR_PRINT_CANCELLED", WERR_PRINT_CANCELLED }, + { "WERR_NETNAME_DELETED", WERR_NETNAME_DELETED }, + { "WERR_NETWORK_ACCESS_DENIED", WERR_NETWORK_ACCESS_DENIED }, + { "WERR_BAD_DEV_TYPE", WERR_BAD_DEV_TYPE }, + { "WERR_BAD_NET_NAME", WERR_BAD_NET_NAME }, + { "WERR_TOO_MANY_NAMES", WERR_TOO_MANY_NAMES }, + { "WERR_TOO_MANY_SESS", WERR_TOO_MANY_SESS }, + { "WERR_SHARING_PAUSED", WERR_SHARING_PAUSED }, + { "WERR_REQ_NOT_ACCEP", WERR_REQ_NOT_ACCEP }, + { "WERR_REDIR_PAUSED", WERR_REDIR_PAUSED }, + { "WERR_CANNOT_MAKE", WERR_CANNOT_MAKE }, + { "WERR_FAIL_I24", WERR_FAIL_I24 }, + { "WERR_OUT_OF_STRUCTURES", WERR_OUT_OF_STRUCTURES }, + { "WERR_ALREADY_ASSIGNED", WERR_ALREADY_ASSIGNED }, + { "WERR_INVALID_PASSWORD", WERR_INVALID_PASSWORD }, + { "WERR_INVALID_PARAMETER", WERR_INVALID_PARAMETER }, + { "WERR_NET_WRITE_FAULT", WERR_NET_WRITE_FAULT }, + { "WERR_NO_PROC_SLOTS", WERR_NO_PROC_SLOTS }, + { "WERR_TOO_MANY_SEMAPHORES", WERR_TOO_MANY_SEMAPHORES }, + { "WERR_EXCL_SEM_ALREADY_OWNED", WERR_EXCL_SEM_ALREADY_OWNED }, + { "WERR_SEM_IS_SET", WERR_SEM_IS_SET }, + { "WERR_TOO_MANY_SEM_REQUESTS", WERR_TOO_MANY_SEM_REQUESTS }, + { "WERR_INVALID_AT_INTERRUPT_TIME", WERR_INVALID_AT_INTERRUPT_TIME }, + { "WERR_SEM_OWNER_DIED", WERR_SEM_OWNER_DIED }, + { "WERR_SEM_USER_LIMIT", WERR_SEM_USER_LIMIT }, + { "WERR_DISK_CHANGE", WERR_DISK_CHANGE }, + { "WERR_DRIVE_LOCKED", WERR_DRIVE_LOCKED }, + { "WERR_BROKEN_PIPE", WERR_BROKEN_PIPE }, + { "WERR_OPEN_FAILED", WERR_OPEN_FAILED }, + { "WERR_BUFFER_OVERFLOW", WERR_BUFFER_OVERFLOW }, + { "WERR_DISK_FULL", WERR_DISK_FULL }, + { "WERR_NO_MORE_SEARCH_HANDLES", WERR_NO_MORE_SEARCH_HANDLES }, + { "WERR_INVALID_TARGET_HANDLE", WERR_INVALID_TARGET_HANDLE }, + { "WERR_INVALID_CATEGORY", WERR_INVALID_CATEGORY }, + { "WERR_INVALID_VERIFY_SWITCH", WERR_INVALID_VERIFY_SWITCH }, + { "WERR_BAD_DRIVER_LEVEL", WERR_BAD_DRIVER_LEVEL }, + { "WERR_INVALID_LEVEL", WERR_INVALID_LEVEL }, + { "WERR_NO_VOLUME_LABEL", WERR_NO_VOLUME_LABEL }, + { "WERR_MOD_NOT_FOUND", WERR_MOD_NOT_FOUND }, + { "WERR_PROC_NOT_FOUND", WERR_PROC_NOT_FOUND }, + { "WERR_WAIT_NO_CHILDREN", WERR_WAIT_NO_CHILDREN }, + { "WERR_CHILD_NOT_COMPLETE", WERR_CHILD_NOT_COMPLETE }, + { "WERR_DIRECT_ACCESS_HANDLE", WERR_DIRECT_ACCESS_HANDLE }, + { "WERR_NEGATIVE_SEEK", WERR_NEGATIVE_SEEK }, + { "WERR_SEEK_ON_DEVICE", WERR_SEEK_ON_DEVICE }, + { "WERR_NOT_SUBSTED", WERR_NOT_SUBSTED }, + { "WERR_JOIN_TO_JOIN", WERR_JOIN_TO_JOIN }, + { "WERR_SUBST_TO_SUBST", WERR_SUBST_TO_SUBST }, + { "WERR_JOIN_TO_SUBST", WERR_JOIN_TO_SUBST }, + { "WERR_SAME_DRIVE", WERR_SAME_DRIVE }, + { "WERR_DIR_NOT_ROOT", WERR_DIR_NOT_ROOT }, + { "WERR_DIR_NOT_EMPTY", WERR_DIR_NOT_EMPTY }, + { "WERR_IS_SUBST_PATH", WERR_IS_SUBST_PATH }, + { "WERR_IS_JOIN_PATH", WERR_IS_JOIN_PATH }, + { "WERR_PATH_BUSY", WERR_PATH_BUSY }, + { "WERR_IS_SUBST_TARGET", WERR_IS_SUBST_TARGET }, + { "WERR_SYSTEM_TRACE", WERR_SYSTEM_TRACE }, + { "WERR_INVALID_EVENT_COUNT", WERR_INVALID_EVENT_COUNT }, + { "WERR_TOO_MANY_MUXWAITERS", WERR_TOO_MANY_MUXWAITERS }, + { "WERR_INVALID_LIST_FORMAT", WERR_INVALID_LIST_FORMAT }, + { "WERR_LABEL_TOO_LONG", WERR_LABEL_TOO_LONG }, + { "WERR_TOO_MANY_TCBS", WERR_TOO_MANY_TCBS }, + { "WERR_SIGNAL_REFUSED", WERR_SIGNAL_REFUSED }, + { "WERR_DISCARDED", WERR_DISCARDED }, + { "WERR_NOT_LOCKED", WERR_NOT_LOCKED }, + { "WERR_BAD_THREADID_ADDR", WERR_BAD_THREADID_ADDR }, + { "WERR_BAD_ARGUMENTS", WERR_BAD_ARGUMENTS }, + { "WERR_BAD_PATHNAME", WERR_BAD_PATHNAME }, + { "WERR_SIGNAL_PENDING", WERR_SIGNAL_PENDING }, + { "WERR_MAX_THRDS_REACHED", WERR_MAX_THRDS_REACHED }, + { "WERR_LOCK_FAILED", WERR_LOCK_FAILED }, + { "WERR_BUSY", WERR_BUSY }, + { "WERR_CANCEL_VIOLATION", WERR_CANCEL_VIOLATION }, + { "WERR_ATOMIC_LOCKS_NOT_SUPPORTED", WERR_ATOMIC_LOCKS_NOT_SUPPORTED }, + { "WERR_INVALID_SEGMENT_NUMBER", WERR_INVALID_SEGMENT_NUMBER }, + { "WERR_INVALID_ORDINAL", WERR_INVALID_ORDINAL }, + { "WERR_INVALID_FLAG_NUMBER", WERR_INVALID_FLAG_NUMBER }, + { "WERR_SEM_NOT_FOUND", WERR_SEM_NOT_FOUND }, + { "WERR_INVALID_STARTING_CODESEG", WERR_INVALID_STARTING_CODESEG }, + { "WERR_INVALID_STACKSEG", WERR_INVALID_STACKSEG }, + { "WERR_INVALID_MODULETYPE", WERR_INVALID_MODULETYPE }, + { "WERR_INVALID_EXE_SIGNATURE", WERR_INVALID_EXE_SIGNATURE }, + { "WERR_EXE_MARKED_INVALID", WERR_EXE_MARKED_INVALID }, + { "WERR_BAD_EXE_FORMAT", WERR_BAD_EXE_FORMAT }, + { "WERR_ITERATED_DATA_EXCEEDS_64K", WERR_ITERATED_DATA_EXCEEDS_64K }, + { "WERR_INVALID_MINALLOCSIZE", WERR_INVALID_MINALLOCSIZE }, + { "WERR_DYNLINK_FROM_INVALID_RING", WERR_DYNLINK_FROM_INVALID_RING }, + { "WERR_IOPL_NOT_ENABLED", WERR_IOPL_NOT_ENABLED }, + { "WERR_INVALID_SEGDPL", WERR_INVALID_SEGDPL }, + { "WERR_AUTODATASEG_EXCEEDS_64K", WERR_AUTODATASEG_EXCEEDS_64K }, + { "WERR_RING2SEG_MUST_BE_MOVABLE", WERR_RING2SEG_MUST_BE_MOVABLE }, + { "WERR_RELOC_CHAIN_XEEDS_SEGLIM", WERR_RELOC_CHAIN_XEEDS_SEGLIM }, + { "WERR_INFLOOP_IN_RELOC_CHAIN", WERR_INFLOOP_IN_RELOC_CHAIN }, + { "WERR_ENVVAR_NOT_FOUND", WERR_ENVVAR_NOT_FOUND }, + { "WERR_NO_SIGNAL_SENT", WERR_NO_SIGNAL_SENT }, + { "WERR_FILENAME_EXCED_RANGE", WERR_FILENAME_EXCED_RANGE }, + { "WERR_RING2_STACK_IN_USE", WERR_RING2_STACK_IN_USE }, + { "WERR_META_EXPANSION_TOO_LONG", WERR_META_EXPANSION_TOO_LONG }, + { "WERR_INVALID_SIGNAL_NUMBER", WERR_INVALID_SIGNAL_NUMBER }, + { "WERR_THREAD_1_INACTIVE", WERR_THREAD_1_INACTIVE }, + { "WERR_LOCKED", WERR_LOCKED }, + { "WERR_TOO_MANY_MODULES", WERR_TOO_MANY_MODULES }, + { "WERR_NESTING_NOT_ALLOWED", WERR_NESTING_NOT_ALLOWED }, + { "WERR_EXE_MACHINE_TYPE_MISMATCH", WERR_EXE_MACHINE_TYPE_MISMATCH }, + { "WERR_EXE_CANNOT_MODIFY_SIGNED_BINARY", WERR_EXE_CANNOT_MODIFY_SIGNED_BINARY }, + { "WERR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY", WERR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY }, + { "WERR_FILE_CHECKED_OUT", WERR_FILE_CHECKED_OUT }, + { "WERR_CHECKOUT_REQUIRED", WERR_CHECKOUT_REQUIRED }, + { "WERR_BAD_FILE_TYPE", WERR_BAD_FILE_TYPE }, + { "WERR_FILE_TOO_LARGE", WERR_FILE_TOO_LARGE }, + { "WERR_FORMS_AUTH_REQUIRED", WERR_FORMS_AUTH_REQUIRED }, + { "WERR_VIRUS_INFECTED", WERR_VIRUS_INFECTED }, + { "WERR_VIRUS_DELETED", WERR_VIRUS_DELETED }, + { "WERR_PIPE_LOCAL", WERR_PIPE_LOCAL }, + { "WERR_BAD_PIPE", WERR_BAD_PIPE }, + { "WERR_PIPE_BUSY", WERR_PIPE_BUSY }, + { "WERR_NO_DATA", WERR_NO_DATA }, + { "WERR_PIPE_NOT_CONNECTED", WERR_PIPE_NOT_CONNECTED }, + { "WERR_VC_DISCONNECTED", WERR_VC_DISCONNECTED }, + { "WERR_INVALID_EA_NAME", WERR_INVALID_EA_NAME }, + { "WERR_EA_LIST_INCONSISTENT", WERR_EA_LIST_INCONSISTENT }, + { "WERR_WAIT_TIMEOUT", WERR_WAIT_TIMEOUT }, + { "WERR_CANNOT_COPY", WERR_CANNOT_COPY }, + { "WERR_DIRECTORY", WERR_DIRECTORY }, + { "WERR_EAS_DIDNT_FIT", WERR_EAS_DIDNT_FIT }, + { "WERR_EA_FILE_CORRUPT", WERR_EA_FILE_CORRUPT }, + { "WERR_EA_TABLE_FULL", WERR_EA_TABLE_FULL }, + { "WERR_INVALID_EA_HANDLE", WERR_INVALID_EA_HANDLE }, + { "WERR_EAS_NOT_SUPPORTED", WERR_EAS_NOT_SUPPORTED }, + { "WERR_NOT_OWNER", WERR_NOT_OWNER }, + { "WERR_TOO_MANY_POSTS", WERR_TOO_MANY_POSTS }, + { "WERR_PARTIAL_COPY", WERR_PARTIAL_COPY }, + { "WERR_OPLOCK_NOT_GRANTED", WERR_OPLOCK_NOT_GRANTED }, + { "WERR_INVALID_OPLOCK_PROTOCOL", WERR_INVALID_OPLOCK_PROTOCOL }, + { "WERR_DISK_TOO_FRAGMENTED", WERR_DISK_TOO_FRAGMENTED }, + { "WERR_DELETE_PENDING", WERR_DELETE_PENDING }, + { "WERR_MR_MID_NOT_FOUND", WERR_MR_MID_NOT_FOUND }, + { "WERR_SCOPE_NOT_FOUND", WERR_SCOPE_NOT_FOUND }, + { "WERR_FAIL_NOACTION_REBOOT", WERR_FAIL_NOACTION_REBOOT }, + { "WERR_FAIL_SHUTDOWN", WERR_FAIL_SHUTDOWN }, + { "WERR_FAIL_RESTART", WERR_FAIL_RESTART }, + { "WERR_MAX_SESSIONS_REACHED", WERR_MAX_SESSIONS_REACHED }, + { "WERR_THREAD_MODE_ALREADY_BACKGROUND", WERR_THREAD_MODE_ALREADY_BACKGROUND }, + { "WERR_THREAD_MODE_NOT_BACKGROUND", WERR_THREAD_MODE_NOT_BACKGROUND }, + { "WERR_PROCESS_MODE_ALREADY_BACKGROUND", WERR_PROCESS_MODE_ALREADY_BACKGROUND }, + { "WERR_PROCESS_MODE_NOT_BACKGROUND", WERR_PROCESS_MODE_NOT_BACKGROUND }, + { "WERR_INVALID_ADDRESS", WERR_INVALID_ADDRESS }, + { "WERR_USER_PROFILE_LOAD", WERR_USER_PROFILE_LOAD }, + { "WERR_ARITHMETIC_OVERFLOW", WERR_ARITHMETIC_OVERFLOW }, + { "WERR_PIPE_CONNECTED", WERR_PIPE_CONNECTED }, + { "WERR_PIPE_LISTENING", WERR_PIPE_LISTENING }, + { "WERR_VERIFIER_STOP", WERR_VERIFIER_STOP }, + { "WERR_ABIOS_ERROR", WERR_ABIOS_ERROR }, + { "WERR_WX86_WARNING", WERR_WX86_WARNING }, + { "WERR_WX86_ERROR", WERR_WX86_ERROR }, + { "WERR_TIMER_NOT_CANCELED", WERR_TIMER_NOT_CANCELED }, + { "WERR_UNWIND", WERR_UNWIND }, + { "WERR_BAD_STACK", WERR_BAD_STACK }, + { "WERR_INVALID_UNWIND_TARGET", WERR_INVALID_UNWIND_TARGET }, + { "WERR_INVALID_PORT_ATTRIBUTES", WERR_INVALID_PORT_ATTRIBUTES }, + { "WERR_PORT_MESSAGE_TOO_LONG", WERR_PORT_MESSAGE_TOO_LONG }, + { "WERR_INVALID_QUOTA_LOWER", WERR_INVALID_QUOTA_LOWER }, + { "WERR_DEVICE_ALREADY_ATTACHED", WERR_DEVICE_ALREADY_ATTACHED }, + { "WERR_INSTRUCTION_MISALIGNMENT", WERR_INSTRUCTION_MISALIGNMENT }, + { "WERR_PROFILING_NOT_STARTED", WERR_PROFILING_NOT_STARTED }, + { "WERR_PROFILING_NOT_STOPPED", WERR_PROFILING_NOT_STOPPED }, + { "WERR_COULD_NOT_INTERPRET", WERR_COULD_NOT_INTERPRET }, + { "WERR_PROFILING_AT_LIMIT", WERR_PROFILING_AT_LIMIT }, + { "WERR_CANT_WAIT", WERR_CANT_WAIT }, + { "WERR_CANT_TERMINATE_SELF", WERR_CANT_TERMINATE_SELF }, + { "WERR_UNEXPECTED_MM_CREATE_ERR", WERR_UNEXPECTED_MM_CREATE_ERR }, + { "WERR_UNEXPECTED_MM_MAP_ERROR", WERR_UNEXPECTED_MM_MAP_ERROR }, + { "WERR_UNEXPECTED_MM_EXTEND_ERR", WERR_UNEXPECTED_MM_EXTEND_ERR }, + { "WERR_BAD_FUNCTION_TABLE", WERR_BAD_FUNCTION_TABLE }, + { "WERR_NO_GUID_TRANSLATION", WERR_NO_GUID_TRANSLATION }, + { "WERR_INVALID_LDT_SIZE", WERR_INVALID_LDT_SIZE }, + { "WERR_INVALID_LDT_OFFSET", WERR_INVALID_LDT_OFFSET }, + { "WERR_INVALID_LDT_DESCRIPTOR", WERR_INVALID_LDT_DESCRIPTOR }, + { "WERR_TOO_MANY_THREADS", WERR_TOO_MANY_THREADS }, + { "WERR_THREAD_NOT_IN_PROCESS", WERR_THREAD_NOT_IN_PROCESS }, + { "WERR_PAGEFILE_QUOTA_EXCEEDED", WERR_PAGEFILE_QUOTA_EXCEEDED }, + { "WERR_LOGON_SERVER_CONFLICT", WERR_LOGON_SERVER_CONFLICT }, + { "WERR_SYNCHRONIZATION_REQUIRED", WERR_SYNCHRONIZATION_REQUIRED }, + { "WERR_NET_OPEN_FAILED", WERR_NET_OPEN_FAILED }, + { "WERR_IO_PRIVILEGE_FAILED", WERR_IO_PRIVILEGE_FAILED }, + { "WERR_CONTROL_C_EXIT", WERR_CONTROL_C_EXIT }, + { "WERR_MISSING_SYSTEMFILE", WERR_MISSING_SYSTEMFILE }, + { "WERR_UNHANDLED_EXCEPTION", WERR_UNHANDLED_EXCEPTION }, + { "WERR_APP_INIT_FAILURE", WERR_APP_INIT_FAILURE }, + { "WERR_PAGEFILE_CREATE_FAILED", WERR_PAGEFILE_CREATE_FAILED }, + { "WERR_INVALID_IMAGE_HASH", WERR_INVALID_IMAGE_HASH }, + { "WERR_NO_PAGEFILE", WERR_NO_PAGEFILE }, + { "WERR_ILLEGAL_FLOAT_CONTEXT", WERR_ILLEGAL_FLOAT_CONTEXT }, + { "WERR_NO_EVENT_PAIR", WERR_NO_EVENT_PAIR }, + { "WERR_DOMAIN_CTRLR_CONFIG_ERROR", WERR_DOMAIN_CTRLR_CONFIG_ERROR }, + { "WERR_ILLEGAL_CHARACTER", WERR_ILLEGAL_CHARACTER }, + { "WERR_UNDEFINED_CHARACTER", WERR_UNDEFINED_CHARACTER }, + { "WERR_FLOPPY_VOLUME", WERR_FLOPPY_VOLUME }, + { "WERR_BIOS_FAILED_TO_CONNECT_INTERRUPT", WERR_BIOS_FAILED_TO_CONNECT_INTERRUPT }, + { "WERR_BACKUP_CONTROLLER", WERR_BACKUP_CONTROLLER }, + { "WERR_MUTANT_LIMIT_EXCEEDED", WERR_MUTANT_LIMIT_EXCEEDED }, + { "WERR_FS_DRIVER_REQUIRED", WERR_FS_DRIVER_REQUIRED }, + { "WERR_CANNOT_LOAD_REGISTRY_FILE", WERR_CANNOT_LOAD_REGISTRY_FILE }, + { "WERR_DEBUG_ATTACH_FAILED", WERR_DEBUG_ATTACH_FAILED }, + { "WERR_SYSTEM_PROCESS_TERMINATED", WERR_SYSTEM_PROCESS_TERMINATED }, + { "WERR_DATA_NOT_ACCEPTED", WERR_DATA_NOT_ACCEPTED }, + { "WERR_VDM_HARD_ERROR", WERR_VDM_HARD_ERROR }, + { "WERR_DRIVER_CANCEL_TIMEOUT", WERR_DRIVER_CANCEL_TIMEOUT }, + { "WERR_REPLY_MESSAGE_MISMATCH", WERR_REPLY_MESSAGE_MISMATCH }, + { "WERR_LOST_WRITEBEHIND_DATA", WERR_LOST_WRITEBEHIND_DATA }, + { "WERR_CLIENT_SERVER_PARAMETERS_INVALID", WERR_CLIENT_SERVER_PARAMETERS_INVALID }, + { "WERR_NOT_TINY_STREAM", WERR_NOT_TINY_STREAM }, + { "WERR_STACK_OVERFLOW_READ", WERR_STACK_OVERFLOW_READ }, + { "WERR_CONVERT_TO_LARGE", WERR_CONVERT_TO_LARGE }, + { "WERR_FOUND_OUT_OF_SCOPE", WERR_FOUND_OUT_OF_SCOPE }, + { "WERR_ALLOCATE_BUCKET", WERR_ALLOCATE_BUCKET }, + { "WERR_MARSHALL_OVERFLOW", WERR_MARSHALL_OVERFLOW }, + { "WERR_INVALID_VARIANT", WERR_INVALID_VARIANT }, + { "WERR_BAD_COMPRESSION_BUFFER", WERR_BAD_COMPRESSION_BUFFER }, + { "WERR_AUDIT_FAILED", WERR_AUDIT_FAILED }, + { "WERR_TIMER_RESOLUTION_NOT_SET", WERR_TIMER_RESOLUTION_NOT_SET }, + { "WERR_INSUFFICIENT_LOGON_INFO", WERR_INSUFFICIENT_LOGON_INFO }, + { "WERR_BAD_DLL_ENTRYPOINT", WERR_BAD_DLL_ENTRYPOINT }, + { "WERR_BAD_SERVICE_ENTRYPOINT", WERR_BAD_SERVICE_ENTRYPOINT }, + { "WERR_IP_ADDRESS_CONFLICT1", WERR_IP_ADDRESS_CONFLICT1 }, + { "WERR_IP_ADDRESS_CONFLICT2", WERR_IP_ADDRESS_CONFLICT2 }, + { "WERR_REGISTRY_QUOTA_LIMIT", WERR_REGISTRY_QUOTA_LIMIT }, + { "WERR_NO_CALLBACK_ACTIVE", WERR_NO_CALLBACK_ACTIVE }, + { "WERR_PWD_TOO_SHORT", WERR_PWD_TOO_SHORT }, + { "WERR_PWD_TOO_RECENT", WERR_PWD_TOO_RECENT }, + { "WERR_PWD_HISTORY_CONFLICT", WERR_PWD_HISTORY_CONFLICT }, + { "WERR_UNSUPPORTED_COMPRESSION", WERR_UNSUPPORTED_COMPRESSION }, + { "WERR_INVALID_HW_PROFILE", WERR_INVALID_HW_PROFILE }, + { "WERR_INVALID_PLUGPLAY_DEVICE_PATH", WERR_INVALID_PLUGPLAY_DEVICE_PATH }, + { "WERR_QUOTA_LIST_INCONSISTENT", WERR_QUOTA_LIST_INCONSISTENT }, + { "WERR_EVALUATION_EXPIRATION", WERR_EVALUATION_EXPIRATION }, + { "WERR_ILLEGAL_DLL_RELOCATION", WERR_ILLEGAL_DLL_RELOCATION }, + { "WERR_DLL_INIT_FAILED_LOGOFF", WERR_DLL_INIT_FAILED_LOGOFF }, + { "WERR_VALIDATE_CONTINUE", WERR_VALIDATE_CONTINUE }, + { "WERR_NO_MORE_MATCHES", WERR_NO_MORE_MATCHES }, + { "WERR_RANGE_LIST_CONFLICT", WERR_RANGE_LIST_CONFLICT }, + { "WERR_SERVER_SID_MISMATCH", WERR_SERVER_SID_MISMATCH }, + { "WERR_CANT_ENABLE_DENY_ONLY", WERR_CANT_ENABLE_DENY_ONLY }, + { "WERR_FLOAT_MULTIPLE_FAULTS", WERR_FLOAT_MULTIPLE_FAULTS }, + { "WERR_FLOAT_MULTIPLE_TRAPS", WERR_FLOAT_MULTIPLE_TRAPS }, + { "WERR_NOINTERFACE", WERR_NOINTERFACE }, + { "WERR_DRIVER_FAILED_SLEEP", WERR_DRIVER_FAILED_SLEEP }, + { "WERR_CORRUPT_SYSTEM_FILE", WERR_CORRUPT_SYSTEM_FILE }, + { "WERR_COMMITMENT_MINIMUM", WERR_COMMITMENT_MINIMUM }, + { "WERR_PNP_RESTART_ENUMERATION", WERR_PNP_RESTART_ENUMERATION }, + { "WERR_SYSTEM_IMAGE_BAD_SIGNATURE", WERR_SYSTEM_IMAGE_BAD_SIGNATURE }, + { "WERR_PNP_REBOOT_REQUIRED", WERR_PNP_REBOOT_REQUIRED }, + { "WERR_INSUFFICIENT_POWER", WERR_INSUFFICIENT_POWER }, + { "WERR_MULTIPLE_FAULT_VIOLATION", WERR_MULTIPLE_FAULT_VIOLATION }, + { "WERR_SYSTEM_SHUTDOWN", WERR_SYSTEM_SHUTDOWN }, + { "WERR_PORT_NOT_SET", WERR_PORT_NOT_SET }, + { "WERR_DS_VERSION_CHECK_FAILURE", WERR_DS_VERSION_CHECK_FAILURE }, + { "WERR_RANGE_NOT_FOUND", WERR_RANGE_NOT_FOUND }, + { "WERR_NOT_SAFE_MODE_DRIVER", WERR_NOT_SAFE_MODE_DRIVER }, + { "WERR_FAILED_DRIVER_ENTRY", WERR_FAILED_DRIVER_ENTRY }, + { "WERR_DEVICE_ENUMERATION_ERROR", WERR_DEVICE_ENUMERATION_ERROR }, + { "WERR_MOUNT_POINT_NOT_RESOLVED", WERR_MOUNT_POINT_NOT_RESOLVED }, + { "WERR_INVALID_DEVICE_OBJECT_PARAMETER", WERR_INVALID_DEVICE_OBJECT_PARAMETER }, + { "WERR_MCA_OCCURED", WERR_MCA_OCCURED }, + { "WERR_DRIVER_DATABASE_ERROR", WERR_DRIVER_DATABASE_ERROR }, + { "WERR_SYSTEM_HIVE_TOO_LARGE", WERR_SYSTEM_HIVE_TOO_LARGE }, + { "WERR_DRIVER_FAILED_PRIOR_UNLOAD", WERR_DRIVER_FAILED_PRIOR_UNLOAD }, + { "WERR_VOLSNAP_PREPARE_HIBERNATE", WERR_VOLSNAP_PREPARE_HIBERNATE }, + { "WERR_HIBERNATION_FAILURE", WERR_HIBERNATION_FAILURE }, + { "WERR_FILE_SYSTEM_LIMITATION", WERR_FILE_SYSTEM_LIMITATION }, + { "WERR_ASSERTION_FAILURE", WERR_ASSERTION_FAILURE }, + { "WERR_ACPI_ERROR", WERR_ACPI_ERROR }, + { "WERR_WOW_ASSERTION", WERR_WOW_ASSERTION }, + { "WERR_PNP_BAD_MPS_TABLE", WERR_PNP_BAD_MPS_TABLE }, + { "WERR_PNP_TRANSLATION_FAILED", WERR_PNP_TRANSLATION_FAILED }, + { "WERR_PNP_IRQ_TRANSLATION_FAILED", WERR_PNP_IRQ_TRANSLATION_FAILED }, + { "WERR_PNP_INVALID_ID", WERR_PNP_INVALID_ID }, + { "WERR_WAKE_SYSTEM_DEBUGGER", WERR_WAKE_SYSTEM_DEBUGGER }, + { "WERR_HANDLES_CLOSED", WERR_HANDLES_CLOSED }, + { "WERR_EXTRANEOUS_INFORMATION", WERR_EXTRANEOUS_INFORMATION }, + { "WERR_RXACT_COMMIT_NECESSARY", WERR_RXACT_COMMIT_NECESSARY }, + { "WERR_MEDIA_CHECK", WERR_MEDIA_CHECK }, + { "WERR_GUID_SUBSTITUTION_MADE", WERR_GUID_SUBSTITUTION_MADE }, + { "WERR_STOPPED_ON_SYMLINK", WERR_STOPPED_ON_SYMLINK }, + { "WERR_LONGJUMP", WERR_LONGJUMP }, + { "WERR_PLUGPLAY_QUERY_VETOED", WERR_PLUGPLAY_QUERY_VETOED }, + { "WERR_UNWIND_CONSOLIDATE", WERR_UNWIND_CONSOLIDATE }, + { "WERR_REGISTRY_HIVE_RECOVERED", WERR_REGISTRY_HIVE_RECOVERED }, + { "WERR_DLL_MIGHT_BE_INSECURE", WERR_DLL_MIGHT_BE_INSECURE }, + { "WERR_DLL_MIGHT_BE_INCOMPATIBLE", WERR_DLL_MIGHT_BE_INCOMPATIBLE }, + { "WERR_DBG_EXCEPTION_NOT_HANDLED", WERR_DBG_EXCEPTION_NOT_HANDLED }, + { "WERR_DBG_REPLY_LATER", WERR_DBG_REPLY_LATER }, + { "WERR_DBG_UNABLE_TO_PROVIDE_HANDLE", WERR_DBG_UNABLE_TO_PROVIDE_HANDLE }, + { "WERR_DBG_TERMINATE_THREAD", WERR_DBG_TERMINATE_THREAD }, + { "WERR_DBG_TERMINATE_PROCESS", WERR_DBG_TERMINATE_PROCESS }, + { "WERR_DBG_CONTROL_C", WERR_DBG_CONTROL_C }, + { "WERR_DBG_PRINTEXCEPTION_C", WERR_DBG_PRINTEXCEPTION_C }, + { "WERR_DBG_RIPEXCEPTION", WERR_DBG_RIPEXCEPTION }, + { "WERR_DBG_CONTROL_BREAK", WERR_DBG_CONTROL_BREAK }, + { "WERR_DBG_COMMAND_EXCEPTION", WERR_DBG_COMMAND_EXCEPTION }, + { "WERR_OBJECT_NAME_EXISTS", WERR_OBJECT_NAME_EXISTS }, + { "WERR_THREAD_WAS_SUSPENDED", WERR_THREAD_WAS_SUSPENDED }, + { "WERR_IMAGE_NOT_AT_BASE", WERR_IMAGE_NOT_AT_BASE }, + { "WERR_RXACT_STATE_CREATED", WERR_RXACT_STATE_CREATED }, + { "WERR_SEGMENT_NOTIFICATION", WERR_SEGMENT_NOTIFICATION }, + { "WERR_BAD_CURRENT_DIRECTORY", WERR_BAD_CURRENT_DIRECTORY }, + { "WERR_FT_READ_RECOVERY_FROM_BACKUP", WERR_FT_READ_RECOVERY_FROM_BACKUP }, + { "WERR_FT_WRITE_RECOVERY", WERR_FT_WRITE_RECOVERY }, + { "WERR_IMAGE_MACHINE_TYPE_MISMATCH", WERR_IMAGE_MACHINE_TYPE_MISMATCH }, + { "WERR_RECEIVE_PARTIAL", WERR_RECEIVE_PARTIAL }, + { "WERR_RECEIVE_EXPEDITED", WERR_RECEIVE_EXPEDITED }, + { "WERR_RECEIVE_PARTIAL_EXPEDITED", WERR_RECEIVE_PARTIAL_EXPEDITED }, + { "WERR_EVENT_DONE", WERR_EVENT_DONE }, + { "WERR_EVENT_PENDING", WERR_EVENT_PENDING }, + { "WERR_CHECKING_FILE_SYSTEM", WERR_CHECKING_FILE_SYSTEM }, + { "WERR_FATAL_APP_EXIT", WERR_FATAL_APP_EXIT }, + { "WERR_PREDEFINED_HANDLE", WERR_PREDEFINED_HANDLE }, + { "WERR_WAS_UNLOCKED", WERR_WAS_UNLOCKED }, + { "WERR_SERVICE_NOTIFICATION", WERR_SERVICE_NOTIFICATION }, + { "WERR_WAS_LOCKED", WERR_WAS_LOCKED }, + { "WERR_LOG_HARD_ERROR", WERR_LOG_HARD_ERROR }, + { "WERR_ALREADY_WIN32", WERR_ALREADY_WIN32 }, + { "WERR_IMAGE_MACHINE_TYPE_MISMATCH_EXE", WERR_IMAGE_MACHINE_TYPE_MISMATCH_EXE }, + { "WERR_NO_YIELD_PERFORMED", WERR_NO_YIELD_PERFORMED }, + { "WERR_TIMER_RESUME_IGNORED", WERR_TIMER_RESUME_IGNORED }, + { "WERR_ARBITRATION_UNHANDLED", WERR_ARBITRATION_UNHANDLED }, + { "WERR_CARDBUS_NOT_SUPPORTED", WERR_CARDBUS_NOT_SUPPORTED }, + { "WERR_MP_PROCESSOR_MISMATCH", WERR_MP_PROCESSOR_MISMATCH }, + { "WERR_HIBERNATED", WERR_HIBERNATED }, + { "WERR_RESUME_HIBERNATION", WERR_RESUME_HIBERNATION }, + { "WERR_FIRMWARE_UPDATED", WERR_FIRMWARE_UPDATED }, + { "WERR_DRIVERS_LEAKING_LOCKED_PAGES", WERR_DRIVERS_LEAKING_LOCKED_PAGES }, + { "WERR_WAKE_SYSTEM", WERR_WAKE_SYSTEM }, + { "WERR_WAIT_1", WERR_WAIT_1 }, + { "WERR_WAIT_2", WERR_WAIT_2 }, + { "WERR_WAIT_3", WERR_WAIT_3 }, + { "WERR_WAIT_63", WERR_WAIT_63 }, + { "WERR_ABANDONED_WAIT_0", WERR_ABANDONED_WAIT_0 }, + { "WERR_ABANDONED_WAIT_63", WERR_ABANDONED_WAIT_63 }, + { "WERR_USER_APC", WERR_USER_APC }, + { "WERR_KERNEL_APC", WERR_KERNEL_APC }, + { "WERR_ALERTED", WERR_ALERTED }, + { "WERR_ELEVATION_REQUIRED", WERR_ELEVATION_REQUIRED }, + { "WERR_REPARSE", WERR_REPARSE }, + { "WERR_OPLOCK_BREAK_IN_PROGRESS", WERR_OPLOCK_BREAK_IN_PROGRESS }, + { "WERR_VOLUME_MOUNTED", WERR_VOLUME_MOUNTED }, + { "WERR_RXACT_COMMITTED", WERR_RXACT_COMMITTED }, + { "WERR_NOTIFY_CLEANUP", WERR_NOTIFY_CLEANUP }, + { "WERR_PRIMARY_TRANSPORT_CONNECT_FAILED", WERR_PRIMARY_TRANSPORT_CONNECT_FAILED }, + { "WERR_PAGE_FAULT_TRANSITION", WERR_PAGE_FAULT_TRANSITION }, + { "WERR_PAGE_FAULT_DEMAND_ZERO", WERR_PAGE_FAULT_DEMAND_ZERO }, + { "WERR_PAGE_FAULT_COPY_ON_WRITE", WERR_PAGE_FAULT_COPY_ON_WRITE }, + { "WERR_PAGE_FAULT_GUARD_PAGE", WERR_PAGE_FAULT_GUARD_PAGE }, + { "WERR_PAGE_FAULT_PAGING_FILE", WERR_PAGE_FAULT_PAGING_FILE }, + { "WERR_CACHE_PAGE_LOCKED", WERR_CACHE_PAGE_LOCKED }, + { "WERR_CRASH_DUMP", WERR_CRASH_DUMP }, + { "WERR_BUFFER_ALL_ZEROS", WERR_BUFFER_ALL_ZEROS }, + { "WERR_REPARSE_OBJECT", WERR_REPARSE_OBJECT }, + { "WERR_RESOURCE_REQUIREMENTS_CHANGED", WERR_RESOURCE_REQUIREMENTS_CHANGED }, + { "WERR_TRANSLATION_COMPLETE", WERR_TRANSLATION_COMPLETE }, + { "WERR_NOTHING_TO_TERMINATE", WERR_NOTHING_TO_TERMINATE }, + { "WERR_PROCESS_NOT_IN_JOB", WERR_PROCESS_NOT_IN_JOB }, + { "WERR_PROCESS_IN_JOB", WERR_PROCESS_IN_JOB }, + { "WERR_VOLSNAP_HIBERNATE_READY", WERR_VOLSNAP_HIBERNATE_READY }, + { "WERR_FSFILTER_OP_COMPLETED_SUCCESSFULLY", WERR_FSFILTER_OP_COMPLETED_SUCCESSFULLY }, + { "WERR_INTERRUPT_VECTOR_ALREADY_CONNECTED", WERR_INTERRUPT_VECTOR_ALREADY_CONNECTED }, + { "WERR_INTERRUPT_STILL_CONNECTED", WERR_INTERRUPT_STILL_CONNECTED }, + { "WERR_WAIT_FOR_OPLOCK", WERR_WAIT_FOR_OPLOCK }, + { "WERR_DBG_EXCEPTION_HANDLED", WERR_DBG_EXCEPTION_HANDLED }, + { "WERR_DBG_CONTINUE", WERR_DBG_CONTINUE }, + { "WERR_CALLBACK_POP_STACK", WERR_CALLBACK_POP_STACK }, + { "WERR_COMPRESSION_DISABLED", WERR_COMPRESSION_DISABLED }, + { "WERR_CANTFETCHBACKWARDS", WERR_CANTFETCHBACKWARDS }, + { "WERR_CANTSCROLLBACKWARDS", WERR_CANTSCROLLBACKWARDS }, + { "WERR_ROWSNOTRELEASED", WERR_ROWSNOTRELEASED }, + { "WERR_BAD_ACCESSOR_FLAGS", WERR_BAD_ACCESSOR_FLAGS }, + { "WERR_ERRORS_ENCOUNTERED", WERR_ERRORS_ENCOUNTERED }, + { "WERR_NOT_CAPABLE", WERR_NOT_CAPABLE }, + { "WERR_REQUEST_OUT_OF_SEQUENCE", WERR_REQUEST_OUT_OF_SEQUENCE }, + { "WERR_VERSION_PARSE_ERROR", WERR_VERSION_PARSE_ERROR }, + { "WERR_BADSTARTPOSITION", WERR_BADSTARTPOSITION }, + { "WERR_MEMORY_HARDWARE", WERR_MEMORY_HARDWARE }, + { "WERR_DISK_REPAIR_DISABLED", WERR_DISK_REPAIR_DISABLED }, + { "WERR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE", WERR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE }, + { "WERR_SYSTEM_POWERSTATE_TRANSITION", WERR_SYSTEM_POWERSTATE_TRANSITION }, + { "WERR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION", WERR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION }, + { "WERR_MCA_EXCEPTION", WERR_MCA_EXCEPTION }, + { "WERR_ACCESS_AUDIT_BY_POLICY", WERR_ACCESS_AUDIT_BY_POLICY }, + { "WERR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY", WERR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY }, + { "WERR_ABANDON_HIBERFILE", WERR_ABANDON_HIBERFILE }, + { "WERR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED", WERR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED }, + { "WERR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR", WERR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR }, + { "WERR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR", WERR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR }, + { "WERR_EA_ACCESS_DENIED", WERR_EA_ACCESS_DENIED }, + { "WERR_OPERATION_ABORTED", WERR_OPERATION_ABORTED }, + { "WERR_IO_INCOMPLETE", WERR_IO_INCOMPLETE }, + { "WERR_NOACCESS", WERR_NOACCESS }, + { "WERR_SWAPERROR", WERR_SWAPERROR }, + { "WERR_STACK_OVERFLOW", WERR_STACK_OVERFLOW }, + { "WERR_INVALID_MESSAGE", WERR_INVALID_MESSAGE }, + { "WERR_UNRECOGNIZED_VOLUME", WERR_UNRECOGNIZED_VOLUME }, + { "WERR_FILE_INVALID", WERR_FILE_INVALID }, + { "WERR_FULLSCREEN_MODE", WERR_FULLSCREEN_MODE }, + { "WERR_NO_TOKEN", WERR_NO_TOKEN }, + { "WERR_BADDB", WERR_BADDB }, + { "WERR_BADKEY", WERR_BADKEY }, + { "WERR_CANTOPEN", WERR_CANTOPEN }, + { "WERR_CANTREAD", WERR_CANTREAD }, + { "WERR_CANTWRITE", WERR_CANTWRITE }, + { "WERR_REGISTRY_RECOVERED", WERR_REGISTRY_RECOVERED }, + { "WERR_REGISTRY_CORRUPT", WERR_REGISTRY_CORRUPT }, + { "WERR_REGISTRY_IO_FAILED", WERR_REGISTRY_IO_FAILED }, + { "WERR_NOT_REGISTRY_FILE", WERR_NOT_REGISTRY_FILE }, + { "WERR_KEY_DELETED", WERR_KEY_DELETED }, + { "WERR_NO_LOG_SPACE", WERR_NO_LOG_SPACE }, + { "WERR_KEY_HAS_CHILDREN", WERR_KEY_HAS_CHILDREN }, + { "WERR_CHILD_MUST_BE_VOLATILE", WERR_CHILD_MUST_BE_VOLATILE }, + { "WERR_NOTIFY_ENUM_DIR", WERR_NOTIFY_ENUM_DIR }, + { "WERR_DEPENDENT_SERVICES_RUNNING", WERR_DEPENDENT_SERVICES_RUNNING }, + { "WERR_SERVICE_REQUEST_TIMEOUT", WERR_SERVICE_REQUEST_TIMEOUT }, + { "WERR_SERVICE_NO_THREAD", WERR_SERVICE_NO_THREAD }, + { "WERR_SERVICE_DATABASE_LOCKED", WERR_SERVICE_DATABASE_LOCKED }, + { "WERR_INVALID_SERVICE_ACCOUNT", WERR_INVALID_SERVICE_ACCOUNT }, + { "WERR_CIRCULAR_DEPENDENCY", WERR_CIRCULAR_DEPENDENCY }, + { "WERR_SERVICE_DOES_NOT_EXIST", WERR_SERVICE_DOES_NOT_EXIST }, + { "WERR_SERVICE_CANNOT_ACCEPT_CTRL", WERR_SERVICE_CANNOT_ACCEPT_CTRL }, + { "WERR_SERVICE_NOT_ACTIVE", WERR_SERVICE_NOT_ACTIVE }, + { "WERR_FAILED_SERVICE_CONTROLLER_CONNECT", WERR_FAILED_SERVICE_CONTROLLER_CONNECT }, + { "WERR_EXCEPTION_IN_SERVICE", WERR_EXCEPTION_IN_SERVICE }, + { "WERR_DATABASE_DOES_NOT_EXIST", WERR_DATABASE_DOES_NOT_EXIST }, + { "WERR_SERVICE_SPECIFIC_ERROR", WERR_SERVICE_SPECIFIC_ERROR }, + { "WERR_PROCESS_ABORTED", WERR_PROCESS_ABORTED }, + { "WERR_SERVICE_DEPENDENCY_FAIL", WERR_SERVICE_DEPENDENCY_FAIL }, + { "WERR_SERVICE_LOGON_FAILED", WERR_SERVICE_LOGON_FAILED }, + { "WERR_SERVICE_START_HANG", WERR_SERVICE_START_HANG }, + { "WERR_INVALID_SERVICE_LOCK", WERR_INVALID_SERVICE_LOCK }, + { "WERR_ALREADY_RUNNING_LKG", WERR_ALREADY_RUNNING_LKG }, + { "WERR_SERVICE_DEPENDENCY_DELETED", WERR_SERVICE_DEPENDENCY_DELETED }, + { "WERR_BOOT_ALREADY_ACCEPTED", WERR_BOOT_ALREADY_ACCEPTED }, + { "WERR_DIFFERENT_SERVICE_ACCOUNT", WERR_DIFFERENT_SERVICE_ACCOUNT }, + { "WERR_CANNOT_DETECT_DRIVER_FAILURE", WERR_CANNOT_DETECT_DRIVER_FAILURE }, + { "WERR_CANNOT_DETECT_PROCESS_ABORT", WERR_CANNOT_DETECT_PROCESS_ABORT }, + { "WERR_NO_RECOVERY_PROGRAM", WERR_NO_RECOVERY_PROGRAM }, + { "WERR_SERVICE_NOT_IN_EXE", WERR_SERVICE_NOT_IN_EXE }, + { "WERR_NOT_SAFEBOOT_SERVICE", WERR_NOT_SAFEBOOT_SERVICE }, + { "WERR_END_OF_MEDIA", WERR_END_OF_MEDIA }, + { "WERR_FILEMARK_DETECTED", WERR_FILEMARK_DETECTED }, + { "WERR_BEGINNING_OF_MEDIA", WERR_BEGINNING_OF_MEDIA }, + { "WERR_SETMARK_DETECTED", WERR_SETMARK_DETECTED }, + { "WERR_NO_DATA_DETECTED", WERR_NO_DATA_DETECTED }, + { "WERR_PARTITION_FAILURE", WERR_PARTITION_FAILURE }, + { "WERR_INVALID_BLOCK_LENGTH", WERR_INVALID_BLOCK_LENGTH }, + { "WERR_DEVICE_NOT_PARTITIONED", WERR_DEVICE_NOT_PARTITIONED }, + { "WERR_UNABLE_TO_LOCK_MEDIA", WERR_UNABLE_TO_LOCK_MEDIA }, + { "WERR_UNABLE_TO_UNLOAD_MEDIA", WERR_UNABLE_TO_UNLOAD_MEDIA }, + { "WERR_MEDIA_CHANGED", WERR_MEDIA_CHANGED }, + { "WERR_BUS_RESET", WERR_BUS_RESET }, + { "WERR_NO_MEDIA_IN_DRIVE", WERR_NO_MEDIA_IN_DRIVE }, + { "WERR_NO_UNICODE_TRANSLATION", WERR_NO_UNICODE_TRANSLATION }, + { "WERR_DLL_INIT_FAILED", WERR_DLL_INIT_FAILED }, + { "WERR_SHUTDOWN_IN_PROGRESS", WERR_SHUTDOWN_IN_PROGRESS }, + { "WERR_IO_DEVICE", WERR_IO_DEVICE }, + { "WERR_SERIAL_NO_DEVICE", WERR_SERIAL_NO_DEVICE }, + { "WERR_IRQ_BUSY", WERR_IRQ_BUSY }, + { "WERR_MORE_WRITES", WERR_MORE_WRITES }, + { "WERR_COUNTER_TIMEOUT", WERR_COUNTER_TIMEOUT }, + { "WERR_FLOPPY_ID_MARK_NOT_FOUND", WERR_FLOPPY_ID_MARK_NOT_FOUND }, + { "WERR_FLOPPY_WRONG_CYLINDER", WERR_FLOPPY_WRONG_CYLINDER }, + { "WERR_FLOPPY_UNKNOWN_ERROR", WERR_FLOPPY_UNKNOWN_ERROR }, + { "WERR_FLOPPY_BAD_REGISTERS", WERR_FLOPPY_BAD_REGISTERS }, + { "WERR_DISK_RECALIBRATE_FAILED", WERR_DISK_RECALIBRATE_FAILED }, + { "WERR_DISK_OPERATION_FAILED", WERR_DISK_OPERATION_FAILED }, + { "WERR_DISK_RESET_FAILED", WERR_DISK_RESET_FAILED }, + { "WERR_EOM_OVERFLOW", WERR_EOM_OVERFLOW }, + { "WERR_NOT_ENOUGH_SERVER_MEMORY", WERR_NOT_ENOUGH_SERVER_MEMORY }, + { "WERR_POSSIBLE_DEADLOCK", WERR_POSSIBLE_DEADLOCK }, + { "WERR_MAPPED_ALIGNMENT", WERR_MAPPED_ALIGNMENT }, + { "WERR_SET_POWER_STATE_VETOED", WERR_SET_POWER_STATE_VETOED }, + { "WERR_SET_POWER_STATE_FAILED", WERR_SET_POWER_STATE_FAILED }, + { "WERR_TOO_MANY_LINKS", WERR_TOO_MANY_LINKS }, + { "WERR_OLD_WIN_VERSION", WERR_OLD_WIN_VERSION }, + { "WERR_APP_WRONG_OS", WERR_APP_WRONG_OS }, + { "WERR_SINGLE_INSTANCE_APP", WERR_SINGLE_INSTANCE_APP }, + { "WERR_RMODE_APP", WERR_RMODE_APP }, + { "WERR_INVALID_DLL", WERR_INVALID_DLL }, + { "WERR_NO_ASSOCIATION", WERR_NO_ASSOCIATION }, + { "WERR_DDE_FAIL", WERR_DDE_FAIL }, + { "WERR_DLL_NOT_FOUND", WERR_DLL_NOT_FOUND }, + { "WERR_NO_MORE_USER_HANDLES", WERR_NO_MORE_USER_HANDLES }, + { "WERR_MESSAGE_SYNC_ONLY", WERR_MESSAGE_SYNC_ONLY }, + { "WERR_SOURCE_ELEMENT_EMPTY", WERR_SOURCE_ELEMENT_EMPTY }, + { "WERR_DESTINATION_ELEMENT_FULL", WERR_DESTINATION_ELEMENT_FULL }, + { "WERR_ILLEGAL_ELEMENT_ADDRESS", WERR_ILLEGAL_ELEMENT_ADDRESS }, + { "WERR_MAGAZINE_NOT_PRESENT", WERR_MAGAZINE_NOT_PRESENT }, + { "WERR_DEVICE_REINITIALIZATION_NEEDED", WERR_DEVICE_REINITIALIZATION_NEEDED }, + { "WERR_DEVICE_REQUIRES_CLEANING", WERR_DEVICE_REQUIRES_CLEANING }, + { "WERR_DEVICE_DOOR_OPEN", WERR_DEVICE_DOOR_OPEN }, + { "WERR_NO_MATCH", WERR_NO_MATCH }, + { "WERR_SET_NOT_FOUND", WERR_SET_NOT_FOUND }, + { "WERR_POINT_NOT_FOUND", WERR_POINT_NOT_FOUND }, + { "WERR_NO_TRACKING_SERVICE", WERR_NO_TRACKING_SERVICE }, + { "WERR_NO_VOLUME_ID", WERR_NO_VOLUME_ID }, + { "WERR_UNABLE_TO_REMOVE_REPLACED", WERR_UNABLE_TO_REMOVE_REPLACED }, + { "WERR_UNABLE_TO_MOVE_REPLACEMENT", WERR_UNABLE_TO_MOVE_REPLACEMENT }, + { "WERR_UNABLE_TO_MOVE_REPLACEMENT_2", WERR_UNABLE_TO_MOVE_REPLACEMENT_2 }, + { "WERR_JOURNAL_DELETE_IN_PROGRESS", WERR_JOURNAL_DELETE_IN_PROGRESS }, + { "WERR_JOURNAL_NOT_ACTIVE", WERR_JOURNAL_NOT_ACTIVE }, + { "WERR_POTENTIAL_FILE_FOUND", WERR_POTENTIAL_FILE_FOUND }, + { "WERR_JOURNAL_ENTRY_DELETED", WERR_JOURNAL_ENTRY_DELETED }, + { "WERR_SHUTDOWN_IS_SCHEDULED", WERR_SHUTDOWN_IS_SCHEDULED }, + { "WERR_SHUTDOWN_USERS_LOGGED_ON", WERR_SHUTDOWN_USERS_LOGGED_ON }, + { "WERR_BAD_DEVICE", WERR_BAD_DEVICE }, + { "WERR_CONNECTION_UNAVAIL", WERR_CONNECTION_UNAVAIL }, + { "WERR_DEVICE_ALREADY_REMEMBERED", WERR_DEVICE_ALREADY_REMEMBERED }, + { "WERR_NO_NET_OR_BAD_PATH", WERR_NO_NET_OR_BAD_PATH }, + { "WERR_BAD_PROVIDER", WERR_BAD_PROVIDER }, + { "WERR_CANNOT_OPEN_PROFILE", WERR_CANNOT_OPEN_PROFILE }, + { "WERR_BAD_PROFILE", WERR_BAD_PROFILE }, + { "WERR_NOT_CONTAINER", WERR_NOT_CONTAINER }, + { "WERR_EXTENDED_ERROR", WERR_EXTENDED_ERROR }, + { "WERR_INVALID_GROUPNAME", WERR_INVALID_GROUPNAME }, + { "WERR_INVALID_EVENTNAME", WERR_INVALID_EVENTNAME }, + { "WERR_INVALID_SERVICENAME", WERR_INVALID_SERVICENAME }, + { "WERR_INVALID_NETNAME", WERR_INVALID_NETNAME }, + { "WERR_INVALID_SHARENAME", WERR_INVALID_SHARENAME }, + { "WERR_INVALID_PASSWORDNAME", WERR_INVALID_PASSWORDNAME }, + { "WERR_INVALID_MESSAGENAME", WERR_INVALID_MESSAGENAME }, + { "WERR_INVALID_MESSAGEDEST", WERR_INVALID_MESSAGEDEST }, + { "WERR_SESSION_CREDENTIAL_CONFLICT", WERR_SESSION_CREDENTIAL_CONFLICT }, + { "WERR_REMOTE_SESSION_LIMIT_EXCEEDED", WERR_REMOTE_SESSION_LIMIT_EXCEEDED }, + { "WERR_DUP_DOMAINNAME", WERR_DUP_DOMAINNAME }, + { "WERR_NO_NETWORK", WERR_NO_NETWORK }, + { "WERR_CANCELLED", WERR_CANCELLED }, + { "WERR_USER_MAPPED_FILE", WERR_USER_MAPPED_FILE }, + { "WERR_CONNECTION_REFUSED", WERR_CONNECTION_REFUSED }, + { "WERR_GRACEFUL_DISCONNECT", WERR_GRACEFUL_DISCONNECT }, + { "WERR_ADDRESS_ALREADY_ASSOCIATED", WERR_ADDRESS_ALREADY_ASSOCIATED }, + { "WERR_ADDRESS_NOT_ASSOCIATED", WERR_ADDRESS_NOT_ASSOCIATED }, + { "WERR_CONNECTION_INVALID", WERR_CONNECTION_INVALID }, + { "WERR_CONNECTION_ACTIVE", WERR_CONNECTION_ACTIVE }, + { "WERR_NETWORK_UNREACHABLE", WERR_NETWORK_UNREACHABLE }, + { "WERR_HOST_UNREACHABLE", WERR_HOST_UNREACHABLE }, + { "WERR_PROTOCOL_UNREACHABLE", WERR_PROTOCOL_UNREACHABLE }, + { "WERR_PORT_UNREACHABLE", WERR_PORT_UNREACHABLE }, + { "WERR_REQUEST_ABORTED", WERR_REQUEST_ABORTED }, + { "WERR_CONNECTION_ABORTED", WERR_CONNECTION_ABORTED }, + { "WERR_RETRY", WERR_RETRY }, + { "WERR_CONNECTION_COUNT_LIMIT", WERR_CONNECTION_COUNT_LIMIT }, + { "WERR_LOGIN_TIME_RESTRICTION", WERR_LOGIN_TIME_RESTRICTION }, + { "WERR_LOGIN_WKSTA_RESTRICTION", WERR_LOGIN_WKSTA_RESTRICTION }, + { "WERR_INCORRECT_ADDRESS", WERR_INCORRECT_ADDRESS }, + { "WERR_ALREADY_REGISTERED", WERR_ALREADY_REGISTERED }, + { "WERR_SERVICE_NOT_FOUND", WERR_SERVICE_NOT_FOUND }, + { "WERR_NOT_LOGGED_ON", WERR_NOT_LOGGED_ON }, + { "WERR_CONTINUE", WERR_CONTINUE }, + { "WERR_ALREADY_INITIALIZED", WERR_ALREADY_INITIALIZED }, + { "WERR_NO_MORE_DEVICES", WERR_NO_MORE_DEVICES }, + { "WERR_NO_SUCH_SITE", WERR_NO_SUCH_SITE }, + { "WERR_DOMAIN_CONTROLLER_EXISTS", WERR_DOMAIN_CONTROLLER_EXISTS }, + { "WERR_ONLY_IF_CONNECTED", WERR_ONLY_IF_CONNECTED }, + { "WERR_OVERRIDE_NOCHANGES", WERR_OVERRIDE_NOCHANGES }, + { "WERR_BAD_USER_PROFILE", WERR_BAD_USER_PROFILE }, + { "WERR_NOT_SUPPORTED_ON_SBS", WERR_NOT_SUPPORTED_ON_SBS }, + { "WERR_SERVER_SHUTDOWN_IN_PROGRESS", WERR_SERVER_SHUTDOWN_IN_PROGRESS }, + { "WERR_HOST_DOWN", WERR_HOST_DOWN }, + { "WERR_NON_ACCOUNT_SID", WERR_NON_ACCOUNT_SID }, + { "WERR_NON_DOMAIN_SID", WERR_NON_DOMAIN_SID }, + { "WERR_APPHELP_BLOCK", WERR_APPHELP_BLOCK }, + { "WERR_ACCESS_DISABLED_BY_POLICY", WERR_ACCESS_DISABLED_BY_POLICY }, + { "WERR_REG_NAT_CONSUMPTION", WERR_REG_NAT_CONSUMPTION }, + { "WERR_CSCSHARE_OFFLINE", WERR_CSCSHARE_OFFLINE }, + { "WERR_PKINIT_FAILURE", WERR_PKINIT_FAILURE }, + { "WERR_SMARTCARD_SUBSYSTEM_FAILURE", WERR_SMARTCARD_SUBSYSTEM_FAILURE }, + { "WERR_DOWNGRADE_DETECTED", WERR_DOWNGRADE_DETECTED }, + { "WERR_CALLBACK_SUPPLIED_INVALID_DATA", WERR_CALLBACK_SUPPLIED_INVALID_DATA }, + { "WERR_SYNC_FOREGROUND_REFRESH_REQUIRED", WERR_SYNC_FOREGROUND_REFRESH_REQUIRED }, + { "WERR_DRIVER_BLOCKED", WERR_DRIVER_BLOCKED }, + { "WERR_INVALID_IMPORT_OF_NON_DLL", WERR_INVALID_IMPORT_OF_NON_DLL }, + { "WERR_ACCESS_DISABLED_WEBBLADE", WERR_ACCESS_DISABLED_WEBBLADE }, + { "WERR_ACCESS_DISABLED_WEBBLADE_TAMPER", WERR_ACCESS_DISABLED_WEBBLADE_TAMPER }, + { "WERR_RECOVERY_FAILURE", WERR_RECOVERY_FAILURE }, + { "WERR_ALREADY_FIBER", WERR_ALREADY_FIBER }, + { "WERR_ALREADY_THREAD", WERR_ALREADY_THREAD }, + { "WERR_STACK_BUFFER_OVERRUN", WERR_STACK_BUFFER_OVERRUN }, + { "WERR_PARAMETER_QUOTA_EXCEEDED", WERR_PARAMETER_QUOTA_EXCEEDED }, + { "WERR_DEBUGGER_INACTIVE", WERR_DEBUGGER_INACTIVE }, + { "WERR_DELAY_LOAD_FAILED", WERR_DELAY_LOAD_FAILED }, + { "WERR_VDM_DISALLOWED", WERR_VDM_DISALLOWED }, + { "WERR_UNIDENTIFIED_ERROR", WERR_UNIDENTIFIED_ERROR }, + { "WERR_BEYOND_VDL", WERR_BEYOND_VDL }, + { "WERR_INCOMPATIBLE_SERVICE_SID_TYPE", WERR_INCOMPATIBLE_SERVICE_SID_TYPE }, + { "WERR_DRIVER_PROCESS_TERMINATED", WERR_DRIVER_PROCESS_TERMINATED }, + { "WERR_IMPLEMENTATION_LIMIT", WERR_IMPLEMENTATION_LIMIT }, + { "WERR_PROCESS_IS_PROTECTED", WERR_PROCESS_IS_PROTECTED }, + { "WERR_SERVICE_NOTIFY_CLIENT_LAGGING", WERR_SERVICE_NOTIFY_CLIENT_LAGGING }, + { "WERR_DISK_QUOTA_EXCEEDED", WERR_DISK_QUOTA_EXCEEDED }, + { "WERR_CONTENT_BLOCKED", WERR_CONTENT_BLOCKED }, + { "WERR_INCOMPATIBLE_SERVICE_PRIVILEGE", WERR_INCOMPATIBLE_SERVICE_PRIVILEGE }, + { "WERR_INVALID_LABEL", WERR_INVALID_LABEL }, + { "WERR_NOT_ALL_ASSIGNED", WERR_NOT_ALL_ASSIGNED }, + { "WERR_SOME_NOT_MAPPED", WERR_SOME_NOT_MAPPED }, + { "WERR_NO_QUOTAS_FOR_ACCOUNT", WERR_NO_QUOTAS_FOR_ACCOUNT }, + { "WERR_LOCAL_USER_SESSION_KEY", WERR_LOCAL_USER_SESSION_KEY }, + { "WERR_NULL_LM_PASSWORD", WERR_NULL_LM_PASSWORD }, + { "WERR_NO_IMPERSONATION_TOKEN", WERR_NO_IMPERSONATION_TOKEN }, + { "WERR_CANT_DISABLE_MANDATORY", WERR_CANT_DISABLE_MANDATORY }, + { "WERR_INVALID_ACCOUNT_NAME", WERR_INVALID_ACCOUNT_NAME }, + { "WERR_USER_EXISTS", WERR_USER_EXISTS }, + { "WERR_MEMBER_NOT_IN_GROUP", WERR_MEMBER_NOT_IN_GROUP }, + { "WERR_LAST_ADMIN", WERR_LAST_ADMIN }, + { "WERR_ILL_FORMED_PASSWORD", WERR_ILL_FORMED_PASSWORD }, + { "WERR_ACCOUNT_RESTRICTION", WERR_ACCOUNT_RESTRICTION }, + { "WERR_INVALID_LOGON_HOURS", WERR_INVALID_LOGON_HOURS }, + { "WERR_INVALID_WORKSTATION", WERR_INVALID_WORKSTATION }, + { "WERR_PASSWORD_EXPIRED", WERR_PASSWORD_EXPIRED }, + { "WERR_ACCOUNT_DISABLED", WERR_ACCOUNT_DISABLED }, + { "WERR_TOO_MANY_LUIDS_REQUESTED", WERR_TOO_MANY_LUIDS_REQUESTED }, + { "WERR_LUIDS_EXHAUSTED", WERR_LUIDS_EXHAUSTED }, + { "WERR_INVALID_SUB_AUTHORITY", WERR_INVALID_SUB_AUTHORITY }, + { "WERR_INVALID_ACL", WERR_INVALID_ACL }, + { "WERR_INVALID_SID", WERR_INVALID_SID }, + { "WERR_INVALID_SECURITY_DESCR", WERR_INVALID_SECURITY_DESCR }, + { "WERR_BAD_INHERITANCE_ACL", WERR_BAD_INHERITANCE_ACL }, + { "WERR_SERVER_DISABLED", WERR_SERVER_DISABLED }, + { "WERR_SERVER_NOT_DISABLED", WERR_SERVER_NOT_DISABLED }, + { "WERR_INVALID_ID_AUTHORITY", WERR_INVALID_ID_AUTHORITY }, + { "WERR_ALLOTTED_SPACE_EXCEEDED", WERR_ALLOTTED_SPACE_EXCEEDED }, + { "WERR_INVALID_GROUP_ATTRIBUTES", WERR_INVALID_GROUP_ATTRIBUTES }, + { "WERR_BAD_IMPERSONATION_LEVEL", WERR_BAD_IMPERSONATION_LEVEL }, + { "WERR_CANT_OPEN_ANONYMOUS", WERR_CANT_OPEN_ANONYMOUS }, + { "WERR_BAD_VALIDATION_CLASS", WERR_BAD_VALIDATION_CLASS }, + { "WERR_BAD_TOKEN_TYPE", WERR_BAD_TOKEN_TYPE }, + { "WERR_NO_SECURITY_ON_OBJECT", WERR_NO_SECURITY_ON_OBJECT }, + { "WERR_CANT_ACCESS_DOMAIN_INFO", WERR_CANT_ACCESS_DOMAIN_INFO }, + { "WERR_INVALID_SERVER_STATE", WERR_INVALID_SERVER_STATE }, + { "WERR_DOMAIN_EXISTS", WERR_DOMAIN_EXISTS }, + { "WERR_DOMAIN_LIMIT_EXCEEDED", WERR_DOMAIN_LIMIT_EXCEEDED }, + { "WERR_INTERNAL_DB_CORRUPTION", WERR_INTERNAL_DB_CORRUPTION }, + { "WERR_INTERNAL_ERROR", WERR_INTERNAL_ERROR }, + { "WERR_GENERIC_NOT_MAPPED", WERR_GENERIC_NOT_MAPPED }, + { "WERR_BAD_DESCRIPTOR_FORMAT", WERR_BAD_DESCRIPTOR_FORMAT }, + { "WERR_NOT_LOGON_PROCESS", WERR_NOT_LOGON_PROCESS }, + { "WERR_LOGON_SESSION_EXISTS", WERR_LOGON_SESSION_EXISTS }, + { "WERR_NO_SUCH_PACKAGE", WERR_NO_SUCH_PACKAGE }, + { "WERR_BAD_LOGON_SESSION_STATE", WERR_BAD_LOGON_SESSION_STATE }, + { "WERR_LOGON_SESSION_COLLISION", WERR_LOGON_SESSION_COLLISION }, + { "WERR_INVALID_LOGON_TYPE", WERR_INVALID_LOGON_TYPE }, + { "WERR_CANNOT_IMPERSONATE", WERR_CANNOT_IMPERSONATE }, + { "WERR_RXACT_INVALID_STATE", WERR_RXACT_INVALID_STATE }, + { "WERR_RXACT_COMMIT_FAILURE", WERR_RXACT_COMMIT_FAILURE }, + { "WERR_SPECIAL_GROUP", WERR_SPECIAL_GROUP }, + { "WERR_SPECIAL_USER", WERR_SPECIAL_USER }, + { "WERR_MEMBERS_PRIMARY_GROUP", WERR_MEMBERS_PRIMARY_GROUP }, + { "WERR_TOKEN_ALREADY_IN_USE", WERR_TOKEN_ALREADY_IN_USE }, + { "WERR_MEMBER_NOT_IN_ALIAS", WERR_MEMBER_NOT_IN_ALIAS }, + { "WERR_LOGON_NOT_GRANTED", WERR_LOGON_NOT_GRANTED }, + { "WERR_TOO_MANY_SECRETS", WERR_TOO_MANY_SECRETS }, + { "WERR_SECRET_TOO_LONG", WERR_SECRET_TOO_LONG }, + { "WERR_INTERNAL_DB_ERROR", WERR_INTERNAL_DB_ERROR }, + { "WERR_TOO_MANY_CONTEXT_IDS", WERR_TOO_MANY_CONTEXT_IDS }, + { "WERR_LOGON_TYPE_NOT_GRANTED", WERR_LOGON_TYPE_NOT_GRANTED }, + { "WERR_NT_CROSS_ENCRYPTION_REQUIRED", WERR_NT_CROSS_ENCRYPTION_REQUIRED }, + { "WERR_NO_SUCH_MEMBER", WERR_NO_SUCH_MEMBER }, + { "WERR_INVALID_MEMBER", WERR_INVALID_MEMBER }, + { "WERR_TOO_MANY_SIDS", WERR_TOO_MANY_SIDS }, + { "WERR_LM_CROSS_ENCRYPTION_REQUIRED", WERR_LM_CROSS_ENCRYPTION_REQUIRED }, + { "WERR_NO_INHERITANCE", WERR_NO_INHERITANCE }, + { "WERR_FILE_CORRUPT", WERR_FILE_CORRUPT }, + { "WERR_DISK_CORRUPT", WERR_DISK_CORRUPT }, + { "WERR_NO_USER_SESSION_KEY", WERR_NO_USER_SESSION_KEY }, + { "WERR_LICENSE_QUOTA_EXCEEDED", WERR_LICENSE_QUOTA_EXCEEDED }, + { "WERR_WRONG_TARGET_NAME", WERR_WRONG_TARGET_NAME }, + { "WERR_MUTUAL_AUTH_FAILED", WERR_MUTUAL_AUTH_FAILED }, + { "WERR_CURRENT_DOMAIN_NOT_ALLOWED", WERR_CURRENT_DOMAIN_NOT_ALLOWED }, + { "WERR_INVALID_WINDOW_HANDLE", WERR_INVALID_WINDOW_HANDLE }, + { "WERR_INVALID_MENU_HANDLE", WERR_INVALID_MENU_HANDLE }, + { "WERR_INVALID_CURSOR_HANDLE", WERR_INVALID_CURSOR_HANDLE }, + { "WERR_INVALID_ACCEL_HANDLE", WERR_INVALID_ACCEL_HANDLE }, + { "WERR_INVALID_HOOK_HANDLE", WERR_INVALID_HOOK_HANDLE }, + { "WERR_INVALID_DWP_HANDLE", WERR_INVALID_DWP_HANDLE }, + { "WERR_TLW_WITH_WSCHILD", WERR_TLW_WITH_WSCHILD }, + { "WERR_CANNOT_FIND_WND_CLASS", WERR_CANNOT_FIND_WND_CLASS }, + { "WERR_WINDOW_OF_OTHER_THREAD", WERR_WINDOW_OF_OTHER_THREAD }, + { "WERR_HOTKEY_ALREADY_REGISTERED", WERR_HOTKEY_ALREADY_REGISTERED }, + { "WERR_CLASS_ALREADY_EXISTS", WERR_CLASS_ALREADY_EXISTS }, + { "WERR_CLASS_DOES_NOT_EXIST", WERR_CLASS_DOES_NOT_EXIST }, + { "WERR_CLASS_HAS_WINDOWS", WERR_CLASS_HAS_WINDOWS }, + { "WERR_INVALID_INDEX", WERR_INVALID_INDEX }, + { "WERR_INVALID_ICON_HANDLE", WERR_INVALID_ICON_HANDLE }, + { "WERR_PRIVATE_DIALOG_INDEX", WERR_PRIVATE_DIALOG_INDEX }, + { "WERR_LISTBOX_ID_NOT_FOUND", WERR_LISTBOX_ID_NOT_FOUND }, + { "WERR_NO_WILDCARD_CHARACTERS", WERR_NO_WILDCARD_CHARACTERS }, + { "WERR_CLIPBOARD_NOT_OPEN", WERR_CLIPBOARD_NOT_OPEN }, + { "WERR_HOTKEY_NOT_REGISTERED", WERR_HOTKEY_NOT_REGISTERED }, + { "WERR_WINDOW_NOT_DIALOG", WERR_WINDOW_NOT_DIALOG }, + { "WERR_CONTROL_ID_NOT_FOUND", WERR_CONTROL_ID_NOT_FOUND }, + { "WERR_INVALID_COMBOBOX_MESSAGE", WERR_INVALID_COMBOBOX_MESSAGE }, + { "WERR_WINDOW_NOT_COMBOBOX", WERR_WINDOW_NOT_COMBOBOX }, + { "WERR_INVALID_EDIT_HEIGHT", WERR_INVALID_EDIT_HEIGHT }, + { "WERR_DC_NOT_FOUND", WERR_DC_NOT_FOUND }, + { "WERR_INVALID_HOOK_FILTER", WERR_INVALID_HOOK_FILTER }, + { "WERR_INVALID_FILTER_PROC", WERR_INVALID_FILTER_PROC }, + { "WERR_HOOK_NEEDS_HMOD", WERR_HOOK_NEEDS_HMOD }, + { "WERR_GLOBAL_ONLY_HOOK", WERR_GLOBAL_ONLY_HOOK }, + { "WERR_JOURNAL_HOOK_SET", WERR_JOURNAL_HOOK_SET }, + { "WERR_HOOK_NOT_INSTALLED", WERR_HOOK_NOT_INSTALLED }, + { "WERR_INVALID_LB_MESSAGE", WERR_INVALID_LB_MESSAGE }, + { "WERR_SETCOUNT_ON_BAD_LB", WERR_SETCOUNT_ON_BAD_LB }, + { "WERR_LB_WITHOUT_TABSTOPS", WERR_LB_WITHOUT_TABSTOPS }, + { "WERR_DESTROY_OBJECT_OF_OTHER_THREAD", WERR_DESTROY_OBJECT_OF_OTHER_THREAD }, + { "WERR_CHILD_WINDOW_MENU", WERR_CHILD_WINDOW_MENU }, + { "WERR_NO_SYSTEM_MENU", WERR_NO_SYSTEM_MENU }, + { "WERR_INVALID_MSGBOX_STYLE", WERR_INVALID_MSGBOX_STYLE }, + { "WERR_INVALID_SPI_VALUE", WERR_INVALID_SPI_VALUE }, + { "WERR_SCREEN_ALREADY_LOCKED", WERR_SCREEN_ALREADY_LOCKED }, + { "WERR_HWNDS_HAVE_DIFF_PARENT", WERR_HWNDS_HAVE_DIFF_PARENT }, + { "WERR_NOT_CHILD_WINDOW", WERR_NOT_CHILD_WINDOW }, + { "WERR_INVALID_GW_COMMAND", WERR_INVALID_GW_COMMAND }, + { "WERR_INVALID_THREAD_ID", WERR_INVALID_THREAD_ID }, + { "WERR_NON_MDICHILD_WINDOW", WERR_NON_MDICHILD_WINDOW }, + { "WERR_POPUP_ALREADY_ACTIVE", WERR_POPUP_ALREADY_ACTIVE }, + { "WERR_NO_SCROLLBARS", WERR_NO_SCROLLBARS }, + { "WERR_INVALID_SCROLLBAR_RANGE", WERR_INVALID_SCROLLBAR_RANGE }, + { "WERR_INVALID_SHOWWIN_COMMAND", WERR_INVALID_SHOWWIN_COMMAND }, + { "WERR_NONPAGED_SYSTEM_RESOURCES", WERR_NONPAGED_SYSTEM_RESOURCES }, + { "WERR_PAGED_SYSTEM_RESOURCES", WERR_PAGED_SYSTEM_RESOURCES }, + { "WERR_WORKING_SET_QUOTA", WERR_WORKING_SET_QUOTA }, + { "WERR_PAGEFILE_QUOTA", WERR_PAGEFILE_QUOTA }, + { "WERR_COMMITMENT_LIMIT", WERR_COMMITMENT_LIMIT }, + { "WERR_MENU_ITEM_NOT_FOUND", WERR_MENU_ITEM_NOT_FOUND }, + { "WERR_INVALID_KEYBOARD_HANDLE", WERR_INVALID_KEYBOARD_HANDLE }, + { "WERR_HOOK_TYPE_NOT_ALLOWED", WERR_HOOK_TYPE_NOT_ALLOWED }, + { "WERR_REQUIRES_INTERACTIVE_WINDOWSTATION", WERR_REQUIRES_INTERACTIVE_WINDOWSTATION }, + { "WERR_TIMEOUT", WERR_TIMEOUT }, + { "WERR_INVALID_MONITOR_HANDLE", WERR_INVALID_MONITOR_HANDLE }, + { "WERR_INCORRECT_SIZE", WERR_INCORRECT_SIZE }, + { "WERR_SYMLINK_CLASS_DISABLED", WERR_SYMLINK_CLASS_DISABLED }, + { "WERR_SYMLINK_NOT_SUPPORTED", WERR_SYMLINK_NOT_SUPPORTED }, + { "WERR_EVENTLOG_CANT_START", WERR_EVENTLOG_CANT_START }, + { "WERR_LOG_FILE_FULL", WERR_LOG_FILE_FULL }, + { "WERR_EVENTLOG_FILE_CHANGED", WERR_EVENTLOG_FILE_CHANGED }, + { "WERR_INVALID_TASK_NAME", WERR_INVALID_TASK_NAME }, + { "WERR_INVALID_TASK_INDEX", WERR_INVALID_TASK_INDEX }, + { "WERR_THREAD_ALREADY_IN_TASK", WERR_THREAD_ALREADY_IN_TASK }, + { "WERR_INSTALL_SERVICE_FAILURE", WERR_INSTALL_SERVICE_FAILURE }, + { "WERR_INSTALL_USEREXIT", WERR_INSTALL_USEREXIT }, + { "WERR_INSTALL_FAILURE", WERR_INSTALL_FAILURE }, + { "WERR_INSTALL_SUSPEND", WERR_INSTALL_SUSPEND }, + { "WERR_UNKNOWN_PRODUCT", WERR_UNKNOWN_PRODUCT }, + { "WERR_UNKNOWN_FEATURE", WERR_UNKNOWN_FEATURE }, + { "WERR_UNKNOWN_COMPONENT", WERR_UNKNOWN_COMPONENT }, + { "WERR_UNKNOWN_PROPERTY", WERR_UNKNOWN_PROPERTY }, + { "WERR_INVALID_HANDLE_STATE", WERR_INVALID_HANDLE_STATE }, + { "WERR_BAD_CONFIGURATION", WERR_BAD_CONFIGURATION }, + { "WERR_INDEX_ABSENT", WERR_INDEX_ABSENT }, + { "WERR_INSTALL_SOURCE_ABSENT", WERR_INSTALL_SOURCE_ABSENT }, + { "WERR_INSTALL_PACKAGE_VERSION", WERR_INSTALL_PACKAGE_VERSION }, + { "WERR_PRODUCT_UNINSTALLED", WERR_PRODUCT_UNINSTALLED }, + { "WERR_BAD_QUERY_SYNTAX", WERR_BAD_QUERY_SYNTAX }, + { "WERR_INVALID_FIELD", WERR_INVALID_FIELD }, + { "WERR_DEVICE_REMOVED", WERR_DEVICE_REMOVED }, + { "WERR_INSTALL_ALREADY_RUNNING", WERR_INSTALL_ALREADY_RUNNING }, + { "WERR_INSTALL_PACKAGE_OPEN_FAILED", WERR_INSTALL_PACKAGE_OPEN_FAILED }, + { "WERR_INSTALL_PACKAGE_INVALID", WERR_INSTALL_PACKAGE_INVALID }, + { "WERR_INSTALL_UI_FAILURE", WERR_INSTALL_UI_FAILURE }, + { "WERR_INSTALL_LOG_FAILURE", WERR_INSTALL_LOG_FAILURE }, + { "WERR_INSTALL_LANGUAGE_UNSUPPORTED", WERR_INSTALL_LANGUAGE_UNSUPPORTED }, + { "WERR_INSTALL_TRANSFORM_FAILURE", WERR_INSTALL_TRANSFORM_FAILURE }, + { "WERR_INSTALL_PACKAGE_REJECTED", WERR_INSTALL_PACKAGE_REJECTED }, + { "WERR_FUNCTION_NOT_CALLED", WERR_FUNCTION_NOT_CALLED }, + { "WERR_FUNCTION_FAILED", WERR_FUNCTION_FAILED }, + { "WERR_INVALID_TABLE", WERR_INVALID_TABLE }, + { "WERR_DATATYPE_MISMATCH", WERR_DATATYPE_MISMATCH }, + { "WERR_UNSUPPORTED_TYPE", WERR_UNSUPPORTED_TYPE }, + { "WERR_CREATE_FAILED", WERR_CREATE_FAILED }, + { "WERR_INSTALL_TEMP_UNWRITABLE", WERR_INSTALL_TEMP_UNWRITABLE }, + { "WERR_INSTALL_PLATFORM_UNSUPPORTED", WERR_INSTALL_PLATFORM_UNSUPPORTED }, + { "WERR_INSTALL_NOTUSED", WERR_INSTALL_NOTUSED }, + { "WERR_PATCH_PACKAGE_OPEN_FAILED", WERR_PATCH_PACKAGE_OPEN_FAILED }, + { "WERR_PATCH_PACKAGE_INVALID", WERR_PATCH_PACKAGE_INVALID }, + { "WERR_PATCH_PACKAGE_UNSUPPORTED", WERR_PATCH_PACKAGE_UNSUPPORTED }, + { "WERR_PRODUCT_VERSION", WERR_PRODUCT_VERSION }, + { "WERR_INVALID_COMMAND_LINE", WERR_INVALID_COMMAND_LINE }, + { "WERR_INSTALL_REMOTE_DISALLOWED", WERR_INSTALL_REMOTE_DISALLOWED }, + { "WERR_SUCCESS_REBOOT_INITIATED", WERR_SUCCESS_REBOOT_INITIATED }, + { "WERR_PATCH_TARGET_NOT_FOUND", WERR_PATCH_TARGET_NOT_FOUND }, + { "WERR_PATCH_PACKAGE_REJECTED", WERR_PATCH_PACKAGE_REJECTED }, + { "WERR_INSTALL_TRANSFORM_REJECTED", WERR_INSTALL_TRANSFORM_REJECTED }, + { "WERR_INSTALL_REMOTE_PROHIBITED", WERR_INSTALL_REMOTE_PROHIBITED }, + { "WERR_PATCH_REMOVAL_UNSUPPORTED", WERR_PATCH_REMOVAL_UNSUPPORTED }, + { "WERR_UNKNOWN_PATCH", WERR_UNKNOWN_PATCH }, + { "WERR_PATCH_NO_SEQUENCE", WERR_PATCH_NO_SEQUENCE }, + { "WERR_PATCH_REMOVAL_DISALLOWED", WERR_PATCH_REMOVAL_DISALLOWED }, + { "WERR_INVALID_PATCH_XML", WERR_INVALID_PATCH_XML }, + { "WERR_PATCH_MANAGED_ADVERTISED_PRODUCT", WERR_PATCH_MANAGED_ADVERTISED_PRODUCT }, + { "WERR_INSTALL_SERVICE_SAFEBOOT", WERR_INSTALL_SERVICE_SAFEBOOT }, + { "WERR_RPC_S_INVALID_STRING_BINDING", WERR_RPC_S_INVALID_STRING_BINDING }, + { "WERR_RPC_S_WRONG_KIND_OF_BINDING", WERR_RPC_S_WRONG_KIND_OF_BINDING }, + { "WERR_RPC_S_INVALID_BINDING", WERR_RPC_S_INVALID_BINDING }, + { "WERR_RPC_S_PROTSEQ_NOT_SUPPORTED", WERR_RPC_S_PROTSEQ_NOT_SUPPORTED }, + { "WERR_RPC_S_INVALID_RPC_PROTSEQ", WERR_RPC_S_INVALID_RPC_PROTSEQ }, + { "WERR_RPC_S_INVALID_STRING_UUID", WERR_RPC_S_INVALID_STRING_UUID }, + { "WERR_RPC_S_INVALID_ENDPOINT_FORMAT", WERR_RPC_S_INVALID_ENDPOINT_FORMAT }, + { "WERR_RPC_S_INVALID_NET_ADDR", WERR_RPC_S_INVALID_NET_ADDR }, + { "WERR_RPC_S_NO_ENDPOINT_FOUND", WERR_RPC_S_NO_ENDPOINT_FOUND }, + { "WERR_RPC_S_INVALID_TIMEOUT", WERR_RPC_S_INVALID_TIMEOUT }, + { "WERR_RPC_S_OBJECT_NOT_FOUND", WERR_RPC_S_OBJECT_NOT_FOUND }, + { "WERR_RPC_S_ALREADY_REGISTERED", WERR_RPC_S_ALREADY_REGISTERED }, + { "WERR_RPC_S_TYPE_ALREADY_REGISTERED", WERR_RPC_S_TYPE_ALREADY_REGISTERED }, + { "WERR_RPC_S_ALREADY_LISTENING", WERR_RPC_S_ALREADY_LISTENING }, + { "WERR_RPC_S_NO_PROTSEQS_REGISTERED", WERR_RPC_S_NO_PROTSEQS_REGISTERED }, + { "WERR_RPC_S_NOT_LISTENING", WERR_RPC_S_NOT_LISTENING }, + { "WERR_RPC_S_UNKNOWN_MGR_TYPE", WERR_RPC_S_UNKNOWN_MGR_TYPE }, + { "WERR_RPC_S_UNKNOWN_IF", WERR_RPC_S_UNKNOWN_IF }, + { "WERR_RPC_S_NO_BINDINGS", WERR_RPC_S_NO_BINDINGS }, + { "WERR_RPC_S_NO_PROTSEQS", WERR_RPC_S_NO_PROTSEQS }, + { "WERR_RPC_S_CANT_CREATE_ENDPOINT", WERR_RPC_S_CANT_CREATE_ENDPOINT }, + { "WERR_RPC_S_OUT_OF_RESOURCES", WERR_RPC_S_OUT_OF_RESOURCES }, + { "WERR_RPC_S_SERVER_UNAVAILABLE", WERR_RPC_S_SERVER_UNAVAILABLE }, + { "WERR_RPC_S_SERVER_TOO_BUSY", WERR_RPC_S_SERVER_TOO_BUSY }, + { "WERR_RPC_S_INVALID_NETWORK_OPTIONS", WERR_RPC_S_INVALID_NETWORK_OPTIONS }, + { "WERR_RPC_S_NO_CALL_ACTIVE", WERR_RPC_S_NO_CALL_ACTIVE }, + { "WERR_RPC_S_CALL_FAILED", WERR_RPC_S_CALL_FAILED }, + { "WERR_RPC_S_CALL_FAILED_DNE", WERR_RPC_S_CALL_FAILED_DNE }, + { "WERR_RPC_S_PROTOCOL_ERROR", WERR_RPC_S_PROTOCOL_ERROR }, + { "WERR_RPC_S_PROXY_ACCESS_DENIED", WERR_RPC_S_PROXY_ACCESS_DENIED }, + { "WERR_RPC_S_UNSUPPORTED_TRANS_SYN", WERR_RPC_S_UNSUPPORTED_TRANS_SYN }, + { "WERR_RPC_S_UNSUPPORTED_TYPE", WERR_RPC_S_UNSUPPORTED_TYPE }, + { "WERR_RPC_S_INVALID_TAG", WERR_RPC_S_INVALID_TAG }, + { "WERR_RPC_S_INVALID_BOUND", WERR_RPC_S_INVALID_BOUND }, + { "WERR_RPC_S_NO_ENTRY_NAME", WERR_RPC_S_NO_ENTRY_NAME }, + { "WERR_RPC_S_INVALID_NAME_SYNTAX", WERR_RPC_S_INVALID_NAME_SYNTAX }, + { "WERR_RPC_S_UNSUPPORTED_NAME_SYNTAX", WERR_RPC_S_UNSUPPORTED_NAME_SYNTAX }, + { "WERR_RPC_S_UUID_NO_ADDRESS", WERR_RPC_S_UUID_NO_ADDRESS }, + { "WERR_RPC_S_DUPLICATE_ENDPOINT", WERR_RPC_S_DUPLICATE_ENDPOINT }, + { "WERR_RPC_S_UNKNOWN_AUTHN_TYPE", WERR_RPC_S_UNKNOWN_AUTHN_TYPE }, + { "WERR_RPC_S_MAX_CALLS_TOO_SMALL", WERR_RPC_S_MAX_CALLS_TOO_SMALL }, + { "WERR_RPC_S_STRING_TOO_LONG", WERR_RPC_S_STRING_TOO_LONG }, + { "WERR_RPC_S_PROTSEQ_NOT_FOUND", WERR_RPC_S_PROTSEQ_NOT_FOUND }, + { "WERR_RPC_S_PROCNUM_OUT_OF_RANGE", WERR_RPC_S_PROCNUM_OUT_OF_RANGE }, + { "WERR_RPC_S_BINDING_HAS_NO_AUTH", WERR_RPC_S_BINDING_HAS_NO_AUTH }, + { "WERR_RPC_S_UNKNOWN_AUTHN_SERVICE", WERR_RPC_S_UNKNOWN_AUTHN_SERVICE }, + { "WERR_RPC_S_UNKNOWN_AUTHN_LEVEL", WERR_RPC_S_UNKNOWN_AUTHN_LEVEL }, + { "WERR_RPC_S_INVALID_AUTH_IDENTITY", WERR_RPC_S_INVALID_AUTH_IDENTITY }, + { "WERR_RPC_S_UNKNOWN_AUTHZ_SERVICE", WERR_RPC_S_UNKNOWN_AUTHZ_SERVICE }, + { "WERR_EPT_S_INVALID_ENTRY", WERR_EPT_S_INVALID_ENTRY }, + { "WERR_EPT_S_CANT_PERFORM_OP", WERR_EPT_S_CANT_PERFORM_OP }, + { "WERR_EPT_S_NOT_REGISTERED", WERR_EPT_S_NOT_REGISTERED }, + { "WERR_RPC_S_NOTHING_TO_EXPORT", WERR_RPC_S_NOTHING_TO_EXPORT }, + { "WERR_RPC_S_INCOMPLETE_NAME", WERR_RPC_S_INCOMPLETE_NAME }, + { "WERR_RPC_S_INVALID_VERS_OPTION", WERR_RPC_S_INVALID_VERS_OPTION }, + { "WERR_RPC_S_NO_MORE_MEMBERS", WERR_RPC_S_NO_MORE_MEMBERS }, + { "WERR_RPC_S_NOT_ALL_OBJS_UNEXPORTED", WERR_RPC_S_NOT_ALL_OBJS_UNEXPORTED }, + { "WERR_RPC_S_INTERFACE_NOT_FOUND", WERR_RPC_S_INTERFACE_NOT_FOUND }, + { "WERR_RPC_S_ENTRY_ALREADY_EXISTS", WERR_RPC_S_ENTRY_ALREADY_EXISTS }, + { "WERR_RPC_S_ENTRY_NOT_FOUND", WERR_RPC_S_ENTRY_NOT_FOUND }, + { "WERR_RPC_S_NAME_SERVICE_UNAVAILABLE", WERR_RPC_S_NAME_SERVICE_UNAVAILABLE }, + { "WERR_RPC_S_INVALID_NAF_ID", WERR_RPC_S_INVALID_NAF_ID }, + { "WERR_RPC_S_CANNOT_SUPPORT", WERR_RPC_S_CANNOT_SUPPORT }, + { "WERR_RPC_S_NO_CONTEXT_AVAILABLE", WERR_RPC_S_NO_CONTEXT_AVAILABLE }, + { "WERR_RPC_S_INTERNAL_ERROR", WERR_RPC_S_INTERNAL_ERROR }, + { "WERR_RPC_S_ZERO_DIVIDE", WERR_RPC_S_ZERO_DIVIDE }, + { "WERR_RPC_S_ADDRESS_ERROR", WERR_RPC_S_ADDRESS_ERROR }, + { "WERR_RPC_S_FP_DIV_ZERO", WERR_RPC_S_FP_DIV_ZERO }, + { "WERR_RPC_S_FP_UNDERFLOW", WERR_RPC_S_FP_UNDERFLOW }, + { "WERR_RPC_S_FP_OVERFLOW", WERR_RPC_S_FP_OVERFLOW }, + { "WERR_RPC_X_NO_MORE_ENTRIES", WERR_RPC_X_NO_MORE_ENTRIES }, + { "WERR_RPC_X_SS_CHAR_TRANS_OPEN_FAIL", WERR_RPC_X_SS_CHAR_TRANS_OPEN_FAIL }, + { "WERR_RPC_X_SS_CHAR_TRANS_SHORT_FILE", WERR_RPC_X_SS_CHAR_TRANS_SHORT_FILE }, + { "WERR_RPC_X_SS_IN_NULL_CONTEXT", WERR_RPC_X_SS_IN_NULL_CONTEXT }, + { "WERR_RPC_X_SS_CONTEXT_DAMAGED", WERR_RPC_X_SS_CONTEXT_DAMAGED }, + { "WERR_RPC_X_SS_HANDLES_MISMATCH", WERR_RPC_X_SS_HANDLES_MISMATCH }, + { "WERR_RPC_X_SS_CANNOT_GET_CALL_HANDLE", WERR_RPC_X_SS_CANNOT_GET_CALL_HANDLE }, + { "WERR_RPC_X_NULL_REF_POINTER", WERR_RPC_X_NULL_REF_POINTER }, + { "WERR_RPC_X_ENUM_VALUE_OUT_OF_RANGE", WERR_RPC_X_ENUM_VALUE_OUT_OF_RANGE }, + { "WERR_RPC_X_BYTE_COUNT_TOO_SMALL", WERR_RPC_X_BYTE_COUNT_TOO_SMALL }, + { "WERR_RPC_X_BAD_STUB_DATA", WERR_RPC_X_BAD_STUB_DATA }, + { "WERR_UNRECOGNIZED_MEDIA", WERR_UNRECOGNIZED_MEDIA }, + { "WERR_NO_TRUST_LSA_SECRET", WERR_NO_TRUST_LSA_SECRET }, + { "WERR_TRUSTED_DOMAIN_FAILURE", WERR_TRUSTED_DOMAIN_FAILURE }, + { "WERR_TRUSTED_RELATIONSHIP_FAILURE", WERR_TRUSTED_RELATIONSHIP_FAILURE }, + { "WERR_TRUST_FAILURE", WERR_TRUST_FAILURE }, + { "WERR_RPC_S_CALL_IN_PROGRESS", WERR_RPC_S_CALL_IN_PROGRESS }, + { "WERR_NETLOGON_NOT_STARTED", WERR_NETLOGON_NOT_STARTED }, + { "WERR_ACCOUNT_EXPIRED", WERR_ACCOUNT_EXPIRED }, + { "WERR_REDIRECTOR_HAS_OPEN_HANDLES", WERR_REDIRECTOR_HAS_OPEN_HANDLES }, + { "WERR_RPC_S_NO_MORE_BINDINGS", WERR_RPC_S_NO_MORE_BINDINGS }, + { "WERR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT", WERR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT }, + { "WERR_NOLOGON_WORKSTATION_TRUST_ACCOUNT", WERR_NOLOGON_WORKSTATION_TRUST_ACCOUNT }, + { "WERR_NOLOGON_SERVER_TRUST_ACCOUNT", WERR_NOLOGON_SERVER_TRUST_ACCOUNT }, + { "WERR_DOMAIN_TRUST_INCONSISTENT", WERR_DOMAIN_TRUST_INCONSISTENT }, + { "WERR_SERVER_HAS_OPEN_HANDLES", WERR_SERVER_HAS_OPEN_HANDLES }, + { "WERR_RESOURCE_DATA_NOT_FOUND", WERR_RESOURCE_DATA_NOT_FOUND }, + { "WERR_RESOURCE_TYPE_NOT_FOUND", WERR_RESOURCE_TYPE_NOT_FOUND }, + { "WERR_RESOURCE_NAME_NOT_FOUND", WERR_RESOURCE_NAME_NOT_FOUND }, + { "WERR_RESOURCE_LANG_NOT_FOUND", WERR_RESOURCE_LANG_NOT_FOUND }, + { "WERR_NOT_ENOUGH_QUOTA", WERR_NOT_ENOUGH_QUOTA }, + { "WERR_RPC_S_NO_INTERFACES", WERR_RPC_S_NO_INTERFACES }, + { "WERR_RPC_S_CALL_CANCELLED", WERR_RPC_S_CALL_CANCELLED }, + { "WERR_RPC_S_BINDING_INCOMPLETE", WERR_RPC_S_BINDING_INCOMPLETE }, + { "WERR_RPC_S_COMM_FAILURE", WERR_RPC_S_COMM_FAILURE }, + { "WERR_RPC_S_UNSUPPORTED_AUTHN_LEVEL", WERR_RPC_S_UNSUPPORTED_AUTHN_LEVEL }, + { "WERR_RPC_S_NO_PRINC_NAME", WERR_RPC_S_NO_PRINC_NAME }, + { "WERR_RPC_S_NOT_RPC_ERROR", WERR_RPC_S_NOT_RPC_ERROR }, + { "WERR_RPC_S_UUID_LOCAL_ONLY", WERR_RPC_S_UUID_LOCAL_ONLY }, + { "WERR_RPC_S_SEC_PKG_ERROR", WERR_RPC_S_SEC_PKG_ERROR }, + { "WERR_RPC_S_NOT_CANCELLED", WERR_RPC_S_NOT_CANCELLED }, + { "WERR_RPC_X_INVALID_ES_ACTION", WERR_RPC_X_INVALID_ES_ACTION }, + { "WERR_RPC_X_WRONG_ES_VERSION", WERR_RPC_X_WRONG_ES_VERSION }, + { "WERR_RPC_X_WRONG_STUB_VERSION", WERR_RPC_X_WRONG_STUB_VERSION }, + { "WERR_RPC_X_INVALID_PIPE_OBJECT", WERR_RPC_X_INVALID_PIPE_OBJECT }, + { "WERR_RPC_X_WRONG_PIPE_ORDER", WERR_RPC_X_WRONG_PIPE_ORDER }, + { "WERR_RPC_X_WRONG_PIPE_VERSION", WERR_RPC_X_WRONG_PIPE_VERSION }, + { "WERR_RPC_S_GROUP_MEMBER_NOT_FOUND", WERR_RPC_S_GROUP_MEMBER_NOT_FOUND }, + { "WERR_EPT_S_CANT_CREATE", WERR_EPT_S_CANT_CREATE }, + { "WERR_RPC_S_INVALID_OBJECT", WERR_RPC_S_INVALID_OBJECT }, + { "WERR_INVALID_TIME", WERR_INVALID_TIME }, + { "WERR_ALREADY_WAITING", WERR_ALREADY_WAITING }, + { "WERR_PRINTER_DELETED", WERR_PRINTER_DELETED }, + { "WERR_INVALID_PRINTER_STATE", WERR_INVALID_PRINTER_STATE }, + { "WERR_OR_INVALID_OXID", WERR_OR_INVALID_OXID }, + { "WERR_OR_INVALID_OID", WERR_OR_INVALID_OID }, + { "WERR_OR_INVALID_SET", WERR_OR_INVALID_SET }, + { "WERR_RPC_S_SEND_INCOMPLETE", WERR_RPC_S_SEND_INCOMPLETE }, + { "WERR_RPC_S_INVALID_ASYNC_HANDLE", WERR_RPC_S_INVALID_ASYNC_HANDLE }, + { "WERR_RPC_S_INVALID_ASYNC_CALL", WERR_RPC_S_INVALID_ASYNC_CALL }, + { "WERR_RPC_X_PIPE_CLOSED", WERR_RPC_X_PIPE_CLOSED }, + { "WERR_RPC_X_PIPE_DISCIPLINE_ERROR", WERR_RPC_X_PIPE_DISCIPLINE_ERROR }, + { "WERR_RPC_X_PIPE_EMPTY", WERR_RPC_X_PIPE_EMPTY }, + { "WERR_NO_SITENAME", WERR_NO_SITENAME }, + { "WERR_CANT_ACCESS_FILE", WERR_CANT_ACCESS_FILE }, + { "WERR_CANT_RESOLVE_FILENAME", WERR_CANT_RESOLVE_FILENAME }, + { "WERR_RPC_S_ENTRY_TYPE_MISMATCH", WERR_RPC_S_ENTRY_TYPE_MISMATCH }, + { "WERR_RPC_S_NOT_ALL_OBJS_EXPORTED", WERR_RPC_S_NOT_ALL_OBJS_EXPORTED }, + { "WERR_RPC_S_INTERFACE_NOT_EXPORTED", WERR_RPC_S_INTERFACE_NOT_EXPORTED }, + { "WERR_RPC_S_PROFILE_NOT_ADDED", WERR_RPC_S_PROFILE_NOT_ADDED }, + { "WERR_RPC_S_PRF_ELT_NOT_ADDED", WERR_RPC_S_PRF_ELT_NOT_ADDED }, + { "WERR_RPC_S_PRF_ELT_NOT_REMOVED", WERR_RPC_S_PRF_ELT_NOT_REMOVED }, + { "WERR_RPC_S_GRP_ELT_NOT_ADDED", WERR_RPC_S_GRP_ELT_NOT_ADDED }, + { "WERR_RPC_S_GRP_ELT_NOT_REMOVED", WERR_RPC_S_GRP_ELT_NOT_REMOVED }, + { "WERR_KM_DRIVER_BLOCKED", WERR_KM_DRIVER_BLOCKED }, + { "WERR_CONTEXT_EXPIRED", WERR_CONTEXT_EXPIRED }, + { "WERR_PER_USER_TRUST_QUOTA_EXCEEDED", WERR_PER_USER_TRUST_QUOTA_EXCEEDED }, + { "WERR_ALL_USER_TRUST_QUOTA_EXCEEDED", WERR_ALL_USER_TRUST_QUOTA_EXCEEDED }, + { "WERR_USER_DELETE_TRUST_QUOTA_EXCEEDED", WERR_USER_DELETE_TRUST_QUOTA_EXCEEDED }, + { "WERR_AUTHENTICATION_FIREWALL_FAILED", WERR_AUTHENTICATION_FIREWALL_FAILED }, + { "WERR_REMOTE_PRINT_CONNECTIONS_BLOCKED", WERR_REMOTE_PRINT_CONNECTIONS_BLOCKED }, + { "WERR_INVALID_PIXEL_FORMAT", WERR_INVALID_PIXEL_FORMAT }, + { "WERR_BAD_DRIVER", WERR_BAD_DRIVER }, + { "WERR_INVALID_WINDOW_STYLE", WERR_INVALID_WINDOW_STYLE }, + { "WERR_METAFILE_NOT_SUPPORTED", WERR_METAFILE_NOT_SUPPORTED }, + { "WERR_TRANSFORM_NOT_SUPPORTED", WERR_TRANSFORM_NOT_SUPPORTED }, + { "WERR_CLIPPING_NOT_SUPPORTED", WERR_CLIPPING_NOT_SUPPORTED }, + { "WERR_INVALID_CMM", WERR_INVALID_CMM }, + { "WERR_INVALID_PROFILE", WERR_INVALID_PROFILE }, + { "WERR_TAG_NOT_FOUND", WERR_TAG_NOT_FOUND }, + { "WERR_TAG_NOT_PRESENT", WERR_TAG_NOT_PRESENT }, + { "WERR_DUPLICATE_TAG", WERR_DUPLICATE_TAG }, + { "WERR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE", WERR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE }, + { "WERR_PROFILE_NOT_FOUND", WERR_PROFILE_NOT_FOUND }, + { "WERR_INVALID_COLORSPACE", WERR_INVALID_COLORSPACE }, + { "WERR_ICM_NOT_ENABLED", WERR_ICM_NOT_ENABLED }, + { "WERR_DELETING_ICM_XFORM", WERR_DELETING_ICM_XFORM }, + { "WERR_INVALID_TRANSFORM", WERR_INVALID_TRANSFORM }, + { "WERR_COLORSPACE_MISMATCH", WERR_COLORSPACE_MISMATCH }, + { "WERR_INVALID_COLORINDEX", WERR_INVALID_COLORINDEX }, + { "WERR_PROFILE_DOES_NOT_MATCH_DEVICE", WERR_PROFILE_DOES_NOT_MATCH_DEVICE }, + { "WERR_NERR_NETNOTSTARTED", WERR_NERR_NETNOTSTARTED }, + { "WERR_NERR_UNKNOWNSERVER", WERR_NERR_UNKNOWNSERVER }, + { "WERR_NERR_SHAREMEM", WERR_NERR_SHAREMEM }, + { "WERR_NERR_NONETWORKRESOURCE", WERR_NERR_NONETWORKRESOURCE }, + { "WERR_NERR_REMOTEONLY", WERR_NERR_REMOTEONLY }, + { "WERR_NERR_DEVNOTREDIRECTED", WERR_NERR_DEVNOTREDIRECTED }, + { "WERR_CONNECTED_OTHER_PASSWORD", WERR_CONNECTED_OTHER_PASSWORD }, + { "WERR_CONNECTED_OTHER_PASSWORD_DEFAULT", WERR_CONNECTED_OTHER_PASSWORD_DEFAULT }, + { "WERR_NERR_SERVERNOTSTARTED", WERR_NERR_SERVERNOTSTARTED }, + { "WERR_NERR_ITEMNOTFOUND", WERR_NERR_ITEMNOTFOUND }, + { "WERR_NERR_UNKNOWNDEVDIR", WERR_NERR_UNKNOWNDEVDIR }, + { "WERR_NERR_REDIRECTEDPATH", WERR_NERR_REDIRECTEDPATH }, + { "WERR_NERR_DUPLICATESHARE", WERR_NERR_DUPLICATESHARE }, + { "WERR_NERR_NOROOM", WERR_NERR_NOROOM }, + { "WERR_NERR_TOOMANYITEMS", WERR_NERR_TOOMANYITEMS }, + { "WERR_NERR_INVALIDMAXUSERS", WERR_NERR_INVALIDMAXUSERS }, + { "WERR_NERR_BUFTOOSMALL", WERR_NERR_BUFTOOSMALL }, + { "WERR_NERR_REMOTEERR", WERR_NERR_REMOTEERR }, + { "WERR_NERR_LANMANINIERROR", WERR_NERR_LANMANINIERROR }, + { "WERR_NERR_NETWORKERROR", WERR_NERR_NETWORKERROR }, + { "WERR_NERR_WKSTAINCONSISTENTSTATE", WERR_NERR_WKSTAINCONSISTENTSTATE }, + { "WERR_NERR_WKSTANOTSTARTED", WERR_NERR_WKSTANOTSTARTED }, + { "WERR_NERR_BROWSERNOTSTARTED", WERR_NERR_BROWSERNOTSTARTED }, + { "WERR_NERR_INTERNALERROR", WERR_NERR_INTERNALERROR }, + { "WERR_NERR_BADTRANSACTCONFIG", WERR_NERR_BADTRANSACTCONFIG }, + { "WERR_NERR_INVALIDAPI", WERR_NERR_INVALIDAPI }, + { "WERR_NERR_BADEVENTNAME", WERR_NERR_BADEVENTNAME }, + { "WERR_NERR_DUPNAMEREBOOT", WERR_NERR_DUPNAMEREBOOT }, + { "WERR_NERR_CFGCOMPNOTFOUND", WERR_NERR_CFGCOMPNOTFOUND }, + { "WERR_NERR_CFGPARAMNOTFOUND", WERR_NERR_CFGPARAMNOTFOUND }, + { "WERR_NERR_LINETOOLONG", WERR_NERR_LINETOOLONG }, + { "WERR_NERR_QNOTFOUND", WERR_NERR_QNOTFOUND }, + { "WERR_NERR_JOBNOTFOUND", WERR_NERR_JOBNOTFOUND }, + { "WERR_NERR_DESTNOTFOUND", WERR_NERR_DESTNOTFOUND }, + { "WERR_NERR_DESTEXISTS", WERR_NERR_DESTEXISTS }, + { "WERR_NERR_QEXISTS", WERR_NERR_QEXISTS }, + { "WERR_NERR_QNOROOM", WERR_NERR_QNOROOM }, + { "WERR_NERR_JOBNOROOM", WERR_NERR_JOBNOROOM }, + { "WERR_NERR_DESTNOROOM", WERR_NERR_DESTNOROOM }, + { "WERR_NERR_DESTIDLE", WERR_NERR_DESTIDLE }, + { "WERR_NERR_DESTINVALIDOP", WERR_NERR_DESTINVALIDOP }, + { "WERR_NERR_PROCNORESPOND", WERR_NERR_PROCNORESPOND }, + { "WERR_NERR_SPOOLERNOTLOADED", WERR_NERR_SPOOLERNOTLOADED }, + { "WERR_NERR_DESTINVALIDSTATE", WERR_NERR_DESTINVALIDSTATE }, + { "WERR_NERR_QINVALIDSTATE", WERR_NERR_QINVALIDSTATE }, + { "WERR_NERR_JOBINVALIDSTATE", WERR_NERR_JOBINVALIDSTATE }, + { "WERR_NERR_SPOOLNOMEMORY", WERR_NERR_SPOOLNOMEMORY }, + { "WERR_NERR_DRIVERNOTFOUND", WERR_NERR_DRIVERNOTFOUND }, + { "WERR_NERR_DATATYPEINVALID", WERR_NERR_DATATYPEINVALID }, + { "WERR_NERR_PROCNOTFOUND", WERR_NERR_PROCNOTFOUND }, + { "WERR_NERR_SERVICETABLELOCKED", WERR_NERR_SERVICETABLELOCKED }, + { "WERR_NERR_SERVICETABLEFULL", WERR_NERR_SERVICETABLEFULL }, + { "WERR_NERR_SERVICEINSTALLED", WERR_NERR_SERVICEINSTALLED }, + { "WERR_NERR_SERVICEENTRYLOCKED", WERR_NERR_SERVICEENTRYLOCKED }, + { "WERR_NERR_SERVICENOTINSTALLED", WERR_NERR_SERVICENOTINSTALLED }, + { "WERR_NERR_BADSERVICENAME", WERR_NERR_BADSERVICENAME }, + { "WERR_NERR_SERVICECTLTIMEOUT", WERR_NERR_SERVICECTLTIMEOUT }, + { "WERR_NERR_SERVICECTLBUSY", WERR_NERR_SERVICECTLBUSY }, + { "WERR_NERR_BADSERVICEPROGNAME", WERR_NERR_BADSERVICEPROGNAME }, + { "WERR_NERR_SERVICENOTCTRL", WERR_NERR_SERVICENOTCTRL }, + { "WERR_NERR_SERVICEKILLPROC", WERR_NERR_SERVICEKILLPROC }, + { "WERR_NERR_SERVICECTLNOTVALID", WERR_NERR_SERVICECTLNOTVALID }, + { "WERR_NERR_NOTINDISPATCHTBL", WERR_NERR_NOTINDISPATCHTBL }, + { "WERR_NERR_BADCONTROLRECV", WERR_NERR_BADCONTROLRECV }, + { "WERR_NERR_SERVICENOTSTARTING", WERR_NERR_SERVICENOTSTARTING }, + { "WERR_NERR_ALREADYLOGGEDON", WERR_NERR_ALREADYLOGGEDON }, + { "WERR_NERR_NOTLOGGEDON", WERR_NERR_NOTLOGGEDON }, + { "WERR_NERR_BADUSERNAME", WERR_NERR_BADUSERNAME }, + { "WERR_NERR_BADPASSWORD", WERR_NERR_BADPASSWORD }, + { "WERR_NERR_UNABLETOADDNAME_W", WERR_NERR_UNABLETOADDNAME_W }, + { "WERR_NERR_UNABLETOADDNAME_F", WERR_NERR_UNABLETOADDNAME_F }, + { "WERR_NERR_UNABLETODELNAME_W", WERR_NERR_UNABLETODELNAME_W }, + { "WERR_NERR_UNABLETODELNAME_F", WERR_NERR_UNABLETODELNAME_F }, + { "WERR_NERR_LOGONSPAUSED", WERR_NERR_LOGONSPAUSED }, + { "WERR_NERR_LOGONSERVERCONFLICT", WERR_NERR_LOGONSERVERCONFLICT }, + { "WERR_NERR_LOGONNOUSERPATH", WERR_NERR_LOGONNOUSERPATH }, + { "WERR_NERR_LOGONSCRIPTERROR", WERR_NERR_LOGONSCRIPTERROR }, + { "WERR_NERR_STANDALONELOGON", WERR_NERR_STANDALONELOGON }, + { "WERR_NERR_LOGONSERVERNOTFOUND", WERR_NERR_LOGONSERVERNOTFOUND }, + { "WERR_NERR_LOGONDOMAINEXISTS", WERR_NERR_LOGONDOMAINEXISTS }, + { "WERR_NERR_NONVALIDATEDLOGON", WERR_NERR_NONVALIDATEDLOGON }, + { "WERR_NERR_ACFNOTFOUND", WERR_NERR_ACFNOTFOUND }, + { "WERR_NERR_GROUPNOTFOUND", WERR_NERR_GROUPNOTFOUND }, + { "WERR_NERR_USERNOTFOUND", WERR_NERR_USERNOTFOUND }, + { "WERR_NERR_RESOURCENOTFOUND", WERR_NERR_RESOURCENOTFOUND }, + { "WERR_NERR_GROUPEXISTS", WERR_NERR_GROUPEXISTS }, + { "WERR_NERR_USEREXISTS", WERR_NERR_USEREXISTS }, + { "WERR_NERR_RESOURCEEXISTS", WERR_NERR_RESOURCEEXISTS }, + { "WERR_NERR_NOTPRIMARY", WERR_NERR_NOTPRIMARY }, + { "WERR_NERR_ACFNOTLOADED", WERR_NERR_ACFNOTLOADED }, + { "WERR_NERR_ACFNOROOM", WERR_NERR_ACFNOROOM }, + { "WERR_NERR_ACFFILEIOFAIL", WERR_NERR_ACFFILEIOFAIL }, + { "WERR_NERR_ACFTOOMANYLISTS", WERR_NERR_ACFTOOMANYLISTS }, + { "WERR_NERR_USERLOGON", WERR_NERR_USERLOGON }, + { "WERR_NERR_ACFNOPARENT", WERR_NERR_ACFNOPARENT }, + { "WERR_NERR_CANNOTGROWSEGMENT", WERR_NERR_CANNOTGROWSEGMENT }, + { "WERR_NERR_SPEGROUPOP", WERR_NERR_SPEGROUPOP }, + { "WERR_NERR_NOTINCACHE", WERR_NERR_NOTINCACHE }, + { "WERR_NERR_USERINGROUP", WERR_NERR_USERINGROUP }, + { "WERR_NERR_USERNOTINGROUP", WERR_NERR_USERNOTINGROUP }, + { "WERR_NERR_ACCOUNTUNDEFINED", WERR_NERR_ACCOUNTUNDEFINED }, + { "WERR_NERR_ACCOUNTEXPIRED", WERR_NERR_ACCOUNTEXPIRED }, + { "WERR_NERR_INVALIDWORKSTATION", WERR_NERR_INVALIDWORKSTATION }, + { "WERR_NERR_INVALIDLOGONHOURS", WERR_NERR_INVALIDLOGONHOURS }, + { "WERR_NERR_PASSWORDEXPIRED", WERR_NERR_PASSWORDEXPIRED }, + { "WERR_NERR_PASSWORDCANTCHANGE", WERR_NERR_PASSWORDCANTCHANGE }, + { "WERR_NERR_PASSWORDHISTCONFLICT", WERR_NERR_PASSWORDHISTCONFLICT }, + { "WERR_NERR_PASSWORDTOOSHORT", WERR_NERR_PASSWORDTOOSHORT }, + { "WERR_NERR_PASSWORDTOORECENT", WERR_NERR_PASSWORDTOORECENT }, + { "WERR_NERR_INVALIDDATABASE", WERR_NERR_INVALIDDATABASE }, + { "WERR_NERR_DATABASEUPTODATE", WERR_NERR_DATABASEUPTODATE }, + { "WERR_NERR_SYNCREQUIRED", WERR_NERR_SYNCREQUIRED }, + { "WERR_NERR_USENOTFOUND", WERR_NERR_USENOTFOUND }, + { "WERR_NERR_BADASGTYPE", WERR_NERR_BADASGTYPE }, + { "WERR_NERR_DEVICEISSHARED", WERR_NERR_DEVICEISSHARED }, + { "WERR_NERR_NOCOMPUTERNAME", WERR_NERR_NOCOMPUTERNAME }, + { "WERR_NERR_MSGALREADYSTARTED", WERR_NERR_MSGALREADYSTARTED }, + { "WERR_NERR_MSGINITFAILED", WERR_NERR_MSGINITFAILED }, + { "WERR_NERR_NAMENOTFOUND", WERR_NERR_NAMENOTFOUND }, + { "WERR_NERR_ALREADYFORWARDED", WERR_NERR_ALREADYFORWARDED }, + { "WERR_NERR_ADDFORWARDED", WERR_NERR_ADDFORWARDED }, + { "WERR_NERR_ALREADYEXISTS", WERR_NERR_ALREADYEXISTS }, + { "WERR_NERR_TOOMANYNAMES", WERR_NERR_TOOMANYNAMES }, + { "WERR_NERR_DELCOMPUTERNAME", WERR_NERR_DELCOMPUTERNAME }, + { "WERR_NERR_LOCALFORWARD", WERR_NERR_LOCALFORWARD }, + { "WERR_NERR_GRPMSGPROCESSOR", WERR_NERR_GRPMSGPROCESSOR }, + { "WERR_NERR_PAUSEDREMOTE", WERR_NERR_PAUSEDREMOTE }, + { "WERR_NERR_BADRECEIVE", WERR_NERR_BADRECEIVE }, + { "WERR_NERR_NAMEINUSE", WERR_NERR_NAMEINUSE }, + { "WERR_NERR_MSGNOTSTARTED", WERR_NERR_MSGNOTSTARTED }, + { "WERR_NERR_NOTLOCALNAME", WERR_NERR_NOTLOCALNAME }, + { "WERR_NERR_NOFORWARDNAME", WERR_NERR_NOFORWARDNAME }, + { "WERR_NERR_REMOTEFULL", WERR_NERR_REMOTEFULL }, + { "WERR_NERR_NAMENOTFORWARDED", WERR_NERR_NAMENOTFORWARDED }, + { "WERR_NERR_TRUNCATEDBROADCAST", WERR_NERR_TRUNCATEDBROADCAST }, + { "WERR_NERR_INVALIDDEVICE", WERR_NERR_INVALIDDEVICE }, + { "WERR_NERR_WRITEFAULT", WERR_NERR_WRITEFAULT }, + { "WERR_NERR_DUPLICATENAME", WERR_NERR_DUPLICATENAME }, + { "WERR_NERR_DELETELATER", WERR_NERR_DELETELATER }, + { "WERR_NERR_INCOMPLETEDEL", WERR_NERR_INCOMPLETEDEL }, + { "WERR_NERR_MULTIPLENETS", WERR_NERR_MULTIPLENETS }, + { "WERR_NERR_NETNAMENOTFOUND", WERR_NERR_NETNAMENOTFOUND }, + { "WERR_NERR_DEVICENOTSHARED", WERR_NERR_DEVICENOTSHARED }, + { "WERR_NERR_CLIENTNAMENOTFOUND", WERR_NERR_CLIENTNAMENOTFOUND }, + { "WERR_NERR_FILEIDNOTFOUND", WERR_NERR_FILEIDNOTFOUND }, + { "WERR_NERR_EXECFAILURE", WERR_NERR_EXECFAILURE }, + { "WERR_NERR_TMPFILE", WERR_NERR_TMPFILE }, + { "WERR_NERR_TOOMUCHDATA", WERR_NERR_TOOMUCHDATA }, + { "WERR_NERR_DEVICESHARECONFLICT", WERR_NERR_DEVICESHARECONFLICT }, + { "WERR_NERR_BROWSERTABLEINCOMPLETE", WERR_NERR_BROWSERTABLEINCOMPLETE }, + { "WERR_NERR_NOTLOCALDOMAIN", WERR_NERR_NOTLOCALDOMAIN }, + { "WERR_NERR_ISDFSSHARE", WERR_NERR_ISDFSSHARE }, + { "WERR_NERR_DEVINVALIDOPCODE", WERR_NERR_DEVINVALIDOPCODE }, + { "WERR_NERR_DEVNOTFOUND", WERR_NERR_DEVNOTFOUND }, + { "WERR_NERR_DEVNOTOPEN", WERR_NERR_DEVNOTOPEN }, + { "WERR_NERR_BADQUEUEDEVSTRING", WERR_NERR_BADQUEUEDEVSTRING }, + { "WERR_NERR_BADQUEUEPRIORITY", WERR_NERR_BADQUEUEPRIORITY }, + { "WERR_NERR_NOCOMMDEVS", WERR_NERR_NOCOMMDEVS }, + { "WERR_NERR_QUEUENOTFOUND", WERR_NERR_QUEUENOTFOUND }, + { "WERR_NERR_BADDEVSTRING", WERR_NERR_BADDEVSTRING }, + { "WERR_NERR_BADDEV", WERR_NERR_BADDEV }, + { "WERR_NERR_INUSEBYSPOOLER", WERR_NERR_INUSEBYSPOOLER }, + { "WERR_NERR_COMMDEVINUSE", WERR_NERR_COMMDEVINUSE }, + { "WERR_NERR_INVALIDCOMPUTER", WERR_NERR_INVALIDCOMPUTER }, + { "WERR_NERR_MAXLENEXCEEDED", WERR_NERR_MAXLENEXCEEDED }, + { "WERR_NERR_BADCOMPONENT", WERR_NERR_BADCOMPONENT }, + { "WERR_NERR_CANTTYPE", WERR_NERR_CANTTYPE }, + { "WERR_NERR_TOOMANYENTRIES", WERR_NERR_TOOMANYENTRIES }, + { "WERR_NERR_PROFILEFILETOOBIG", WERR_NERR_PROFILEFILETOOBIG }, + { "WERR_NERR_PROFILEOFFSET", WERR_NERR_PROFILEOFFSET }, + { "WERR_NERR_PROFILECLEANUP", WERR_NERR_PROFILECLEANUP }, + { "WERR_NERR_PROFILEUNKNOWNCMD", WERR_NERR_PROFILEUNKNOWNCMD }, + { "WERR_NERR_PROFILELOADERR", WERR_NERR_PROFILELOADERR }, + { "WERR_NERR_PROFILESAVEERR", WERR_NERR_PROFILESAVEERR }, + { "WERR_NERR_LOGOVERFLOW", WERR_NERR_LOGOVERFLOW }, + { "WERR_NERR_LOGFILECHANGED", WERR_NERR_LOGFILECHANGED }, + { "WERR_NERR_LOGFILECORRUPT", WERR_NERR_LOGFILECORRUPT }, + { "WERR_NERR_SOURCEISDIR", WERR_NERR_SOURCEISDIR }, + { "WERR_NERR_BADSOURCE", WERR_NERR_BADSOURCE }, + { "WERR_NERR_BADDEST", WERR_NERR_BADDEST }, + { "WERR_NERR_DIFFERENTSERVERS", WERR_NERR_DIFFERENTSERVERS }, + { "WERR_NERR_RUNSRVPAUSED", WERR_NERR_RUNSRVPAUSED }, + { "WERR_NERR_ERRCOMMRUNSRV", WERR_NERR_ERRCOMMRUNSRV }, + { "WERR_NERR_ERROREXECINGGHOST", WERR_NERR_ERROREXECINGGHOST }, + { "WERR_NERR_SHARENOTFOUND", WERR_NERR_SHARENOTFOUND }, + { "WERR_NERR_INVALIDLANA", WERR_NERR_INVALIDLANA }, + { "WERR_NERR_OPENFILES", WERR_NERR_OPENFILES }, + { "WERR_NERR_ACTIVECONNS", WERR_NERR_ACTIVECONNS }, + { "WERR_NERR_BADPASSWORDCORE", WERR_NERR_BADPASSWORDCORE }, + { "WERR_NERR_DEVINUSE", WERR_NERR_DEVINUSE }, + { "WERR_NERR_LOCALDRIVE", WERR_NERR_LOCALDRIVE }, + { "WERR_NERR_ALERTEXISTS", WERR_NERR_ALERTEXISTS }, + { "WERR_NERR_TOOMANYALERTS", WERR_NERR_TOOMANYALERTS }, + { "WERR_NERR_NOSUCHALERT", WERR_NERR_NOSUCHALERT }, + { "WERR_NERR_BADRECIPIENT", WERR_NERR_BADRECIPIENT }, + { "WERR_NERR_ACCTLIMITEXCEEDED", WERR_NERR_ACCTLIMITEXCEEDED }, + { "WERR_NERR_INVALIDLOGSEEK", WERR_NERR_INVALIDLOGSEEK }, + { "WERR_NERR_BADUASCONFIG", WERR_NERR_BADUASCONFIG }, + { "WERR_NERR_INVALIDUASOP", WERR_NERR_INVALIDUASOP }, + { "WERR_NERR_LASTADMIN", WERR_NERR_LASTADMIN }, + { "WERR_NERR_DCNOTFOUND", WERR_NERR_DCNOTFOUND }, + { "WERR_NERR_LOGONTRACKINGERROR", WERR_NERR_LOGONTRACKINGERROR }, + { "WERR_NERR_NETLOGONNOTSTARTED", WERR_NERR_NETLOGONNOTSTARTED }, + { "WERR_NERR_CANNOTGROWUASFILE", WERR_NERR_CANNOTGROWUASFILE }, + { "WERR_NERR_TIMEDIFFATDC", WERR_NERR_TIMEDIFFATDC }, + { "WERR_NERR_PASSWORDMISMATCH", WERR_NERR_PASSWORDMISMATCH }, + { "WERR_NERR_NOSUCHSERVER", WERR_NERR_NOSUCHSERVER }, + { "WERR_NERR_NOSUCHSESSION", WERR_NERR_NOSUCHSESSION }, + { "WERR_NERR_NOSUCHCONNECTION", WERR_NERR_NOSUCHCONNECTION }, + { "WERR_NERR_TOOMANYSERVERS", WERR_NERR_TOOMANYSERVERS }, + { "WERR_NERR_TOOMANYSESSIONS", WERR_NERR_TOOMANYSESSIONS }, + { "WERR_NERR_TOOMANYCONNECTIONS", WERR_NERR_TOOMANYCONNECTIONS }, + { "WERR_NERR_TOOMANYFILES", WERR_NERR_TOOMANYFILES }, + { "WERR_NERR_NOALTERNATESERVERS", WERR_NERR_NOALTERNATESERVERS }, + { "WERR_NERR_TRYDOWNLEVEL", WERR_NERR_TRYDOWNLEVEL }, + { "WERR_NERR_UPSDRIVERNOTSTARTED", WERR_NERR_UPSDRIVERNOTSTARTED }, + { "WERR_NERR_UPSINVALIDCONFIG", WERR_NERR_UPSINVALIDCONFIG }, + { "WERR_NERR_UPSINVALIDCOMMPORT", WERR_NERR_UPSINVALIDCOMMPORT }, + { "WERR_NERR_UPSSIGNALASSERTED", WERR_NERR_UPSSIGNALASSERTED }, + { "WERR_NERR_UPSSHUTDOWNFAILED", WERR_NERR_UPSSHUTDOWNFAILED }, + { "WERR_NERR_BADDOSRETCODE", WERR_NERR_BADDOSRETCODE }, + { "WERR_NERR_PROGNEEDSEXTRAMEM", WERR_NERR_PROGNEEDSEXTRAMEM }, + { "WERR_NERR_BADDOSFUNCTION", WERR_NERR_BADDOSFUNCTION }, + { "WERR_NERR_REMOTEBOOTFAILED", WERR_NERR_REMOTEBOOTFAILED }, + { "WERR_NERR_BADFILECHECKSUM", WERR_NERR_BADFILECHECKSUM }, + { "WERR_NERR_NORPLBOOTSYSTEM", WERR_NERR_NORPLBOOTSYSTEM }, + { "WERR_NERR_RPLLOADRNETBIOSERR", WERR_NERR_RPLLOADRNETBIOSERR }, + { "WERR_NERR_RPLLOADRDISKERR", WERR_NERR_RPLLOADRDISKERR }, + { "WERR_NERR_IMAGEPARAMERR", WERR_NERR_IMAGEPARAMERR }, + { "WERR_NERR_TOOMANYIMAGEPARAMS", WERR_NERR_TOOMANYIMAGEPARAMS }, + { "WERR_NERR_NONDOSFLOPPYUSED", WERR_NERR_NONDOSFLOPPYUSED }, + { "WERR_NERR_RPLBOOTRESTART", WERR_NERR_RPLBOOTRESTART }, + { "WERR_NERR_RPLSRVRCALLFAILED", WERR_NERR_RPLSRVRCALLFAILED }, + { "WERR_NERR_CANTCONNECTRPLSRVR", WERR_NERR_CANTCONNECTRPLSRVR }, + { "WERR_NERR_CANTOPENIMAGEFILE", WERR_NERR_CANTOPENIMAGEFILE }, + { "WERR_NERR_CALLINGRPLSRVR", WERR_NERR_CALLINGRPLSRVR }, + { "WERR_NERR_STARTINGRPLBOOT", WERR_NERR_STARTINGRPLBOOT }, + { "WERR_NERR_RPLBOOTSERVICETERM", WERR_NERR_RPLBOOTSERVICETERM }, + { "WERR_NERR_RPLBOOTSTARTFAILED", WERR_NERR_RPLBOOTSTARTFAILED }, + { "WERR_NERR_RPL_CONNECTED", WERR_NERR_RPL_CONNECTED }, + { "WERR_NERR_BROWSERCONFIGUREDTONOTRUN", WERR_NERR_BROWSERCONFIGUREDTONOTRUN }, + { "WERR_NERR_RPLNOADAPTERSSTARTED", WERR_NERR_RPLNOADAPTERSSTARTED }, + { "WERR_NERR_RPLBADREGISTRY", WERR_NERR_RPLBADREGISTRY }, + { "WERR_NERR_RPLBADDATABASE", WERR_NERR_RPLBADDATABASE }, + { "WERR_NERR_RPLRPLFILESSHARE", WERR_NERR_RPLRPLFILESSHARE }, + { "WERR_NERR_RPLNOTRPLSERVER", WERR_NERR_RPLNOTRPLSERVER }, + { "WERR_NERR_RPLCANNOTENUM", WERR_NERR_RPLCANNOTENUM }, + { "WERR_NERR_RPLWKSTAINFOCORRUPTED", WERR_NERR_RPLWKSTAINFOCORRUPTED }, + { "WERR_NERR_RPLWKSTANOTFOUND", WERR_NERR_RPLWKSTANOTFOUND }, + { "WERR_NERR_RPLWKSTANAMEUNAVAILABLE", WERR_NERR_RPLWKSTANAMEUNAVAILABLE }, + { "WERR_NERR_RPLPROFILEINFOCORRUPTED", WERR_NERR_RPLPROFILEINFOCORRUPTED }, + { "WERR_NERR_RPLPROFILENOTFOUND", WERR_NERR_RPLPROFILENOTFOUND }, + { "WERR_NERR_RPLPROFILENAMEUNAVAILABLE", WERR_NERR_RPLPROFILENAMEUNAVAILABLE }, + { "WERR_NERR_RPLPROFILENOTEMPTY", WERR_NERR_RPLPROFILENOTEMPTY }, + { "WERR_NERR_RPLCONFIGINFOCORRUPTED", WERR_NERR_RPLCONFIGINFOCORRUPTED }, + { "WERR_NERR_RPLCONFIGNOTFOUND", WERR_NERR_RPLCONFIGNOTFOUND }, + { "WERR_NERR_RPLADAPTERINFOCORRUPTED", WERR_NERR_RPLADAPTERINFOCORRUPTED }, + { "WERR_NERR_RPLINTERNAL", WERR_NERR_RPLINTERNAL }, + { "WERR_NERR_RPLVENDORINFOCORRUPTED", WERR_NERR_RPLVENDORINFOCORRUPTED }, + { "WERR_NERR_RPLBOOTINFOCORRUPTED", WERR_NERR_RPLBOOTINFOCORRUPTED }, + { "WERR_NERR_RPLWKSTANEEDSUSERACCT", WERR_NERR_RPLWKSTANEEDSUSERACCT }, + { "WERR_NERR_RPLNEEDSRPLUSERACCT", WERR_NERR_RPLNEEDSRPLUSERACCT }, + { "WERR_NERR_RPLBOOTNOTFOUND", WERR_NERR_RPLBOOTNOTFOUND }, + { "WERR_NERR_RPLINCOMPATIBLEPROFILE", WERR_NERR_RPLINCOMPATIBLEPROFILE }, + { "WERR_NERR_RPLADAPTERNAMEUNAVAILABLE", WERR_NERR_RPLADAPTERNAMEUNAVAILABLE }, + { "WERR_NERR_RPLCONFIGNOTEMPTY", WERR_NERR_RPLCONFIGNOTEMPTY }, + { "WERR_NERR_RPLBOOTINUSE", WERR_NERR_RPLBOOTINUSE }, + { "WERR_NERR_RPLBACKUPDATABASE", WERR_NERR_RPLBACKUPDATABASE }, + { "WERR_NERR_RPLADAPTERNOTFOUND", WERR_NERR_RPLADAPTERNOTFOUND }, + { "WERR_NERR_RPLVENDORNOTFOUND", WERR_NERR_RPLVENDORNOTFOUND }, + { "WERR_NERR_RPLVENDORNAMEUNAVAILABLE", WERR_NERR_RPLVENDORNAMEUNAVAILABLE }, + { "WERR_NERR_RPLBOOTNAMEUNAVAILABLE", WERR_NERR_RPLBOOTNAMEUNAVAILABLE }, + { "WERR_NERR_RPLCONFIGNAMEUNAVAILABLE", WERR_NERR_RPLCONFIGNAMEUNAVAILABLE }, + { "WERR_NERR_DFSINTERNALCORRUPTION", WERR_NERR_DFSINTERNALCORRUPTION }, + { "WERR_NERR_DFSVOLUMEDATACORRUPT", WERR_NERR_DFSVOLUMEDATACORRUPT }, + { "WERR_NERR_DFSNOSUCHVOLUME", WERR_NERR_DFSNOSUCHVOLUME }, + { "WERR_NERR_DFSVOLUMEALREADYEXISTS", WERR_NERR_DFSVOLUMEALREADYEXISTS }, + { "WERR_NERR_DFSALREADYSHARED", WERR_NERR_DFSALREADYSHARED }, + { "WERR_NERR_DFSNOSUCHSHARE", WERR_NERR_DFSNOSUCHSHARE }, + { "WERR_NERR_DFSNOTALEAFVOLUME", WERR_NERR_DFSNOTALEAFVOLUME }, + { "WERR_NERR_DFSLEAFVOLUME", WERR_NERR_DFSLEAFVOLUME }, + { "WERR_NERR_DFSVOLUMEHASMULTIPLESERVERS", WERR_NERR_DFSVOLUMEHASMULTIPLESERVERS }, + { "WERR_NERR_DFSCANTCREATEJUNCTIONPOINT", WERR_NERR_DFSCANTCREATEJUNCTIONPOINT }, + { "WERR_NERR_DFSSERVERNOTDFSAWARE", WERR_NERR_DFSSERVERNOTDFSAWARE }, + { "WERR_NERR_DFSBADRENAMEPATH", WERR_NERR_DFSBADRENAMEPATH }, + { "WERR_NERR_DFSVOLUMEISOFFLINE", WERR_NERR_DFSVOLUMEISOFFLINE }, + { "WERR_NERR_DFSNOSUCHSERVER", WERR_NERR_DFSNOSUCHSERVER }, + { "WERR_NERR_DFSCYCLICALNAME", WERR_NERR_DFSCYCLICALNAME }, + { "WERR_NERR_DFSNOTSUPPORTEDINSERVERDFS", WERR_NERR_DFSNOTSUPPORTEDINSERVERDFS }, + { "WERR_NERR_DFSDUPLICATESERVICE", WERR_NERR_DFSDUPLICATESERVICE }, + { "WERR_NERR_DFSCANTREMOVELASTSERVERSHARE", WERR_NERR_DFSCANTREMOVELASTSERVERSHARE }, + { "WERR_NERR_DFSVOLUMEISINTERDFS", WERR_NERR_DFSVOLUMEISINTERDFS }, + { "WERR_NERR_DFSINCONSISTENT", WERR_NERR_DFSINCONSISTENT }, + { "WERR_NERR_DFSSERVERUPGRADED", WERR_NERR_DFSSERVERUPGRADED }, + { "WERR_NERR_DFSDATAISIDENTICAL", WERR_NERR_DFSDATAISIDENTICAL }, + { "WERR_NERR_DFSCANTREMOVEDFSROOT", WERR_NERR_DFSCANTREMOVEDFSROOT }, + { "WERR_NERR_DFSCHILDORPARENTINDFS", WERR_NERR_DFSCHILDORPARENTINDFS }, + { "WERR_NERR_DFSINTERNALERROR", WERR_NERR_DFSINTERNALERROR }, + { "WERR_NERR_SETUPALREADYJOINED", WERR_NERR_SETUPALREADYJOINED }, + { "WERR_NERR_SETUPNOTJOINED", WERR_NERR_SETUPNOTJOINED }, + { "WERR_NERR_SETUPDOMAINCONTROLLER", WERR_NERR_SETUPDOMAINCONTROLLER }, + { "WERR_NERR_DEFAULTJOINREQUIRED", WERR_NERR_DEFAULTJOINREQUIRED }, + { "WERR_NERR_INVALIDWORKGROUPNAME", WERR_NERR_INVALIDWORKGROUPNAME }, + { "WERR_NERR_NAMEUSESINCOMPATIBLECODEPAGE", WERR_NERR_NAMEUSESINCOMPATIBLECODEPAGE }, + { "WERR_NERR_COMPUTERACCOUNTNOTFOUND", WERR_NERR_COMPUTERACCOUNTNOTFOUND }, + { "WERR_NERR_PERSONALSKU", WERR_NERR_PERSONALSKU }, + { "WERR_NERR_PASSWORDMUSTCHANGE", WERR_NERR_PASSWORDMUSTCHANGE }, + { "WERR_NERR_ACCOUNTLOCKEDOUT", WERR_NERR_ACCOUNTLOCKEDOUT }, + { "WERR_NERR_PASSWORDTOOLONG", WERR_NERR_PASSWORDTOOLONG }, + { "WERR_NERR_PASSWORDNOTCOMPLEXENOUGH", WERR_NERR_PASSWORDNOTCOMPLEXENOUGH }, + { "WERR_NERR_PASSWORDFILTERERROR", WERR_NERR_PASSWORDFILTERERROR }, + { "WERR_SUCCESS_REBOOT_REQUIRED", WERR_SUCCESS_REBOOT_REQUIRED }, + { "WERR_SUCCESS_RESTART_REQUIRED", WERR_SUCCESS_RESTART_REQUIRED }, + { "WERR_PRINTER_NOT_FOUND", WERR_PRINTER_NOT_FOUND }, + { "WERR_PRINTER_DRIVER_WARNED", WERR_PRINTER_DRIVER_WARNED }, + { "WERR_PRINTER_DRIVER_BLOCKED", WERR_PRINTER_DRIVER_BLOCKED }, + { "WERR_PRINTER_DRIVER_PACKAGE_IN_USE", WERR_PRINTER_DRIVER_PACKAGE_IN_USE }, + { "WERR_CORE_DRIVER_PACKAGE_NOT_FOUND", WERR_CORE_DRIVER_PACKAGE_NOT_FOUND }, + { "WERR_FAIL_REBOOT_REQUIRED", WERR_FAIL_REBOOT_REQUIRED }, + { "WERR_FAIL_REBOOT_INITIATED", WERR_FAIL_REBOOT_INITIATED }, + { "WERR_IO_REISSUE_AS_CACHED", WERR_IO_REISSUE_AS_CACHED }, + { "WERR_WINS_INTERNAL", WERR_WINS_INTERNAL }, + { "WERR_CAN_NOT_DEL_LOCAL_WINS", WERR_CAN_NOT_DEL_LOCAL_WINS }, + { "WERR_STATIC_INIT", WERR_STATIC_INIT }, + { "WERR_INC_BACKUP", WERR_INC_BACKUP }, + { "WERR_FULL_BACKUP", WERR_FULL_BACKUP }, + { "WERR_REC_NON_EXISTENT", WERR_REC_NON_EXISTENT }, + { "WERR_RPL_NOT_ALLOWED", WERR_RPL_NOT_ALLOWED }, + { "WERR_DHCP_ADDRESS_CONFLICT", WERR_DHCP_ADDRESS_CONFLICT }, + { "WERR_WMI_GUID_NOT_FOUND", WERR_WMI_GUID_NOT_FOUND }, + { "WERR_WMI_INSTANCE_NOT_FOUND", WERR_WMI_INSTANCE_NOT_FOUND }, + { "WERR_WMI_ITEMID_NOT_FOUND", WERR_WMI_ITEMID_NOT_FOUND }, + { "WERR_WMI_TRY_AGAIN", WERR_WMI_TRY_AGAIN }, + { "WERR_WMI_DP_NOT_FOUND", WERR_WMI_DP_NOT_FOUND }, + { "WERR_WMI_UNRESOLVED_INSTANCE_REF", WERR_WMI_UNRESOLVED_INSTANCE_REF }, + { "WERR_WMI_ALREADY_ENABLED", WERR_WMI_ALREADY_ENABLED }, + { "WERR_WMI_GUID_DISCONNECTED", WERR_WMI_GUID_DISCONNECTED }, + { "WERR_WMI_SERVER_UNAVAILABLE", WERR_WMI_SERVER_UNAVAILABLE }, + { "WERR_WMI_DP_FAILED", WERR_WMI_DP_FAILED }, + { "WERR_WMI_INVALID_MOF", WERR_WMI_INVALID_MOF }, + { "WERR_WMI_INVALID_REGINFO", WERR_WMI_INVALID_REGINFO }, + { "WERR_WMI_ALREADY_DISABLED", WERR_WMI_ALREADY_DISABLED }, + { "WERR_WMI_READ_ONLY", WERR_WMI_READ_ONLY }, + { "WERR_WMI_SET_FAILURE", WERR_WMI_SET_FAILURE }, + { "WERR_INVALID_MEDIA", WERR_INVALID_MEDIA }, + { "WERR_INVALID_LIBRARY", WERR_INVALID_LIBRARY }, + { "WERR_INVALID_MEDIA_POOL", WERR_INVALID_MEDIA_POOL }, + { "WERR_DRIVE_MEDIA_MISMATCH", WERR_DRIVE_MEDIA_MISMATCH }, + { "WERR_MEDIA_OFFLINE", WERR_MEDIA_OFFLINE }, + { "WERR_LIBRARY_OFFLINE", WERR_LIBRARY_OFFLINE }, + { "WERR_EMPTY", WERR_EMPTY }, + { "WERR_NOT_EMPTY", WERR_NOT_EMPTY }, + { "WERR_MEDIA_UNAVAILABLE", WERR_MEDIA_UNAVAILABLE }, + { "WERR_RESOURCE_DISABLED", WERR_RESOURCE_DISABLED }, + { "WERR_INVALID_CLEANER", WERR_INVALID_CLEANER }, + { "WERR_UNABLE_TO_CLEAN", WERR_UNABLE_TO_CLEAN }, + { "WERR_OBJECT_NOT_FOUND", WERR_OBJECT_NOT_FOUND }, + { "WERR_DATABASE_FAILURE", WERR_DATABASE_FAILURE }, + { "WERR_DATABASE_FULL", WERR_DATABASE_FULL }, + { "WERR_MEDIA_INCOMPATIBLE", WERR_MEDIA_INCOMPATIBLE }, + { "WERR_RESOURCE_NOT_PRESENT", WERR_RESOURCE_NOT_PRESENT }, + { "WERR_INVALID_OPERATION", WERR_INVALID_OPERATION }, + { "WERR_MEDIA_NOT_AVAILABLE", WERR_MEDIA_NOT_AVAILABLE }, + { "WERR_REQUEST_REFUSED", WERR_REQUEST_REFUSED }, + { "WERR_INVALID_DRIVE_OBJECT", WERR_INVALID_DRIVE_OBJECT }, + { "WERR_LIBRARY_FULL", WERR_LIBRARY_FULL }, + { "WERR_MEDIUM_NOT_ACCESSIBLE", WERR_MEDIUM_NOT_ACCESSIBLE }, + { "WERR_UNABLE_TO_LOAD_MEDIUM", WERR_UNABLE_TO_LOAD_MEDIUM }, + { "WERR_UNABLE_TO_INVENTORY_DRIVE", WERR_UNABLE_TO_INVENTORY_DRIVE }, + { "WERR_UNABLE_TO_INVENTORY_SLOT", WERR_UNABLE_TO_INVENTORY_SLOT }, + { "WERR_UNABLE_TO_INVENTORY_TRANSPORT", WERR_UNABLE_TO_INVENTORY_TRANSPORT }, + { "WERR_TRANSPORT_FULL", WERR_TRANSPORT_FULL }, + { "WERR_CONTROLLING_IEPORT", WERR_CONTROLLING_IEPORT }, + { "WERR_UNABLE_TO_EJECT_MOUNTED_MEDIA", WERR_UNABLE_TO_EJECT_MOUNTED_MEDIA }, + { "WERR_CLEANER_SLOT_SET", WERR_CLEANER_SLOT_SET }, + { "WERR_CLEANER_SLOT_NOT_SET", WERR_CLEANER_SLOT_NOT_SET }, + { "WERR_CLEANER_CARTRIDGE_SPENT", WERR_CLEANER_CARTRIDGE_SPENT }, + { "WERR_UNEXPECTED_OMID", WERR_UNEXPECTED_OMID }, + { "WERR_CANT_DELETE_LAST_ITEM", WERR_CANT_DELETE_LAST_ITEM }, + { "WERR_MESSAGE_EXCEEDS_MAX_SIZE", WERR_MESSAGE_EXCEEDS_MAX_SIZE }, + { "WERR_VOLUME_CONTAINS_SYS_FILES", WERR_VOLUME_CONTAINS_SYS_FILES }, + { "WERR_INDIGENOUS_TYPE", WERR_INDIGENOUS_TYPE }, + { "WERR_NO_SUPPORTING_DRIVES", WERR_NO_SUPPORTING_DRIVES }, + { "WERR_CLEANER_CARTRIDGE_INSTALLED", WERR_CLEANER_CARTRIDGE_INSTALLED }, + { "WERR_IEPORT_FULL", WERR_IEPORT_FULL }, + { "WERR_FILE_OFFLINE", WERR_FILE_OFFLINE }, + { "WERR_REMOTE_STORAGE_NOT_ACTIVE", WERR_REMOTE_STORAGE_NOT_ACTIVE }, + { "WERR_REMOTE_STORAGE_MEDIA_ERROR", WERR_REMOTE_STORAGE_MEDIA_ERROR }, + { "WERR_NOT_A_REPARSE_POINT", WERR_NOT_A_REPARSE_POINT }, + { "WERR_REPARSE_ATTRIBUTE_CONFLICT", WERR_REPARSE_ATTRIBUTE_CONFLICT }, + { "WERR_INVALID_REPARSE_DATA", WERR_INVALID_REPARSE_DATA }, + { "WERR_REPARSE_TAG_INVALID", WERR_REPARSE_TAG_INVALID }, + { "WERR_REPARSE_TAG_MISMATCH", WERR_REPARSE_TAG_MISMATCH }, + { "WERR_VOLUME_NOT_SIS_ENABLED", WERR_VOLUME_NOT_SIS_ENABLED }, + { "WERR_DEPENDENT_RESOURCE_EXISTS", WERR_DEPENDENT_RESOURCE_EXISTS }, + { "WERR_DEPENDENCY_NOT_FOUND", WERR_DEPENDENCY_NOT_FOUND }, + { "WERR_DEPENDENCY_ALREADY_EXISTS", WERR_DEPENDENCY_ALREADY_EXISTS }, + { "WERR_RESOURCE_NOT_ONLINE", WERR_RESOURCE_NOT_ONLINE }, + { "WERR_HOST_NODE_NOT_AVAILABLE", WERR_HOST_NODE_NOT_AVAILABLE }, + { "WERR_RESOURCE_NOT_AVAILABLE", WERR_RESOURCE_NOT_AVAILABLE }, + { "WERR_RESOURCE_NOT_FOUND", WERR_RESOURCE_NOT_FOUND }, + { "WERR_SHUTDOWN_CLUSTER", WERR_SHUTDOWN_CLUSTER }, + { "WERR_CANT_EVICT_ACTIVE_NODE", WERR_CANT_EVICT_ACTIVE_NODE }, + { "WERR_OBJECT_ALREADY_EXISTS", WERR_OBJECT_ALREADY_EXISTS }, + { "WERR_OBJECT_IN_LIST", WERR_OBJECT_IN_LIST }, + { "WERR_GROUP_NOT_AVAILABLE", WERR_GROUP_NOT_AVAILABLE }, + { "WERR_GROUP_NOT_FOUND", WERR_GROUP_NOT_FOUND }, + { "WERR_GROUP_NOT_ONLINE", WERR_GROUP_NOT_ONLINE }, + { "WERR_HOST_NODE_NOT_RESOURCE_OWNER", WERR_HOST_NODE_NOT_RESOURCE_OWNER }, + { "WERR_HOST_NODE_NOT_GROUP_OWNER", WERR_HOST_NODE_NOT_GROUP_OWNER }, + { "WERR_RESMON_CREATE_FAILED", WERR_RESMON_CREATE_FAILED }, + { "WERR_RESMON_ONLINE_FAILED", WERR_RESMON_ONLINE_FAILED }, + { "WERR_RESOURCE_ONLINE", WERR_RESOURCE_ONLINE }, + { "WERR_QUORUM_RESOURCE", WERR_QUORUM_RESOURCE }, + { "WERR_NOT_QUORUM_CAPABLE", WERR_NOT_QUORUM_CAPABLE }, + { "WERR_CLUSTER_SHUTTING_DOWN", WERR_CLUSTER_SHUTTING_DOWN }, + { "WERR_INVALID_STATE", WERR_INVALID_STATE }, + { "WERR_RESOURCE_PROPERTIES_STORED", WERR_RESOURCE_PROPERTIES_STORED }, + { "WERR_NOT_QUORUM_CLASS", WERR_NOT_QUORUM_CLASS }, + { "WERR_CORE_RESOURCE", WERR_CORE_RESOURCE }, + { "WERR_QUORUM_RESOURCE_ONLINE_FAILED", WERR_QUORUM_RESOURCE_ONLINE_FAILED }, + { "WERR_QUORUMLOG_OPEN_FAILED", WERR_QUORUMLOG_OPEN_FAILED }, + { "WERR_CLUSTERLOG_CORRUPT", WERR_CLUSTERLOG_CORRUPT }, + { "WERR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE", WERR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE }, + { "WERR_CLUSTERLOG_EXCEEDS_MAXSIZE", WERR_CLUSTERLOG_EXCEEDS_MAXSIZE }, + { "WERR_CLUSTERLOG_CHKPOINT_NOT_FOUND", WERR_CLUSTERLOG_CHKPOINT_NOT_FOUND }, + { "WERR_CLUSTERLOG_NOT_ENOUGH_SPACE", WERR_CLUSTERLOG_NOT_ENOUGH_SPACE }, + { "WERR_QUORUM_OWNER_ALIVE", WERR_QUORUM_OWNER_ALIVE }, + { "WERR_NETWORK_NOT_AVAILABLE", WERR_NETWORK_NOT_AVAILABLE }, + { "WERR_NODE_NOT_AVAILABLE", WERR_NODE_NOT_AVAILABLE }, + { "WERR_ALL_NODES_NOT_AVAILABLE", WERR_ALL_NODES_NOT_AVAILABLE }, + { "WERR_RESOURCE_FAILED", WERR_RESOURCE_FAILED }, + { "WERR_CLUSTER_INVALID_NODE", WERR_CLUSTER_INVALID_NODE }, + { "WERR_CLUSTER_NODE_EXISTS", WERR_CLUSTER_NODE_EXISTS }, + { "WERR_CLUSTER_JOIN_IN_PROGRESS", WERR_CLUSTER_JOIN_IN_PROGRESS }, + { "WERR_CLUSTER_NODE_NOT_FOUND", WERR_CLUSTER_NODE_NOT_FOUND }, + { "WERR_CLUSTER_LOCAL_NODE_NOT_FOUND", WERR_CLUSTER_LOCAL_NODE_NOT_FOUND }, + { "WERR_CLUSTER_NETWORK_EXISTS", WERR_CLUSTER_NETWORK_EXISTS }, + { "WERR_CLUSTER_NETWORK_NOT_FOUND", WERR_CLUSTER_NETWORK_NOT_FOUND }, + { "WERR_CLUSTER_NETINTERFACE_EXISTS", WERR_CLUSTER_NETINTERFACE_EXISTS }, + { "WERR_CLUSTER_NETINTERFACE_NOT_FOUND", WERR_CLUSTER_NETINTERFACE_NOT_FOUND }, + { "WERR_CLUSTER_INVALID_REQUEST", WERR_CLUSTER_INVALID_REQUEST }, + { "WERR_CLUSTER_INVALID_NETWORK_PROVIDER", WERR_CLUSTER_INVALID_NETWORK_PROVIDER }, + { "WERR_CLUSTER_NODE_DOWN", WERR_CLUSTER_NODE_DOWN }, + { "WERR_CLUSTER_NODE_UNREACHABLE", WERR_CLUSTER_NODE_UNREACHABLE }, + { "WERR_CLUSTER_NODE_NOT_MEMBER", WERR_CLUSTER_NODE_NOT_MEMBER }, + { "WERR_CLUSTER_JOIN_NOT_IN_PROGRESS", WERR_CLUSTER_JOIN_NOT_IN_PROGRESS }, + { "WERR_CLUSTER_INVALID_NETWORK", WERR_CLUSTER_INVALID_NETWORK }, + { "WERR_CLUSTER_NODE_UP", WERR_CLUSTER_NODE_UP }, + { "WERR_CLUSTER_IPADDR_IN_USE", WERR_CLUSTER_IPADDR_IN_USE }, + { "WERR_CLUSTER_NODE_NOT_PAUSED", WERR_CLUSTER_NODE_NOT_PAUSED }, + { "WERR_CLUSTER_NO_SECURITY_CONTEXT", WERR_CLUSTER_NO_SECURITY_CONTEXT }, + { "WERR_CLUSTER_NETWORK_NOT_INTERNAL", WERR_CLUSTER_NETWORK_NOT_INTERNAL }, + { "WERR_CLUSTER_NODE_ALREADY_UP", WERR_CLUSTER_NODE_ALREADY_UP }, + { "WERR_CLUSTER_NODE_ALREADY_DOWN", WERR_CLUSTER_NODE_ALREADY_DOWN }, + { "WERR_CLUSTER_NETWORK_ALREADY_ONLINE", WERR_CLUSTER_NETWORK_ALREADY_ONLINE }, + { "WERR_CLUSTER_NETWORK_ALREADY_OFFLINE", WERR_CLUSTER_NETWORK_ALREADY_OFFLINE }, + { "WERR_CLUSTER_NODE_ALREADY_MEMBER", WERR_CLUSTER_NODE_ALREADY_MEMBER }, + { "WERR_CLUSTER_LAST_INTERNAL_NETWORK", WERR_CLUSTER_LAST_INTERNAL_NETWORK }, + { "WERR_CLUSTER_NETWORK_HAS_DEPENDENTS", WERR_CLUSTER_NETWORK_HAS_DEPENDENTS }, + { "WERR_INVALID_OPERATION_ON_QUORUM", WERR_INVALID_OPERATION_ON_QUORUM }, + { "WERR_DEPENDENCY_NOT_ALLOWED", WERR_DEPENDENCY_NOT_ALLOWED }, + { "WERR_CLUSTER_NODE_PAUSED", WERR_CLUSTER_NODE_PAUSED }, + { "WERR_NODE_CANT_HOST_RESOURCE", WERR_NODE_CANT_HOST_RESOURCE }, + { "WERR_CLUSTER_NODE_NOT_READY", WERR_CLUSTER_NODE_NOT_READY }, + { "WERR_CLUSTER_NODE_SHUTTING_DOWN", WERR_CLUSTER_NODE_SHUTTING_DOWN }, + { "WERR_CLUSTER_JOIN_ABORTED", WERR_CLUSTER_JOIN_ABORTED }, + { "WERR_CLUSTER_INCOMPATIBLE_VERSIONS", WERR_CLUSTER_INCOMPATIBLE_VERSIONS }, + { "WERR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED", WERR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED }, + { "WERR_CLUSTER_SYSTEM_CONFIG_CHANGED", WERR_CLUSTER_SYSTEM_CONFIG_CHANGED }, + { "WERR_CLUSTER_RESOURCE_TYPE_NOT_FOUND", WERR_CLUSTER_RESOURCE_TYPE_NOT_FOUND }, + { "WERR_CLUSTER_RESTYPE_NOT_SUPPORTED", WERR_CLUSTER_RESTYPE_NOT_SUPPORTED }, + { "WERR_CLUSTER_RESNAME_NOT_FOUND", WERR_CLUSTER_RESNAME_NOT_FOUND }, + { "WERR_CLUSTER_NO_RPC_PACKAGES_REGISTERED", WERR_CLUSTER_NO_RPC_PACKAGES_REGISTERED }, + { "WERR_CLUSTER_OWNER_NOT_IN_PREFLIST", WERR_CLUSTER_OWNER_NOT_IN_PREFLIST }, + { "WERR_CLUSTER_DATABASE_SEQMISMATCH", WERR_CLUSTER_DATABASE_SEQMISMATCH }, + { "WERR_RESMON_INVALID_STATE", WERR_RESMON_INVALID_STATE }, + { "WERR_CLUSTER_GUM_NOT_LOCKER", WERR_CLUSTER_GUM_NOT_LOCKER }, + { "WERR_QUORUM_DISK_NOT_FOUND", WERR_QUORUM_DISK_NOT_FOUND }, + { "WERR_DATABASE_BACKUP_CORRUPT", WERR_DATABASE_BACKUP_CORRUPT }, + { "WERR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT", WERR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT }, + { "WERR_RESOURCE_PROPERTY_UNCHANGEABLE", WERR_RESOURCE_PROPERTY_UNCHANGEABLE }, + { "WERR_CLUSTER_MEMBERSHIP_INVALID_STATE", WERR_CLUSTER_MEMBERSHIP_INVALID_STATE }, + { "WERR_CLUSTER_QUORUMLOG_NOT_FOUND", WERR_CLUSTER_QUORUMLOG_NOT_FOUND }, + { "WERR_CLUSTER_MEMBERSHIP_HALT", WERR_CLUSTER_MEMBERSHIP_HALT }, + { "WERR_CLUSTER_INSTANCE_ID_MISMATCH", WERR_CLUSTER_INSTANCE_ID_MISMATCH }, + { "WERR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP", WERR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP }, + { "WERR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH", WERR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH }, + { "WERR_CLUSTER_EVICT_WITHOUT_CLEANUP", WERR_CLUSTER_EVICT_WITHOUT_CLEANUP }, + { "WERR_CLUSTER_PARAMETER_MISMATCH", WERR_CLUSTER_PARAMETER_MISMATCH }, + { "WERR_NODE_CANNOT_BE_CLUSTERED", WERR_NODE_CANNOT_BE_CLUSTERED }, + { "WERR_CLUSTER_WRONG_OS_VERSION", WERR_CLUSTER_WRONG_OS_VERSION }, + { "WERR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME", WERR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME }, + { "WERR_CLUSCFG_ALREADY_COMMITTED", WERR_CLUSCFG_ALREADY_COMMITTED }, + { "WERR_CLUSCFG_ROLLBACK_FAILED", WERR_CLUSCFG_ROLLBACK_FAILED }, + { "WERR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT", WERR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT }, + { "WERR_CLUSTER_OLD_VERSION", WERR_CLUSTER_OLD_VERSION }, + { "WERR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME", WERR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME }, + { "WERR_CLUSTER_NO_NET_ADAPTERS", WERR_CLUSTER_NO_NET_ADAPTERS }, + { "WERR_CLUSTER_POISONED", WERR_CLUSTER_POISONED }, + { "WERR_CLUSTER_GROUP_MOVING", WERR_CLUSTER_GROUP_MOVING }, + { "WERR_CLUSTER_RESOURCE_TYPE_BUSY", WERR_CLUSTER_RESOURCE_TYPE_BUSY }, + { "WERR_RESOURCE_CALL_TIMED_OUT", WERR_RESOURCE_CALL_TIMED_OUT }, + { "WERR_INVALID_CLUSTER_IPV6_ADDRESS", WERR_INVALID_CLUSTER_IPV6_ADDRESS }, + { "WERR_CLUSTER_INTERNAL_INVALID_FUNCTION", WERR_CLUSTER_INTERNAL_INVALID_FUNCTION }, + { "WERR_CLUSTER_PARAMETER_OUT_OF_BOUNDS", WERR_CLUSTER_PARAMETER_OUT_OF_BOUNDS }, + { "WERR_CLUSTER_PARTIAL_SEND", WERR_CLUSTER_PARTIAL_SEND }, + { "WERR_CLUSTER_REGISTRY_INVALID_FUNCTION", WERR_CLUSTER_REGISTRY_INVALID_FUNCTION }, + { "WERR_CLUSTER_INVALID_STRING_TERMINATION", WERR_CLUSTER_INVALID_STRING_TERMINATION }, + { "WERR_CLUSTER_INVALID_STRING_FORMAT", WERR_CLUSTER_INVALID_STRING_FORMAT }, + { "WERR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS", WERR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS }, + { "WERR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS", WERR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS }, + { "WERR_CLUSTER_NULL_DATA", WERR_CLUSTER_NULL_DATA }, + { "WERR_CLUSTER_PARTIAL_READ", WERR_CLUSTER_PARTIAL_READ }, + { "WERR_CLUSTER_PARTIAL_WRITE", WERR_CLUSTER_PARTIAL_WRITE }, + { "WERR_CLUSTER_CANT_DESERIALIZE_DATA", WERR_CLUSTER_CANT_DESERIALIZE_DATA }, + { "WERR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT", WERR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT }, + { "WERR_CLUSTER_NO_QUORUM", WERR_CLUSTER_NO_QUORUM }, + { "WERR_CLUSTER_INVALID_IPV6_NETWORK", WERR_CLUSTER_INVALID_IPV6_NETWORK }, + { "WERR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK", WERR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK }, + { "WERR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP", WERR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP }, + { "WERR_ENCRYPTION_FAILED", WERR_ENCRYPTION_FAILED }, + { "WERR_DECRYPTION_FAILED", WERR_DECRYPTION_FAILED }, + { "WERR_FILE_ENCRYPTED", WERR_FILE_ENCRYPTED }, + { "WERR_NO_RECOVERY_POLICY", WERR_NO_RECOVERY_POLICY }, + { "WERR_NO_EFS", WERR_NO_EFS }, + { "WERR_WRONG_EFS", WERR_WRONG_EFS }, + { "WERR_NO_USER_KEYS", WERR_NO_USER_KEYS }, + { "WERR_FILE_NOT_ENCRYPTED", WERR_FILE_NOT_ENCRYPTED }, + { "WERR_NOT_EXPORT_FORMAT", WERR_NOT_EXPORT_FORMAT }, + { "WERR_FILE_READ_ONLY", WERR_FILE_READ_ONLY }, + { "WERR_DIR_EFS_DISALLOWED", WERR_DIR_EFS_DISALLOWED }, + { "WERR_EFS_SERVER_NOT_TRUSTED", WERR_EFS_SERVER_NOT_TRUSTED }, + { "WERR_BAD_RECOVERY_POLICY", WERR_BAD_RECOVERY_POLICY }, + { "WERR_EFS_ALG_BLOB_TOO_BIG", WERR_EFS_ALG_BLOB_TOO_BIG }, + { "WERR_VOLUME_NOT_SUPPORT_EFS", WERR_VOLUME_NOT_SUPPORT_EFS }, + { "WERR_EFS_DISABLED", WERR_EFS_DISABLED }, + { "WERR_EFS_VERSION_NOT_SUPPORT", WERR_EFS_VERSION_NOT_SUPPORT }, + { "WERR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE", WERR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE }, + { "WERR_CS_ENCRYPTION_UNSUPPORTED_SERVER", WERR_CS_ENCRYPTION_UNSUPPORTED_SERVER }, + { "WERR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE", WERR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE }, + { "WERR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE", WERR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE }, + { "WERR_CS_ENCRYPTION_FILE_NOT_CSE", WERR_CS_ENCRYPTION_FILE_NOT_CSE }, + { "WERR_NO_BROWSER_SERVERS_FOUND", WERR_NO_BROWSER_SERVERS_FOUND }, + { "WERR_LOG_SECTOR_INVALID", WERR_LOG_SECTOR_INVALID }, + { "WERR_LOG_SECTOR_PARITY_INVALID", WERR_LOG_SECTOR_PARITY_INVALID }, + { "WERR_LOG_SECTOR_REMAPPED", WERR_LOG_SECTOR_REMAPPED }, + { "WERR_LOG_BLOCK_INCOMPLETE", WERR_LOG_BLOCK_INCOMPLETE }, + { "WERR_LOG_INVALID_RANGE", WERR_LOG_INVALID_RANGE }, + { "WERR_LOG_BLOCKS_EXHAUSTED", WERR_LOG_BLOCKS_EXHAUSTED }, + { "WERR_LOG_READ_CONTEXT_INVALID", WERR_LOG_READ_CONTEXT_INVALID }, + { "WERR_LOG_RESTART_INVALID", WERR_LOG_RESTART_INVALID }, + { "WERR_LOG_BLOCK_VERSION", WERR_LOG_BLOCK_VERSION }, + { "WERR_LOG_BLOCK_INVALID", WERR_LOG_BLOCK_INVALID }, + { "WERR_LOG_READ_MODE_INVALID", WERR_LOG_READ_MODE_INVALID }, + { "WERR_LOG_NO_RESTART", WERR_LOG_NO_RESTART }, + { "WERR_LOG_METADATA_CORRUPT", WERR_LOG_METADATA_CORRUPT }, + { "WERR_LOG_METADATA_INVALID", WERR_LOG_METADATA_INVALID }, + { "WERR_LOG_METADATA_INCONSISTENT", WERR_LOG_METADATA_INCONSISTENT }, + { "WERR_LOG_RESERVATION_INVALID", WERR_LOG_RESERVATION_INVALID }, + { "WERR_LOG_CANT_DELETE", WERR_LOG_CANT_DELETE }, + { "WERR_LOG_CONTAINER_LIMIT_EXCEEDED", WERR_LOG_CONTAINER_LIMIT_EXCEEDED }, + { "WERR_LOG_START_OF_LOG", WERR_LOG_START_OF_LOG }, + { "WERR_LOG_POLICY_ALREADY_INSTALLED", WERR_LOG_POLICY_ALREADY_INSTALLED }, + { "WERR_LOG_POLICY_NOT_INSTALLED", WERR_LOG_POLICY_NOT_INSTALLED }, + { "WERR_LOG_POLICY_INVALID", WERR_LOG_POLICY_INVALID }, + { "WERR_LOG_POLICY_CONFLICT", WERR_LOG_POLICY_CONFLICT }, + { "WERR_LOG_PINNED_ARCHIVE_TAIL", WERR_LOG_PINNED_ARCHIVE_TAIL }, + { "WERR_LOG_RECORD_NONEXISTENT", WERR_LOG_RECORD_NONEXISTENT }, + { "WERR_LOG_RECORDS_RESERVED_INVALID", WERR_LOG_RECORDS_RESERVED_INVALID }, + { "WERR_LOG_SPACE_RESERVED_INVALID", WERR_LOG_SPACE_RESERVED_INVALID }, + { "WERR_LOG_TAIL_INVALID", WERR_LOG_TAIL_INVALID }, + { "WERR_LOG_FULL", WERR_LOG_FULL }, + { "WERR_COULD_NOT_RESIZE_LOG", WERR_COULD_NOT_RESIZE_LOG }, + { "WERR_LOG_MULTIPLEXED", WERR_LOG_MULTIPLEXED }, + { "WERR_LOG_DEDICATED", WERR_LOG_DEDICATED }, + { "WERR_LOG_ARCHIVE_NOT_IN_PROGRESS", WERR_LOG_ARCHIVE_NOT_IN_PROGRESS }, + { "WERR_LOG_ARCHIVE_IN_PROGRESS", WERR_LOG_ARCHIVE_IN_PROGRESS }, + { "WERR_LOG_EPHEMERAL", WERR_LOG_EPHEMERAL }, + { "WERR_LOG_NOT_ENOUGH_CONTAINERS", WERR_LOG_NOT_ENOUGH_CONTAINERS }, + { "WERR_LOG_CLIENT_ALREADY_REGISTERED", WERR_LOG_CLIENT_ALREADY_REGISTERED }, + { "WERR_LOG_CLIENT_NOT_REGISTERED", WERR_LOG_CLIENT_NOT_REGISTERED }, + { "WERR_LOG_FULL_HANDLER_IN_PROGRESS", WERR_LOG_FULL_HANDLER_IN_PROGRESS }, + { "WERR_LOG_CONTAINER_READ_FAILED", WERR_LOG_CONTAINER_READ_FAILED }, + { "WERR_LOG_CONTAINER_WRITE_FAILED", WERR_LOG_CONTAINER_WRITE_FAILED }, + { "WERR_LOG_CONTAINER_OPEN_FAILED", WERR_LOG_CONTAINER_OPEN_FAILED }, + { "WERR_LOG_CONTAINER_STATE_INVALID", WERR_LOG_CONTAINER_STATE_INVALID }, + { "WERR_LOG_STATE_INVALID", WERR_LOG_STATE_INVALID }, + { "WERR_LOG_PINNED", WERR_LOG_PINNED }, + { "WERR_LOG_METADATA_FLUSH_FAILED", WERR_LOG_METADATA_FLUSH_FAILED }, + { "WERR_LOG_INCONSISTENT_SECURITY", WERR_LOG_INCONSISTENT_SECURITY }, + { "WERR_LOG_APPENDED_FLUSH_FAILED", WERR_LOG_APPENDED_FLUSH_FAILED }, + { "WERR_LOG_PINNED_RESERVATION", WERR_LOG_PINNED_RESERVATION }, + { "WERR_INVALID_TRANSACTION", WERR_INVALID_TRANSACTION }, + { "WERR_TRANSACTION_NOT_ACTIVE", WERR_TRANSACTION_NOT_ACTIVE }, + { "WERR_TRANSACTION_REQUEST_NOT_VALID", WERR_TRANSACTION_REQUEST_NOT_VALID }, + { "WERR_TRANSACTION_NOT_REQUESTED", WERR_TRANSACTION_NOT_REQUESTED }, + { "WERR_TRANSACTION_ALREADY_ABORTED", WERR_TRANSACTION_ALREADY_ABORTED }, + { "WERR_TRANSACTION_ALREADY_COMMITTED", WERR_TRANSACTION_ALREADY_COMMITTED }, + { "WERR_TM_INITIALIZATION_FAILED", WERR_TM_INITIALIZATION_FAILED }, + { "WERR_RESOURCEMANAGER_READ_ONLY", WERR_RESOURCEMANAGER_READ_ONLY }, + { "WERR_TRANSACTION_NOT_JOINED", WERR_TRANSACTION_NOT_JOINED }, + { "WERR_TRANSACTION_SUPERIOR_EXISTS", WERR_TRANSACTION_SUPERIOR_EXISTS }, + { "WERR_CRM_PROTOCOL_ALREADY_EXISTS", WERR_CRM_PROTOCOL_ALREADY_EXISTS }, + { "WERR_TRANSACTION_PROPAGATION_FAILED", WERR_TRANSACTION_PROPAGATION_FAILED }, + { "WERR_CRM_PROTOCOL_NOT_FOUND", WERR_CRM_PROTOCOL_NOT_FOUND }, + { "WERR_TRANSACTION_INVALID_MARSHALL_BUFFER", WERR_TRANSACTION_INVALID_MARSHALL_BUFFER }, + { "WERR_CURRENT_TRANSACTION_NOT_VALID", WERR_CURRENT_TRANSACTION_NOT_VALID }, + { "WERR_TRANSACTION_NOT_FOUND", WERR_TRANSACTION_NOT_FOUND }, + { "WERR_RESOURCEMANAGER_NOT_FOUND", WERR_RESOURCEMANAGER_NOT_FOUND }, + { "WERR_ENLISTMENT_NOT_FOUND", WERR_ENLISTMENT_NOT_FOUND }, + { "WERR_TRANSACTIONMANAGER_NOT_FOUND", WERR_TRANSACTIONMANAGER_NOT_FOUND }, + { "WERR_TRANSACTIONMANAGER_NOT_ONLINE", WERR_TRANSACTIONMANAGER_NOT_ONLINE }, + { "WERR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION", WERR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION }, + { "WERR_TRANSACTIONAL_CONFLICT", WERR_TRANSACTIONAL_CONFLICT }, + { "WERR_RM_NOT_ACTIVE", WERR_RM_NOT_ACTIVE }, + { "WERR_RM_METADATA_CORRUPT", WERR_RM_METADATA_CORRUPT }, + { "WERR_DIRECTORY_NOT_RM", WERR_DIRECTORY_NOT_RM }, + { "WERR_TRANSACTIONS_UNSUPPORTED_REMOTE", WERR_TRANSACTIONS_UNSUPPORTED_REMOTE }, + { "WERR_LOG_RESIZE_INVALID_SIZE", WERR_LOG_RESIZE_INVALID_SIZE }, + { "WERR_OBJECT_NO_LONGER_EXISTS", WERR_OBJECT_NO_LONGER_EXISTS }, + { "WERR_STREAM_MINIVERSION_NOT_FOUND", WERR_STREAM_MINIVERSION_NOT_FOUND }, + { "WERR_STREAM_MINIVERSION_NOT_VALID", WERR_STREAM_MINIVERSION_NOT_VALID }, + { "WERR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION", WERR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION }, + { "WERR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT", WERR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT }, + { "WERR_CANT_CREATE_MORE_STREAM_MINIVERSIONS", WERR_CANT_CREATE_MORE_STREAM_MINIVERSIONS }, + { "WERR_REMOTE_FILE_VERSION_MISMATCH", WERR_REMOTE_FILE_VERSION_MISMATCH }, + { "WERR_HANDLE_NO_LONGER_VALID", WERR_HANDLE_NO_LONGER_VALID }, + { "WERR_NO_TXF_METADATA", WERR_NO_TXF_METADATA }, + { "WERR_LOG_CORRUPTION_DETECTED", WERR_LOG_CORRUPTION_DETECTED }, + { "WERR_CANT_RECOVER_WITH_HANDLE_OPEN", WERR_CANT_RECOVER_WITH_HANDLE_OPEN }, + { "WERR_RM_DISCONNECTED", WERR_RM_DISCONNECTED }, + { "WERR_ENLISTMENT_NOT_SUPERIOR", WERR_ENLISTMENT_NOT_SUPERIOR }, + { "WERR_RECOVERY_NOT_NEEDED", WERR_RECOVERY_NOT_NEEDED }, + { "WERR_RM_ALREADY_STARTED", WERR_RM_ALREADY_STARTED }, + { "WERR_FILE_IDENTITY_NOT_PERSISTENT", WERR_FILE_IDENTITY_NOT_PERSISTENT }, + { "WERR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY", WERR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY }, + { "WERR_CANT_CROSS_RM_BOUNDARY", WERR_CANT_CROSS_RM_BOUNDARY }, + { "WERR_TXF_DIR_NOT_EMPTY", WERR_TXF_DIR_NOT_EMPTY }, + { "WERR_INDOUBT_TRANSACTIONS_EXIST", WERR_INDOUBT_TRANSACTIONS_EXIST }, + { "WERR_TM_VOLATILE", WERR_TM_VOLATILE }, + { "WERR_ROLLBACK_TIMER_EXPIRED", WERR_ROLLBACK_TIMER_EXPIRED }, + { "WERR_TXF_ATTRIBUTE_CORRUPT", WERR_TXF_ATTRIBUTE_CORRUPT }, + { "WERR_EFS_NOT_ALLOWED_IN_TRANSACTION", WERR_EFS_NOT_ALLOWED_IN_TRANSACTION }, + { "WERR_TRANSACTIONAL_OPEN_NOT_ALLOWED", WERR_TRANSACTIONAL_OPEN_NOT_ALLOWED }, + { "WERR_LOG_GROWTH_FAILED", WERR_LOG_GROWTH_FAILED }, + { "WERR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE", WERR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE }, + { "WERR_TXF_METADATA_ALREADY_PRESENT", WERR_TXF_METADATA_ALREADY_PRESENT }, + { "WERR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET", WERR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET }, + { "WERR_TRANSACTION_REQUIRED_PROMOTION", WERR_TRANSACTION_REQUIRED_PROMOTION }, + { "WERR_CANNOT_EXECUTE_FILE_IN_TRANSACTION", WERR_CANNOT_EXECUTE_FILE_IN_TRANSACTION }, + { "WERR_TRANSACTIONS_NOT_FROZEN", WERR_TRANSACTIONS_NOT_FROZEN }, + { "WERR_TRANSACTION_FREEZE_IN_PROGRESS", WERR_TRANSACTION_FREEZE_IN_PROGRESS }, + { "WERR_NOT_SNAPSHOT_VOLUME", WERR_NOT_SNAPSHOT_VOLUME }, + { "WERR_NO_SAVEPOINT_WITH_OPEN_FILES", WERR_NO_SAVEPOINT_WITH_OPEN_FILES }, + { "WERR_DATA_LOST_REPAIR", WERR_DATA_LOST_REPAIR }, + { "WERR_SPARSE_NOT_ALLOWED_IN_TRANSACTION", WERR_SPARSE_NOT_ALLOWED_IN_TRANSACTION }, + { "WERR_TM_IDENTITY_MISMATCH", WERR_TM_IDENTITY_MISMATCH }, + { "WERR_FLOATED_SECTION", WERR_FLOATED_SECTION }, + { "WERR_CANNOT_ACCEPT_TRANSACTED_WORK", WERR_CANNOT_ACCEPT_TRANSACTED_WORK }, + { "WERR_CANNOT_ABORT_TRANSACTIONS", WERR_CANNOT_ABORT_TRANSACTIONS }, + { "WERR_CTX_WINSTATION_NAME_INVALID", WERR_CTX_WINSTATION_NAME_INVALID }, + { "WERR_CTX_INVALID_PD", WERR_CTX_INVALID_PD }, + { "WERR_CTX_PD_NOT_FOUND", WERR_CTX_PD_NOT_FOUND }, + { "WERR_CTX_WD_NOT_FOUND", WERR_CTX_WD_NOT_FOUND }, + { "WERR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY", WERR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY }, + { "WERR_CTX_SERVICE_NAME_COLLISION", WERR_CTX_SERVICE_NAME_COLLISION }, + { "WERR_CTX_CLOSE_PENDING", WERR_CTX_CLOSE_PENDING }, + { "WERR_CTX_NO_OUTBUF", WERR_CTX_NO_OUTBUF }, + { "WERR_CTX_MODEM_INF_NOT_FOUND", WERR_CTX_MODEM_INF_NOT_FOUND }, + { "WERR_CTX_INVALID_MODEMNAME", WERR_CTX_INVALID_MODEMNAME }, + { "WERR_CTX_MODEM_RESPONSE_ERROR", WERR_CTX_MODEM_RESPONSE_ERROR }, + { "WERR_CTX_MODEM_RESPONSE_TIMEOUT", WERR_CTX_MODEM_RESPONSE_TIMEOUT }, + { "WERR_CTX_MODEM_RESPONSE_NO_CARRIER", WERR_CTX_MODEM_RESPONSE_NO_CARRIER }, + { "WERR_CTX_MODEM_RESPONSE_NO_DIALTONE", WERR_CTX_MODEM_RESPONSE_NO_DIALTONE }, + { "WERR_CTX_MODEM_RESPONSE_BUSY", WERR_CTX_MODEM_RESPONSE_BUSY }, + { "WERR_CTX_MODEM_RESPONSE_VOICE", WERR_CTX_MODEM_RESPONSE_VOICE }, + { "WERR_CTX_TD_ERROR", WERR_CTX_TD_ERROR }, + { "WERR_CTX_WINSTATION_NOT_FOUND", WERR_CTX_WINSTATION_NOT_FOUND }, + { "WERR_CTX_WINSTATION_ALREADY_EXISTS", WERR_CTX_WINSTATION_ALREADY_EXISTS }, + { "WERR_CTX_WINSTATION_BUSY", WERR_CTX_WINSTATION_BUSY }, + { "WERR_CTX_BAD_VIDEO_MODE", WERR_CTX_BAD_VIDEO_MODE }, + { "WERR_CTX_GRAPHICS_INVALID", WERR_CTX_GRAPHICS_INVALID }, + { "WERR_CTX_LOGON_DISABLED", WERR_CTX_LOGON_DISABLED }, + { "WERR_CTX_NOT_CONSOLE", WERR_CTX_NOT_CONSOLE }, + { "WERR_CTX_CLIENT_QUERY_TIMEOUT", WERR_CTX_CLIENT_QUERY_TIMEOUT }, + { "WERR_CTX_CONSOLE_DISCONNECT", WERR_CTX_CONSOLE_DISCONNECT }, + { "WERR_CTX_CONSOLE_CONNECT", WERR_CTX_CONSOLE_CONNECT }, + { "WERR_CTX_SHADOW_DENIED", WERR_CTX_SHADOW_DENIED }, + { "WERR_CTX_WINSTATION_ACCESS_DENIED", WERR_CTX_WINSTATION_ACCESS_DENIED }, + { "WERR_CTX_INVALID_WD", WERR_CTX_INVALID_WD }, + { "WERR_CTX_SHADOW_INVALID", WERR_CTX_SHADOW_INVALID }, + { "WERR_CTX_SHADOW_DISABLED", WERR_CTX_SHADOW_DISABLED }, + { "WERR_CTX_CLIENT_LICENSE_IN_USE", WERR_CTX_CLIENT_LICENSE_IN_USE }, + { "WERR_CTX_CLIENT_LICENSE_NOT_SET", WERR_CTX_CLIENT_LICENSE_NOT_SET }, + { "WERR_CTX_LICENSE_NOT_AVAILABLE", WERR_CTX_LICENSE_NOT_AVAILABLE }, + { "WERR_CTX_LICENSE_CLIENT_INVALID", WERR_CTX_LICENSE_CLIENT_INVALID }, + { "WERR_CTX_LICENSE_EXPIRED", WERR_CTX_LICENSE_EXPIRED }, + { "WERR_CTX_SHADOW_NOT_RUNNING", WERR_CTX_SHADOW_NOT_RUNNING }, + { "WERR_CTX_SHADOW_ENDED_BY_MODE_CHANGE", WERR_CTX_SHADOW_ENDED_BY_MODE_CHANGE }, + { "WERR_ACTIVATION_COUNT_EXCEEDED", WERR_ACTIVATION_COUNT_EXCEEDED }, + { "WERR_CTX_WINSTATIONS_DISABLED", WERR_CTX_WINSTATIONS_DISABLED }, + { "WERR_CTX_ENCRYPTION_LEVEL_REQUIRED", WERR_CTX_ENCRYPTION_LEVEL_REQUIRED }, + { "WERR_CTX_SESSION_IN_USE", WERR_CTX_SESSION_IN_USE }, + { "WERR_CTX_NO_FORCE_LOGOFF", WERR_CTX_NO_FORCE_LOGOFF }, + { "WERR_CTX_ACCOUNT_RESTRICTION", WERR_CTX_ACCOUNT_RESTRICTION }, + { "WERR_RDP_PROTOCOL_ERROR", WERR_RDP_PROTOCOL_ERROR }, + { "WERR_CTX_CDM_CONNECT", WERR_CTX_CDM_CONNECT }, + { "WERR_CTX_CDM_DISCONNECT", WERR_CTX_CDM_DISCONNECT }, + { "WERR_CTX_SECURITY_LAYER_ERROR", WERR_CTX_SECURITY_LAYER_ERROR }, + { "WERR_TS_INCOMPATIBLE_SESSIONS", WERR_TS_INCOMPATIBLE_SESSIONS }, + { "WERR_FRS_ERR_INVALID_API_SEQUENCE", WERR_FRS_ERR_INVALID_API_SEQUENCE }, + { "WERR_FRS_ERR_STARTING_SERVICE", WERR_FRS_ERR_STARTING_SERVICE }, + { "WERR_FRS_ERR_STOPPING_SERVICE", WERR_FRS_ERR_STOPPING_SERVICE }, + { "WERR_FRS_ERR_INTERNAL_API", WERR_FRS_ERR_INTERNAL_API }, + { "WERR_FRS_ERR_INTERNAL", WERR_FRS_ERR_INTERNAL }, + { "WERR_FRS_ERR_SERVICE_COMM", WERR_FRS_ERR_SERVICE_COMM }, + { "WERR_FRS_ERR_INSUFFICIENT_PRIV", WERR_FRS_ERR_INSUFFICIENT_PRIV }, + { "WERR_FRS_ERR_AUTHENTICATION", WERR_FRS_ERR_AUTHENTICATION }, + { "WERR_FRS_ERR_PARENT_INSUFFICIENT_PRIV", WERR_FRS_ERR_PARENT_INSUFFICIENT_PRIV }, + { "WERR_FRS_ERR_PARENT_AUTHENTICATION", WERR_FRS_ERR_PARENT_AUTHENTICATION }, + { "WERR_FRS_ERR_CHILD_TO_PARENT_COMM", WERR_FRS_ERR_CHILD_TO_PARENT_COMM }, + { "WERR_FRS_ERR_PARENT_TO_CHILD_COMM", WERR_FRS_ERR_PARENT_TO_CHILD_COMM }, + { "WERR_FRS_ERR_SYSVOL_POPULATE", WERR_FRS_ERR_SYSVOL_POPULATE }, + { "WERR_FRS_ERR_SYSVOL_POPULATE_TIMEOUT", WERR_FRS_ERR_SYSVOL_POPULATE_TIMEOUT }, + { "WERR_FRS_ERR_SYSVOL_IS_BUSY", WERR_FRS_ERR_SYSVOL_IS_BUSY }, + { "WERR_FRS_ERR_SYSVOL_DEMOTE", WERR_FRS_ERR_SYSVOL_DEMOTE }, + { "WERR_FRS_ERR_INVALID_SERVICE_PARAMETER", WERR_FRS_ERR_INVALID_SERVICE_PARAMETER }, + { "WERR_DS_NOT_INSTALLED", WERR_DS_NOT_INSTALLED }, + { "WERR_DS_MEMBERSHIP_EVALUATED_LOCALLY", WERR_DS_MEMBERSHIP_EVALUATED_LOCALLY }, + { "WERR_DS_INVALID_ATTRIBUTE_YNTAX", WERR_DS_INVALID_ATTRIBUTE_YNTAX }, + { "WERR_DS_NO_RIDS_ALLOCATED", WERR_DS_NO_RIDS_ALLOCATED }, + { "WERR_DS_NO_MORE_RIDS", WERR_DS_NO_MORE_RIDS }, + { "WERR_DS_INCORRECT_ROLE_OWNER", WERR_DS_INCORRECT_ROLE_OWNER }, + { "WERR_DS_RIDMGR_INIT_ERROR", WERR_DS_RIDMGR_INIT_ERROR }, + { "WERR_DS_CROSS_DOM_MOVE_ERROR", WERR_DS_CROSS_DOM_MOVE_ERROR }, + { "WERR_DS_GC_NOT_AVAILABLE", WERR_DS_GC_NOT_AVAILABLE }, + { "WERR_SHARED_POLICY", WERR_SHARED_POLICY }, + { "WERR_POLICY_OBJECT_NOT_FOUND", WERR_POLICY_OBJECT_NOT_FOUND }, + { "WERR_POLICY_ONLY_IN_DS", WERR_POLICY_ONLY_IN_DS }, + { "WERR_PROMOTION_ACTIVE", WERR_PROMOTION_ACTIVE }, + { "WERR_NO_PROMOTION_ACTIVE", WERR_NO_PROMOTION_ACTIVE }, + { "WERR_DS_SIZELIMIT_EXCEEDED", WERR_DS_SIZELIMIT_EXCEEDED }, + { "WERR_DS_AUTH_UNKNOWN", WERR_DS_AUTH_UNKNOWN }, + { "WERR_DS_IS_LEAF", WERR_DS_IS_LEAF }, + { "WERR_DS_OBJECT_RESULTS_TOO_LARGE", WERR_DS_OBJECT_RESULTS_TOO_LARGE }, + { "WERR_DS_SERVER_DOWN", WERR_DS_SERVER_DOWN }, + { "WERR_DS_LOCAL_ERROR", WERR_DS_LOCAL_ERROR }, + { "WERR_DS_ENCODING_ERROR", WERR_DS_ENCODING_ERROR }, + { "WERR_DS_DECODING_ERROR", WERR_DS_DECODING_ERROR }, + { "WERR_DS_FILTER_UNKNOWN", WERR_DS_FILTER_UNKNOWN }, + { "WERR_DS_PARAM_ERROR", WERR_DS_PARAM_ERROR }, + { "WERR_DS_NOT_SUPPORTED", WERR_DS_NOT_SUPPORTED }, + { "WERR_DS_NO_RESULTS_RETURNED", WERR_DS_NO_RESULTS_RETURNED }, + { "WERR_DS_CONTROL_NOT_FOUND", WERR_DS_CONTROL_NOT_FOUND }, + { "WERR_DS_CLIENT_LOOP", WERR_DS_CLIENT_LOOP }, + { "WERR_DS_REFERRAL_LIMIT_EXCEEDED", WERR_DS_REFERRAL_LIMIT_EXCEEDED }, + { "WERR_DS_SORT_CONTROL_MISSING", WERR_DS_SORT_CONTROL_MISSING }, + { "WERR_DS_OFFSET_RANGE_ERROR", WERR_DS_OFFSET_RANGE_ERROR }, + { "WERR_DS_ROOT_MUST_BE_NC", WERR_DS_ROOT_MUST_BE_NC }, + { "WERR_DS_ADD_REPLICA_INHIBITED", WERR_DS_ADD_REPLICA_INHIBITED }, + { "WERR_DS_ATT_NOT_DEF_IN_SCHEMA", WERR_DS_ATT_NOT_DEF_IN_SCHEMA }, + { "WERR_DS_MAX_OBJ_SIZE_EXCEEDED", WERR_DS_MAX_OBJ_SIZE_EXCEEDED }, + { "WERR_DS_NO_RDN_DEFINED_IN_SCHEMA", WERR_DS_NO_RDN_DEFINED_IN_SCHEMA }, + { "WERR_DS_RDN_DOESNT_MATCH_SCHEMA", WERR_DS_RDN_DOESNT_MATCH_SCHEMA }, + { "WERR_DS_NO_REQUESTED_ATTS_FOUND", WERR_DS_NO_REQUESTED_ATTS_FOUND }, + { "WERR_DS_USER_BUFFER_TO_SMALL", WERR_DS_USER_BUFFER_TO_SMALL }, + { "WERR_DS_ATT_IS_NOT_ON_OBJ", WERR_DS_ATT_IS_NOT_ON_OBJ }, + { "WERR_DS_ILLEGAL_MOD_OPERATION", WERR_DS_ILLEGAL_MOD_OPERATION }, + { "WERR_DS_OBJ_TOO_LARGE", WERR_DS_OBJ_TOO_LARGE }, + { "WERR_DS_BAD_INSTANCE_TYPE", WERR_DS_BAD_INSTANCE_TYPE }, + { "WERR_DS_MASTERDSA_REQUIRED", WERR_DS_MASTERDSA_REQUIRED }, + { "WERR_DS_OBJECT_CLASS_REQUIRED", WERR_DS_OBJECT_CLASS_REQUIRED }, + { "WERR_DS_MISSING_REQUIRED_ATT", WERR_DS_MISSING_REQUIRED_ATT }, + { "WERR_DS_ATT_NOT_DEF_FOR_CLASS", WERR_DS_ATT_NOT_DEF_FOR_CLASS }, + { "WERR_DS_ATT_ALREADY_EXISTS", WERR_DS_ATT_ALREADY_EXISTS }, + { "WERR_DS_CANT_ADD_ATT_VALUES", WERR_DS_CANT_ADD_ATT_VALUES }, + { "WERR_DS_RANGE_CONSTRAINT", WERR_DS_RANGE_CONSTRAINT }, + { "WERR_DS_ATT_VAL_ALREADY_EXISTS", WERR_DS_ATT_VAL_ALREADY_EXISTS }, + { "WERR_DS_CANT_REM_MISSING_ATT", WERR_DS_CANT_REM_MISSING_ATT }, + { "WERR_DS_CANT_REM_MISSING_ATT_VAL", WERR_DS_CANT_REM_MISSING_ATT_VAL }, + { "WERR_DS_ROOT_CANT_BE_SUBREF", WERR_DS_ROOT_CANT_BE_SUBREF }, + { "WERR_DS_NO_CHAINING", WERR_DS_NO_CHAINING }, + { "WERR_DS_NO_CHAINED_EVAL", WERR_DS_NO_CHAINED_EVAL }, + { "WERR_DS_NO_PARENT_OBJECT", WERR_DS_NO_PARENT_OBJECT }, + { "WERR_DS_PARENT_IS_AN_ALIAS", WERR_DS_PARENT_IS_AN_ALIAS }, + { "WERR_DS_CANT_MIX_MASTER_AND_REPS", WERR_DS_CANT_MIX_MASTER_AND_REPS }, + { "WERR_DS_CHILDREN_EXIST", WERR_DS_CHILDREN_EXIST }, + { "WERR_DS_ALIASED_OBJ_MISSING", WERR_DS_ALIASED_OBJ_MISSING }, + { "WERR_DS_BAD_NAME_SYNTAX", WERR_DS_BAD_NAME_SYNTAX }, + { "WERR_DS_ALIAS_POINTS_TO_ALIAS", WERR_DS_ALIAS_POINTS_TO_ALIAS }, + { "WERR_DS_CANT_DEREF_ALIAS", WERR_DS_CANT_DEREF_ALIAS }, + { "WERR_DS_OUT_OF_SCOPE", WERR_DS_OUT_OF_SCOPE }, + { "WERR_DS_OBJECT_BEING_REMOVED", WERR_DS_OBJECT_BEING_REMOVED }, + { "WERR_DS_CANT_DELETE_DSA_OBJ", WERR_DS_CANT_DELETE_DSA_OBJ }, + { "WERR_DS_DSA_MUST_BE_INT_MASTER", WERR_DS_DSA_MUST_BE_INT_MASTER }, + { "WERR_DS_CLASS_NOT_DSA", WERR_DS_CLASS_NOT_DSA }, + { "WERR_DS_ILLEGAL_SUPERIOR", WERR_DS_ILLEGAL_SUPERIOR }, + { "WERR_DS_ATTRIBUTE_OWNED_BY_SAM", WERR_DS_ATTRIBUTE_OWNED_BY_SAM }, + { "WERR_DS_NAME_TOO_MANY_PARTS", WERR_DS_NAME_TOO_MANY_PARTS }, + { "WERR_DS_NAME_TOO_LONG", WERR_DS_NAME_TOO_LONG }, + { "WERR_DS_NAME_VALUE_TOO_LONG", WERR_DS_NAME_VALUE_TOO_LONG }, + { "WERR_DS_NAME_UNPARSEABLE", WERR_DS_NAME_UNPARSEABLE }, + { "WERR_DS_NAME_TYPE_UNKNOWN", WERR_DS_NAME_TYPE_UNKNOWN }, + { "WERR_DS_NOT_AN_OBJECT", WERR_DS_NOT_AN_OBJECT }, + { "WERR_DS_SEC_DESC_TOO_SHORT", WERR_DS_SEC_DESC_TOO_SHORT }, + { "WERR_DS_SEC_DESC_INVALID", WERR_DS_SEC_DESC_INVALID }, + { "WERR_DS_NO_DELETED_NAME", WERR_DS_NO_DELETED_NAME }, + { "WERR_DS_SUBREF_MUST_HAVE_PARENT", WERR_DS_SUBREF_MUST_HAVE_PARENT }, + { "WERR_DS_NCNAME_MUST_BE_NC", WERR_DS_NCNAME_MUST_BE_NC }, + { "WERR_DS_CANT_ADD_SYSTEM_ONLY", WERR_DS_CANT_ADD_SYSTEM_ONLY }, + { "WERR_DS_CLASS_MUST_BE_CONCRETE", WERR_DS_CLASS_MUST_BE_CONCRETE }, + { "WERR_DS_INVALID_DMD", WERR_DS_INVALID_DMD }, + { "WERR_DS_OBJ_GUID_EXISTS", WERR_DS_OBJ_GUID_EXISTS }, + { "WERR_DS_NOT_ON_BACKLINK", WERR_DS_NOT_ON_BACKLINK }, + { "WERR_DS_NO_CROSSREF_FOR_NC", WERR_DS_NO_CROSSREF_FOR_NC }, + { "WERR_DS_SHUTTING_DOWN", WERR_DS_SHUTTING_DOWN }, + { "WERR_DS_UNKNOWN_OPERATION", WERR_DS_UNKNOWN_OPERATION }, + { "WERR_DS_INVALID_ROLE_OWNER", WERR_DS_INVALID_ROLE_OWNER }, + { "WERR_DS_COULDNT_CONTACT_FSMO", WERR_DS_COULDNT_CONTACT_FSMO }, + { "WERR_DS_CROSS_NC_DN_RENAME", WERR_DS_CROSS_NC_DN_RENAME }, + { "WERR_DS_CANT_MOD_SYSTEM_ONLY", WERR_DS_CANT_MOD_SYSTEM_ONLY }, + { "WERR_DS_REPLICATOR_ONLY", WERR_DS_REPLICATOR_ONLY }, + { "WERR_DS_OBJ_CLASS_NOT_DEFINED", WERR_DS_OBJ_CLASS_NOT_DEFINED }, + { "WERR_DS_OBJ_CLASS_NOT_SUBCLASS", WERR_DS_OBJ_CLASS_NOT_SUBCLASS }, + { "WERR_DS_NAME_REFERENCE_INVALID", WERR_DS_NAME_REFERENCE_INVALID }, + { "WERR_DS_CROSS_REF_EXISTS", WERR_DS_CROSS_REF_EXISTS }, + { "WERR_DS_CANT_DEL_MASTER_CROSSREF", WERR_DS_CANT_DEL_MASTER_CROSSREF }, + { "WERR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD", WERR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD }, + { "WERR_DS_NOTIFY_FILTER_TOO_COMPLEX", WERR_DS_NOTIFY_FILTER_TOO_COMPLEX }, + { "WERR_DS_DUP_RDN", WERR_DS_DUP_RDN }, + { "WERR_DS_DUP_OID", WERR_DS_DUP_OID }, + { "WERR_DS_DUP_MAPI_ID", WERR_DS_DUP_MAPI_ID }, + { "WERR_DS_DUP_SCHEMA_ID_GUID", WERR_DS_DUP_SCHEMA_ID_GUID }, + { "WERR_DS_DUP_LDAP_DISPLAY_NAME", WERR_DS_DUP_LDAP_DISPLAY_NAME }, + { "WERR_DS_SEMANTIC_ATT_TEST", WERR_DS_SEMANTIC_ATT_TEST }, + { "WERR_DS_SYNTAX_MISMATCH", WERR_DS_SYNTAX_MISMATCH }, + { "WERR_DS_EXISTS_IN_MUST_HAVE", WERR_DS_EXISTS_IN_MUST_HAVE }, + { "WERR_DS_EXISTS_IN_MAY_HAVE", WERR_DS_EXISTS_IN_MAY_HAVE }, + { "WERR_DS_NONEXISTENT_MAY_HAVE", WERR_DS_NONEXISTENT_MAY_HAVE }, + { "WERR_DS_NONEXISTENT_MUST_HAVE", WERR_DS_NONEXISTENT_MUST_HAVE }, + { "WERR_DS_AUX_CLS_TEST_FAIL", WERR_DS_AUX_CLS_TEST_FAIL }, + { "WERR_DS_NONEXISTENT_POSS_SUP", WERR_DS_NONEXISTENT_POSS_SUP }, + { "WERR_DS_SUB_CLS_TEST_FAIL", WERR_DS_SUB_CLS_TEST_FAIL }, + { "WERR_DS_BAD_RDN_ATT_ID_SYNTAX", WERR_DS_BAD_RDN_ATT_ID_SYNTAX }, + { "WERR_DS_EXISTS_IN_AUX_CLS", WERR_DS_EXISTS_IN_AUX_CLS }, + { "WERR_DS_EXISTS_IN_SUB_CLS", WERR_DS_EXISTS_IN_SUB_CLS }, + { "WERR_DS_EXISTS_IN_POSS_SUP", WERR_DS_EXISTS_IN_POSS_SUP }, + { "WERR_DS_RECALCSCHEMA_FAILED", WERR_DS_RECALCSCHEMA_FAILED }, + { "WERR_DS_TREE_DELETE_NOT_FINISHED", WERR_DS_TREE_DELETE_NOT_FINISHED }, + { "WERR_DS_CANT_DELETE", WERR_DS_CANT_DELETE }, + { "WERR_DS_ATT_SCHEMA_REQ_ID", WERR_DS_ATT_SCHEMA_REQ_ID }, + { "WERR_DS_BAD_ATT_SCHEMA_SYNTAX", WERR_DS_BAD_ATT_SCHEMA_SYNTAX }, + { "WERR_DS_CANT_CACHE_ATT", WERR_DS_CANT_CACHE_ATT }, + { "WERR_DS_CANT_CACHE_CLASS", WERR_DS_CANT_CACHE_CLASS }, + { "WERR_DS_CANT_REMOVE_ATT_CACHE", WERR_DS_CANT_REMOVE_ATT_CACHE }, + { "WERR_DS_CANT_REMOVE_CLASS_CACHE", WERR_DS_CANT_REMOVE_CLASS_CACHE }, + { "WERR_DS_CANT_RETRIEVE_DN", WERR_DS_CANT_RETRIEVE_DN }, + { "WERR_DS_MISSING_SUPREF", WERR_DS_MISSING_SUPREF }, + { "WERR_DS_CANT_RETRIEVE_INSTANCE", WERR_DS_CANT_RETRIEVE_INSTANCE }, + { "WERR_DS_CODE_INCONSISTENCY", WERR_DS_CODE_INCONSISTENCY }, + { "WERR_DS_DATABASE_ERROR", WERR_DS_DATABASE_ERROR }, + { "WERR_DS_MISSING_EXPECTED_ATT", WERR_DS_MISSING_EXPECTED_ATT }, + { "WERR_DS_NCNAME_MISSING_CR_REF", WERR_DS_NCNAME_MISSING_CR_REF }, + { "WERR_DS_SECURITY_CHECKING_ERROR", WERR_DS_SECURITY_CHECKING_ERROR }, + { "WERR_DS_GCVERIFY_ERROR", WERR_DS_GCVERIFY_ERROR }, + { "WERR_DS_CANT_FIND_DSA_OBJ", WERR_DS_CANT_FIND_DSA_OBJ }, + { "WERR_DS_CANT_FIND_EXPECTED_NC", WERR_DS_CANT_FIND_EXPECTED_NC }, + { "WERR_DS_CANT_FIND_NC_IN_CACHE", WERR_DS_CANT_FIND_NC_IN_CACHE }, + { "WERR_DS_CANT_RETRIEVE_CHILD", WERR_DS_CANT_RETRIEVE_CHILD }, + { "WERR_DS_SECURITY_ILLEGAL_MODIFY", WERR_DS_SECURITY_ILLEGAL_MODIFY }, + { "WERR_DS_CANT_REPLACE_HIDDEN_REC", WERR_DS_CANT_REPLACE_HIDDEN_REC }, + { "WERR_DS_BAD_HIERARCHY_FILE", WERR_DS_BAD_HIERARCHY_FILE }, + { "WERR_DS_BUILD_HIERARCHY_TABLE_FAILED", WERR_DS_BUILD_HIERARCHY_TABLE_FAILED }, + { "WERR_DS_CONFIG_PARAM_MISSING", WERR_DS_CONFIG_PARAM_MISSING }, + { "WERR_DS_COUNTING_AB_INDICES_FAILED", WERR_DS_COUNTING_AB_INDICES_FAILED }, + { "WERR_DS_HIERARCHY_TABLE_MALLOC_FAILED", WERR_DS_HIERARCHY_TABLE_MALLOC_FAILED }, + { "WERR_DS_INTERNAL_FAILURE", WERR_DS_INTERNAL_FAILURE }, + { "WERR_DS_UNKNOWN_ERROR", WERR_DS_UNKNOWN_ERROR }, + { "WERR_DS_ROOT_REQUIRES_CLASS_TOP", WERR_DS_ROOT_REQUIRES_CLASS_TOP }, + { "WERR_DS_REFUSING_FSMO_ROLES", WERR_DS_REFUSING_FSMO_ROLES }, + { "WERR_DS_MISSING_FSMO_SETTINGS", WERR_DS_MISSING_FSMO_SETTINGS }, + { "WERR_DS_UNABLE_TO_SURRENDER_ROLES", WERR_DS_UNABLE_TO_SURRENDER_ROLES }, + { "WERR_DS_DRA_GENERIC", WERR_DS_DRA_GENERIC }, + { "WERR_DS_DRA_BUSY", WERR_DS_DRA_BUSY }, + { "WERR_DS_DRA_DN_EXISTS", WERR_DS_DRA_DN_EXISTS }, + { "WERR_DS_DRA_INCONSISTENT_DIT", WERR_DS_DRA_INCONSISTENT_DIT }, + { "WERR_DS_DRA_CONNECTION_FAILED", WERR_DS_DRA_CONNECTION_FAILED }, + { "WERR_DS_DRA_BAD_INSTANCE_TYPE", WERR_DS_DRA_BAD_INSTANCE_TYPE }, + { "WERR_DS_DRA_MAIL_PROBLEM", WERR_DS_DRA_MAIL_PROBLEM }, + { "WERR_DS_DRA_REF_ALREADY_EXISTS", WERR_DS_DRA_REF_ALREADY_EXISTS }, + { "WERR_DS_DRA_REF_NOT_FOUND", WERR_DS_DRA_REF_NOT_FOUND }, + { "WERR_DS_DRA_OBJ_IS_REP_SOURCE", WERR_DS_DRA_OBJ_IS_REP_SOURCE }, + { "WERR_DS_DRA_NOT_SUPPORTED", WERR_DS_DRA_NOT_SUPPORTED }, + { "WERR_DS_DRA_RPC_CANCELLED", WERR_DS_DRA_RPC_CANCELLED }, + { "WERR_DS_DRA_SINK_DISABLED", WERR_DS_DRA_SINK_DISABLED }, + { "WERR_DS_DRA_NAME_COLLISION", WERR_DS_DRA_NAME_COLLISION }, + { "WERR_DS_DRA_SOURCE_REINSTALLED", WERR_DS_DRA_SOURCE_REINSTALLED }, + { "WERR_DS_DRA_MISSING_PARENT", WERR_DS_DRA_MISSING_PARENT }, + { "WERR_DS_DRA_PREEMPTED", WERR_DS_DRA_PREEMPTED }, + { "WERR_DS_DRA_ABANDON_SYNC", WERR_DS_DRA_ABANDON_SYNC }, + { "WERR_DS_DRA_SHUTDOWN", WERR_DS_DRA_SHUTDOWN }, + { "WERR_DS_DRA_INCOMPATIBLE_PARTIAL_SET", WERR_DS_DRA_INCOMPATIBLE_PARTIAL_SET }, + { "WERR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA", WERR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA }, + { "WERR_DS_DRA_EXTN_CONNECTION_FAILED", WERR_DS_DRA_EXTN_CONNECTION_FAILED }, + { "WERR_DS_INSTALL_SCHEMA_MISMATCH", WERR_DS_INSTALL_SCHEMA_MISMATCH }, + { "WERR_DS_DUP_LINK_ID", WERR_DS_DUP_LINK_ID }, + { "WERR_DS_NAME_ERROR_RESOLVING", WERR_DS_NAME_ERROR_RESOLVING }, + { "WERR_DS_NAME_ERROR_NOT_FOUND", WERR_DS_NAME_ERROR_NOT_FOUND }, + { "WERR_DS_NAME_ERROR_NOT_UNIQUE", WERR_DS_NAME_ERROR_NOT_UNIQUE }, + { "WERR_DS_NAME_ERROR_NO_MAPPING", WERR_DS_NAME_ERROR_NO_MAPPING }, + { "WERR_DS_NAME_ERROR_DOMAIN_ONLY", WERR_DS_NAME_ERROR_DOMAIN_ONLY }, + { "WERR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING", WERR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING }, + { "WERR_DS_CONSTRUCTED_ATT_MOD", WERR_DS_CONSTRUCTED_ATT_MOD }, + { "WERR_DS_WRONG_OM_OBJ_CLASS", WERR_DS_WRONG_OM_OBJ_CLASS }, + { "WERR_DS_DRA_REPL_PENDING", WERR_DS_DRA_REPL_PENDING }, + { "WERR_DS_DS_REQUIRED", WERR_DS_DS_REQUIRED }, + { "WERR_DS_INVALID_LDAP_DISPLAY_NAME", WERR_DS_INVALID_LDAP_DISPLAY_NAME }, + { "WERR_DS_NON_BASE_SEARCH", WERR_DS_NON_BASE_SEARCH }, + { "WERR_DS_CANT_RETRIEVE_ATTS", WERR_DS_CANT_RETRIEVE_ATTS }, + { "WERR_DS_BACKLINK_WITHOUT_LINK", WERR_DS_BACKLINK_WITHOUT_LINK }, + { "WERR_DS_EPOCH_MISMATCH", WERR_DS_EPOCH_MISMATCH }, + { "WERR_DS_SRC_NAME_MISMATCH", WERR_DS_SRC_NAME_MISMATCH }, + { "WERR_DS_SRC_AND_DST_NC_IDENTICAL", WERR_DS_SRC_AND_DST_NC_IDENTICAL }, + { "WERR_DS_DST_NC_MISMATCH", WERR_DS_DST_NC_MISMATCH }, + { "WERR_DS_NOT_AUTHORITIVE_FOR_DST_NC", WERR_DS_NOT_AUTHORITIVE_FOR_DST_NC }, + { "WERR_DS_SRC_GUID_MISMATCH", WERR_DS_SRC_GUID_MISMATCH }, + { "WERR_DS_CANT_MOVE_DELETED_OBJECT", WERR_DS_CANT_MOVE_DELETED_OBJECT }, + { "WERR_DS_PDC_OPERATION_IN_PROGRESS", WERR_DS_PDC_OPERATION_IN_PROGRESS }, + { "WERR_DS_CROSS_DOMAIN_CLEANUP_REQD", WERR_DS_CROSS_DOMAIN_CLEANUP_REQD }, + { "WERR_DS_ILLEGAL_XDOM_MOVE_OPERATION", WERR_DS_ILLEGAL_XDOM_MOVE_OPERATION }, + { "WERR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS", WERR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS }, + { "WERR_DS_NC_MUST_HAVE_NC_PARENT", WERR_DS_NC_MUST_HAVE_NC_PARENT }, + { "WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE", WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE }, + { "WERR_DS_DST_DOMAIN_NOT_NATIVE", WERR_DS_DST_DOMAIN_NOT_NATIVE }, + { "WERR_DS_MISSING_INFRASTRUCTURE_CONTAINER", WERR_DS_MISSING_INFRASTRUCTURE_CONTAINER }, + { "WERR_DS_CANT_MOVE_ACCOUNT_GROUP", WERR_DS_CANT_MOVE_ACCOUNT_GROUP }, + { "WERR_DS_CANT_MOVE_RESOURCE_GROUP", WERR_DS_CANT_MOVE_RESOURCE_GROUP }, + { "WERR_DS_INVALID_SEARCH_FLAG", WERR_DS_INVALID_SEARCH_FLAG }, + { "WERR_DS_NO_TREE_DELETE_ABOVE_NC", WERR_DS_NO_TREE_DELETE_ABOVE_NC }, + { "WERR_DS_COULDNT_LOCK_TREE_FOR_DELETE", WERR_DS_COULDNT_LOCK_TREE_FOR_DELETE }, + { "WERR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE", WERR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE }, + { "WERR_DS_SAM_INIT_FAILURE", WERR_DS_SAM_INIT_FAILURE }, + { "WERR_DS_SENSITIVE_GROUP_VIOLATION", WERR_DS_SENSITIVE_GROUP_VIOLATION }, + { "WERR_DS_CANT_MOD_PRIMARYGROUPID", WERR_DS_CANT_MOD_PRIMARYGROUPID }, + { "WERR_DS_ILLEGAL_BASE_SCHEMA_MOD", WERR_DS_ILLEGAL_BASE_SCHEMA_MOD }, + { "WERR_DS_NONSAFE_SCHEMA_CHANGE", WERR_DS_NONSAFE_SCHEMA_CHANGE }, + { "WERR_DS_SCHEMA_UPDATE_DISALLOWED", WERR_DS_SCHEMA_UPDATE_DISALLOWED }, + { "WERR_DS_CANT_CREATE_UNDER_SCHEMA", WERR_DS_CANT_CREATE_UNDER_SCHEMA }, + { "WERR_DS_INVALID_GROUP_TYPE", WERR_DS_INVALID_GROUP_TYPE }, + { "WERR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN", WERR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN }, + { "WERR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN", WERR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN }, + { "WERR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER", WERR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER }, + { "WERR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER", WERR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER }, + { "WERR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER", WERR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER }, + { "WERR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER", WERR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER }, + { "WERR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER", WERR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER }, + { "WERR_DS_HAVE_PRIMARY_MEMBERS", WERR_DS_HAVE_PRIMARY_MEMBERS }, + { "WERR_DS_STRING_SD_CONVERSION_FAILED", WERR_DS_STRING_SD_CONVERSION_FAILED }, + { "WERR_DS_NAMING_MASTER_GC", WERR_DS_NAMING_MASTER_GC }, + { "WERR_DS_COULDNT_UPDATE_SPNS", WERR_DS_COULDNT_UPDATE_SPNS }, + { "WERR_DS_CANT_RETRIEVE_SD", WERR_DS_CANT_RETRIEVE_SD }, + { "WERR_DS_KEY_NOT_UNIQUE", WERR_DS_KEY_NOT_UNIQUE }, + { "WERR_DS_WRONG_LINKED_ATT_SYNTAX", WERR_DS_WRONG_LINKED_ATT_SYNTAX }, + { "WERR_DS_SAM_NEED_BOOTKEY_PASSWORD", WERR_DS_SAM_NEED_BOOTKEY_PASSWORD }, + { "WERR_DS_SAM_NEED_BOOTKEY_FLOPPY", WERR_DS_SAM_NEED_BOOTKEY_FLOPPY }, + { "WERR_DS_CANT_START", WERR_DS_CANT_START }, + { "WERR_DS_INIT_FAILURE", WERR_DS_INIT_FAILURE }, + { "WERR_DS_NO_PKT_PRIVACY_ON_CONNECTION", WERR_DS_NO_PKT_PRIVACY_ON_CONNECTION }, + { "WERR_DS_SOURCE_DOMAIN_IN_FOREST", WERR_DS_SOURCE_DOMAIN_IN_FOREST }, + { "WERR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST", WERR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST }, + { "WERR_DS_DESTINATION_AUDITING_NOT_ENABLED", WERR_DS_DESTINATION_AUDITING_NOT_ENABLED }, + { "WERR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN", WERR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN }, + { "WERR_DS_SRC_OBJ_NOT_GROUP_OR_USER", WERR_DS_SRC_OBJ_NOT_GROUP_OR_USER }, + { "WERR_DS_SRC_SID_EXISTS_IN_FOREST", WERR_DS_SRC_SID_EXISTS_IN_FOREST }, + { "WERR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH", WERR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH }, + { "WERR_SAM_INIT_FAILURE", WERR_SAM_INIT_FAILURE }, + { "WERR_DS_DRA_SCHEMA_INFO_SHIP", WERR_DS_DRA_SCHEMA_INFO_SHIP }, + { "WERR_DS_DRA_SCHEMA_CONFLICT", WERR_DS_DRA_SCHEMA_CONFLICT }, + { "WERR_DS_DRA_EARLIER_SCHEMA_CONFLICT", WERR_DS_DRA_EARLIER_SCHEMA_CONFLICT }, + { "WERR_DS_DRA_OBJ_NC_MISMATCH", WERR_DS_DRA_OBJ_NC_MISMATCH }, + { "WERR_DS_NC_STILL_HAS_DSAS", WERR_DS_NC_STILL_HAS_DSAS }, + { "WERR_DS_GC_REQUIRED", WERR_DS_GC_REQUIRED }, + { "WERR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY", WERR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY }, + { "WERR_DS_NO_FPO_IN_UNIVERSAL_GROUPS", WERR_DS_NO_FPO_IN_UNIVERSAL_GROUPS }, + { "WERR_DS_CANT_ADD_TO_GC", WERR_DS_CANT_ADD_TO_GC }, + { "WERR_DS_NO_CHECKPOINT_WITH_PDC", WERR_DS_NO_CHECKPOINT_WITH_PDC }, + { "WERR_DS_SOURCE_AUDITING_NOT_ENABLED", WERR_DS_SOURCE_AUDITING_NOT_ENABLED }, + { "WERR_DS_CANT_CREATE_IN_NONDOMAIN_NC", WERR_DS_CANT_CREATE_IN_NONDOMAIN_NC }, + { "WERR_DS_INVALID_NAME_FOR_SPN", WERR_DS_INVALID_NAME_FOR_SPN }, + { "WERR_DS_FILTER_USES_CONTRUCTED_ATTRS", WERR_DS_FILTER_USES_CONTRUCTED_ATTRS }, + { "WERR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED", WERR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED }, + { "WERR_DS_MUST_BE_RUN_ON_DST_DC", WERR_DS_MUST_BE_RUN_ON_DST_DC }, + { "WERR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER", WERR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER }, + { "WERR_DS_CANT_TREE_DELETE_CRITICAL_OBJ", WERR_DS_CANT_TREE_DELETE_CRITICAL_OBJ }, + { "WERR_DS_INIT_FAILURE_CONSOLE", WERR_DS_INIT_FAILURE_CONSOLE }, + { "WERR_DS_SAM_INIT_FAILURE_CONSOLE", WERR_DS_SAM_INIT_FAILURE_CONSOLE }, + { "WERR_DS_FOREST_VERSION_TOO_HIGH", WERR_DS_FOREST_VERSION_TOO_HIGH }, + { "WERR_DS_DOMAIN_VERSION_TOO_HIGH", WERR_DS_DOMAIN_VERSION_TOO_HIGH }, + { "WERR_DS_FOREST_VERSION_TOO_LOW", WERR_DS_FOREST_VERSION_TOO_LOW }, + { "WERR_DS_DOMAIN_VERSION_TOO_LOW", WERR_DS_DOMAIN_VERSION_TOO_LOW }, + { "WERR_DS_INCOMPATIBLE_VERSION", WERR_DS_INCOMPATIBLE_VERSION }, + { "WERR_DS_LOW_DSA_VERSION", WERR_DS_LOW_DSA_VERSION }, + { "WERR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN", WERR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN }, + { "WERR_DS_NOT_SUPPORTED_SORT_ORDER", WERR_DS_NOT_SUPPORTED_SORT_ORDER }, + { "WERR_DS_NAME_NOT_UNIQUE", WERR_DS_NAME_NOT_UNIQUE }, + { "WERR_DS_MACHINE_ACCOUNT_CREATED_PRENT4", WERR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 }, + { "WERR_DS_OUT_OF_VERSION_STORE", WERR_DS_OUT_OF_VERSION_STORE }, + { "WERR_DS_INCOMPATIBLE_CONTROLS_USED", WERR_DS_INCOMPATIBLE_CONTROLS_USED }, + { "WERR_DS_NO_REF_DOMAIN", WERR_DS_NO_REF_DOMAIN }, + { "WERR_DS_RESERVED_LINK_ID", WERR_DS_RESERVED_LINK_ID }, + { "WERR_DS_LINK_ID_NOT_AVAILABLE", WERR_DS_LINK_ID_NOT_AVAILABLE }, + { "WERR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER", WERR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER }, + { "WERR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE", WERR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE }, + { "WERR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC", WERR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC }, + { "WERR_DS_MODIFYDN_DISALLOWED_BY_FLAG", WERR_DS_MODIFYDN_DISALLOWED_BY_FLAG }, + { "WERR_DS_MODIFYDN_WRONG_GRANDPARENT", WERR_DS_MODIFYDN_WRONG_GRANDPARENT }, + { "WERR_DS_NAME_ERROR_TRUST_REFERRAL", WERR_DS_NAME_ERROR_TRUST_REFERRAL }, + { "WERR_NOT_SUPPORTED_ON_STANDARD_SERVER", WERR_NOT_SUPPORTED_ON_STANDARD_SERVER }, + { "WERR_DS_CANT_ACCESS_REMOTE_PART_OF_AD", WERR_DS_CANT_ACCESS_REMOTE_PART_OF_AD }, + { "WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2", WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 }, + { "WERR_DS_THREAD_LIMIT_EXCEEDED", WERR_DS_THREAD_LIMIT_EXCEEDED }, + { "WERR_DS_NOT_CLOSEST", WERR_DS_NOT_CLOSEST }, + { "WERR_DS_SINGLE_USER_MODE_FAILED", WERR_DS_SINGLE_USER_MODE_FAILED }, + { "WERR_DS_NTDSCRIPT_SYNTAX_ERROR", WERR_DS_NTDSCRIPT_SYNTAX_ERROR }, + { "WERR_DS_NTDSCRIPT_PROCESS_ERROR", WERR_DS_NTDSCRIPT_PROCESS_ERROR }, + { "WERR_DS_DIFFERENT_REPL_EPOCHS", WERR_DS_DIFFERENT_REPL_EPOCHS }, + { "WERR_DS_DRS_EXTENSIONS_CHANGED", WERR_DS_DRS_EXTENSIONS_CHANGED }, + { "WERR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR", WERR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR }, + { "WERR_DS_EXISTS_IN_RDNATTID", WERR_DS_EXISTS_IN_RDNATTID }, + { "WERR_DS_AUTHORIZATION_FAILED", WERR_DS_AUTHORIZATION_FAILED }, + { "WERR_DS_INVALID_SCRIPT", WERR_DS_INVALID_SCRIPT }, + { "WERR_DS_REMOTE_CROSSREF_OP_FAILED", WERR_DS_REMOTE_CROSSREF_OP_FAILED }, + { "WERR_DS_CROSS_REF_BUSY", WERR_DS_CROSS_REF_BUSY }, + { "WERR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN", WERR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN }, + { "WERR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC", WERR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC }, + { "WERR_DS_DUPLICATE_ID_FOUND", WERR_DS_DUPLICATE_ID_FOUND }, + { "WERR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT", WERR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT }, + { "WERR_DS_GROUP_CONVERSION_ERROR", WERR_DS_GROUP_CONVERSION_ERROR }, + { "WERR_DS_CANT_MOVE_APP_BASIC_GROUP", WERR_DS_CANT_MOVE_APP_BASIC_GROUP }, + { "WERR_DS_CANT_MOVE_APP_QUERY_GROUP", WERR_DS_CANT_MOVE_APP_QUERY_GROUP }, + { "WERR_DS_ROLE_NOT_VERIFIED", WERR_DS_ROLE_NOT_VERIFIED }, + { "WERR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL", WERR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL }, + { "WERR_DS_DOMAIN_RENAME_IN_PROGRESS", WERR_DS_DOMAIN_RENAME_IN_PROGRESS }, + { "WERR_DS_EXISTING_AD_CHILD_NC", WERR_DS_EXISTING_AD_CHILD_NC }, + { "WERR_DS_REPL_LIFETIME_EXCEEDED", WERR_DS_REPL_LIFETIME_EXCEEDED }, + { "WERR_DS_DISALLOWED_IN_SYSTEM_CONTAINER", WERR_DS_DISALLOWED_IN_SYSTEM_CONTAINER }, + { "WERR_DS_LDAP_SEND_QUEUE_FULL", WERR_DS_LDAP_SEND_QUEUE_FULL }, + { "WERR_DS_DRA_OUT_SCHEDULE_WINDOW", WERR_DS_DRA_OUT_SCHEDULE_WINDOW }, + { "WERR_DS_POLICY_NOT_KNOWN", WERR_DS_POLICY_NOT_KNOWN }, + { "WERR_NO_SITE_SETTINGS_OBJECT", WERR_NO_SITE_SETTINGS_OBJECT }, + { "WERR_NO_SECRETS", WERR_NO_SECRETS }, + { "WERR_NO_WRITABLE_DC_FOUND", WERR_NO_WRITABLE_DC_FOUND }, + { "WERR_DS_NO_SERVER_OBJECT", WERR_DS_NO_SERVER_OBJECT }, + { "WERR_DS_NO_NTDSA_OBJECT", WERR_DS_NO_NTDSA_OBJECT }, + { "WERR_DS_NON_ASQ_SEARCH", WERR_DS_NON_ASQ_SEARCH }, + { "WERR_DS_AUDIT_FAILURE", WERR_DS_AUDIT_FAILURE }, + { "WERR_DS_INVALID_SEARCH_FLAG_SUBTREE", WERR_DS_INVALID_SEARCH_FLAG_SUBTREE }, + { "WERR_DS_INVALID_SEARCH_FLAG_TUPLE", WERR_DS_INVALID_SEARCH_FLAG_TUPLE }, + { "WERR_IPSEC_QM_POLICY_EXISTS", WERR_IPSEC_QM_POLICY_EXISTS }, + { "WERR_IPSEC_QM_POLICY_NOT_FOUND", WERR_IPSEC_QM_POLICY_NOT_FOUND }, + { "WERR_IPSEC_QM_POLICY_IN_USE", WERR_IPSEC_QM_POLICY_IN_USE }, + { "WERR_IPSEC_MM_POLICY_EXISTS", WERR_IPSEC_MM_POLICY_EXISTS }, + { "WERR_IPSEC_MM_POLICY_NOT_FOUND", WERR_IPSEC_MM_POLICY_NOT_FOUND }, + { "WERR_IPSEC_MM_POLICY_IN_USE", WERR_IPSEC_MM_POLICY_IN_USE }, + { "WERR_IPSEC_MM_FILTER_EXISTS", WERR_IPSEC_MM_FILTER_EXISTS }, + { "WERR_IPSEC_MM_FILTER_NOT_FOUND", WERR_IPSEC_MM_FILTER_NOT_FOUND }, + { "WERR_IPSEC_TRANSPORT_FILTER_EXISTS", WERR_IPSEC_TRANSPORT_FILTER_EXISTS }, + { "WERR_IPSEC_TRANSPORT_FILTER_NOT_FOUND", WERR_IPSEC_TRANSPORT_FILTER_NOT_FOUND }, + { "WERR_IPSEC_MM_AUTH_EXISTS", WERR_IPSEC_MM_AUTH_EXISTS }, + { "WERR_IPSEC_MM_AUTH_NOT_FOUND", WERR_IPSEC_MM_AUTH_NOT_FOUND }, + { "WERR_IPSEC_MM_AUTH_IN_USE", WERR_IPSEC_MM_AUTH_IN_USE }, + { "WERR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND", WERR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND }, + { "WERR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND", WERR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND }, + { "WERR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND", WERR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND }, + { "WERR_IPSEC_TUNNEL_FILTER_EXISTS", WERR_IPSEC_TUNNEL_FILTER_EXISTS }, + { "WERR_IPSEC_TUNNEL_FILTER_NOT_FOUND", WERR_IPSEC_TUNNEL_FILTER_NOT_FOUND }, + { "WERR_IPSEC_MM_FILTER_PENDING_DELETION", WERR_IPSEC_MM_FILTER_PENDING_DELETION }, + { "WERR_IPSEC_TRANSPORT_FILTER_ENDING_DELETION", WERR_IPSEC_TRANSPORT_FILTER_ENDING_DELETION }, + { "WERR_IPSEC_TUNNEL_FILTER_PENDING_DELETION", WERR_IPSEC_TUNNEL_FILTER_PENDING_DELETION }, + { "WERR_IPSEC_MM_POLICY_PENDING_ELETION", WERR_IPSEC_MM_POLICY_PENDING_ELETION }, + { "WERR_IPSEC_MM_AUTH_PENDING_DELETION", WERR_IPSEC_MM_AUTH_PENDING_DELETION }, + { "WERR_IPSEC_QM_POLICY_PENDING_DELETION", WERR_IPSEC_QM_POLICY_PENDING_DELETION }, + { "WERR_IPSEC_IKE_NEG_STATUS_BEGIN", WERR_IPSEC_IKE_NEG_STATUS_BEGIN }, + { "WERR_IPSEC_IKE_AUTH_FAIL", WERR_IPSEC_IKE_AUTH_FAIL }, + { "WERR_IPSEC_IKE_ATTRIB_FAIL", WERR_IPSEC_IKE_ATTRIB_FAIL }, + { "WERR_IPSEC_IKE_NEGOTIATION_PENDING", WERR_IPSEC_IKE_NEGOTIATION_PENDING }, + { "WERR_IPSEC_IKE_GENERAL_PROCESSING_ERROR", WERR_IPSEC_IKE_GENERAL_PROCESSING_ERROR }, + { "WERR_IPSEC_IKE_TIMED_OUT", WERR_IPSEC_IKE_TIMED_OUT }, + { "WERR_IPSEC_IKE_NO_CERT", WERR_IPSEC_IKE_NO_CERT }, + { "WERR_IPSEC_IKE_SA_DELETED", WERR_IPSEC_IKE_SA_DELETED }, + { "WERR_IPSEC_IKE_SA_REAPED", WERR_IPSEC_IKE_SA_REAPED }, + { "WERR_IPSEC_IKE_MM_ACQUIRE_DROP", WERR_IPSEC_IKE_MM_ACQUIRE_DROP }, + { "WERR_IPSEC_IKE_QM_ACQUIRE_DROP", WERR_IPSEC_IKE_QM_ACQUIRE_DROP }, + { "WERR_IPSEC_IKE_QUEUE_DROP_MM", WERR_IPSEC_IKE_QUEUE_DROP_MM }, + { "WERR_IPSEC_IKE_QUEUE_DROP_NO_MM", WERR_IPSEC_IKE_QUEUE_DROP_NO_MM }, + { "WERR_IPSEC_IKE_DROP_NO_RESPONSE", WERR_IPSEC_IKE_DROP_NO_RESPONSE }, + { "WERR_IPSEC_IKE_MM_DELAY_DROP", WERR_IPSEC_IKE_MM_DELAY_DROP }, + { "WERR_IPSEC_IKE_QM_DELAY_DROP", WERR_IPSEC_IKE_QM_DELAY_DROP }, + { "WERR_IPSEC_IKE_ERROR", WERR_IPSEC_IKE_ERROR }, + { "WERR_IPSEC_IKE_CRL_FAILED", WERR_IPSEC_IKE_CRL_FAILED }, + { "WERR_IPSEC_IKE_INVALID_KEY_USAGE", WERR_IPSEC_IKE_INVALID_KEY_USAGE }, + { "WERR_IPSEC_IKE_INVALID_CERT_TYPE", WERR_IPSEC_IKE_INVALID_CERT_TYPE }, + { "WERR_IPSEC_IKE_NO_PRIVATE_KEY", WERR_IPSEC_IKE_NO_PRIVATE_KEY }, + { "WERR_IPSEC_IKE_DH_FAIL", WERR_IPSEC_IKE_DH_FAIL }, + { "WERR_IPSEC_IKE_INVALID_HEADER", WERR_IPSEC_IKE_INVALID_HEADER }, + { "WERR_IPSEC_IKE_NO_POLICY", WERR_IPSEC_IKE_NO_POLICY }, + { "WERR_IPSEC_IKE_INVALID_SIGNATURE", WERR_IPSEC_IKE_INVALID_SIGNATURE }, + { "WERR_IPSEC_IKE_KERBEROS_ERROR", WERR_IPSEC_IKE_KERBEROS_ERROR }, + { "WERR_IPSEC_IKE_NO_PUBLIC_KEY", WERR_IPSEC_IKE_NO_PUBLIC_KEY }, + { "WERR_IPSEC_IKE_PROCESS_ERR", WERR_IPSEC_IKE_PROCESS_ERR }, + { "WERR_IPSEC_IKE_PROCESS_ERR_SA", WERR_IPSEC_IKE_PROCESS_ERR_SA }, + { "WERR_IPSEC_IKE_PROCESS_ERR_PROP", WERR_IPSEC_IKE_PROCESS_ERR_PROP }, + { "WERR_IPSEC_IKE_PROCESS_ERR_TRANS", WERR_IPSEC_IKE_PROCESS_ERR_TRANS }, + { "WERR_IPSEC_IKE_PROCESS_ERR_KE", WERR_IPSEC_IKE_PROCESS_ERR_KE }, + { "WERR_IPSEC_IKE_PROCESS_ERR_ID", WERR_IPSEC_IKE_PROCESS_ERR_ID }, + { "WERR_IPSEC_IKE_PROCESS_ERR_CERT", WERR_IPSEC_IKE_PROCESS_ERR_CERT }, + { "WERR_IPSEC_IKE_PROCESS_ERR_CERT_REQ", WERR_IPSEC_IKE_PROCESS_ERR_CERT_REQ }, + { "WERR_IPSEC_IKE_PROCESS_ERR_HASH", WERR_IPSEC_IKE_PROCESS_ERR_HASH }, + { "WERR_IPSEC_IKE_PROCESS_ERR_SIG", WERR_IPSEC_IKE_PROCESS_ERR_SIG }, + { "WERR_IPSEC_IKE_PROCESS_ERR_NONCE", WERR_IPSEC_IKE_PROCESS_ERR_NONCE }, + { "WERR_IPSEC_IKE_PROCESS_ERR_NOTIFY", WERR_IPSEC_IKE_PROCESS_ERR_NOTIFY }, + { "WERR_IPSEC_IKE_PROCESS_ERR_DELETE", WERR_IPSEC_IKE_PROCESS_ERR_DELETE }, + { "WERR_IPSEC_IKE_PROCESS_ERR_VENDOR", WERR_IPSEC_IKE_PROCESS_ERR_VENDOR }, + { "WERR_IPSEC_IKE_INVALID_PAYLOAD", WERR_IPSEC_IKE_INVALID_PAYLOAD }, + { "WERR_IPSEC_IKE_LOAD_SOFT_SA", WERR_IPSEC_IKE_LOAD_SOFT_SA }, + { "WERR_IPSEC_IKE_SOFT_SA_TORN_DOWN", WERR_IPSEC_IKE_SOFT_SA_TORN_DOWN }, + { "WERR_IPSEC_IKE_INVALID_COOKIE", WERR_IPSEC_IKE_INVALID_COOKIE }, + { "WERR_IPSEC_IKE_NO_PEER_CERT", WERR_IPSEC_IKE_NO_PEER_CERT }, + { "WERR_IPSEC_IKE_PEER_CRL_FAILED", WERR_IPSEC_IKE_PEER_CRL_FAILED }, + { "WERR_IPSEC_IKE_POLICY_CHANGE", WERR_IPSEC_IKE_POLICY_CHANGE }, + { "WERR_IPSEC_IKE_NO_MM_POLICY", WERR_IPSEC_IKE_NO_MM_POLICY }, + { "WERR_IPSEC_IKE_NOTCBPRIV", WERR_IPSEC_IKE_NOTCBPRIV }, + { "WERR_IPSEC_IKE_SECLOADFAIL", WERR_IPSEC_IKE_SECLOADFAIL }, + { "WERR_IPSEC_IKE_FAILSSPINIT", WERR_IPSEC_IKE_FAILSSPINIT }, + { "WERR_IPSEC_IKE_FAILQUERYSSP", WERR_IPSEC_IKE_FAILQUERYSSP }, + { "WERR_IPSEC_IKE_SRVACQFAIL", WERR_IPSEC_IKE_SRVACQFAIL }, + { "WERR_IPSEC_IKE_SRVQUERYCRED", WERR_IPSEC_IKE_SRVQUERYCRED }, + { "WERR_IPSEC_IKE_GETSPIFAIL", WERR_IPSEC_IKE_GETSPIFAIL }, + { "WERR_IPSEC_IKE_INVALID_FILTER", WERR_IPSEC_IKE_INVALID_FILTER }, + { "WERR_IPSEC_IKE_OUT_OF_MEMORY", WERR_IPSEC_IKE_OUT_OF_MEMORY }, + { "WERR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED", WERR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED }, + { "WERR_IPSEC_IKE_INVALID_POLICY", WERR_IPSEC_IKE_INVALID_POLICY }, + { "WERR_IPSEC_IKE_UNKNOWN_DOI", WERR_IPSEC_IKE_UNKNOWN_DOI }, + { "WERR_IPSEC_IKE_INVALID_SITUATION", WERR_IPSEC_IKE_INVALID_SITUATION }, + { "WERR_IPSEC_IKE_DH_FAILURE", WERR_IPSEC_IKE_DH_FAILURE }, + { "WERR_IPSEC_IKE_INVALID_GROUP", WERR_IPSEC_IKE_INVALID_GROUP }, + { "WERR_IPSEC_IKE_ENCRYPT", WERR_IPSEC_IKE_ENCRYPT }, + { "WERR_IPSEC_IKE_DECRYPT", WERR_IPSEC_IKE_DECRYPT }, + { "WERR_IPSEC_IKE_POLICY_MATCH", WERR_IPSEC_IKE_POLICY_MATCH }, + { "WERR_IPSEC_IKE_UNSUPPORTED_ID", WERR_IPSEC_IKE_UNSUPPORTED_ID }, + { "WERR_IPSEC_IKE_INVALID_HASH", WERR_IPSEC_IKE_INVALID_HASH }, + { "WERR_IPSEC_IKE_INVALID_HASH_ALG", WERR_IPSEC_IKE_INVALID_HASH_ALG }, + { "WERR_IPSEC_IKE_INVALID_HASH_SIZE", WERR_IPSEC_IKE_INVALID_HASH_SIZE }, + { "WERR_IPSEC_IKE_INVALID_ENCRYPT_ALG", WERR_IPSEC_IKE_INVALID_ENCRYPT_ALG }, + { "WERR_IPSEC_IKE_INVALID_AUTH_ALG", WERR_IPSEC_IKE_INVALID_AUTH_ALG }, + { "WERR_IPSEC_IKE_INVALID_SIG", WERR_IPSEC_IKE_INVALID_SIG }, + { "WERR_IPSEC_IKE_LOAD_FAILED", WERR_IPSEC_IKE_LOAD_FAILED }, + { "WERR_IPSEC_IKE_RPC_DELETE", WERR_IPSEC_IKE_RPC_DELETE }, + { "WERR_IPSEC_IKE_BENIGN_REINIT", WERR_IPSEC_IKE_BENIGN_REINIT }, + { "WERR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY", WERR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY }, + { "WERR_IPSEC_IKE_INVALID_CERT_KEYLEN", WERR_IPSEC_IKE_INVALID_CERT_KEYLEN }, + { "WERR_IPSEC_IKE_MM_LIMIT", WERR_IPSEC_IKE_MM_LIMIT }, + { "WERR_IPSEC_IKE_NEGOTIATION_DISABLED", WERR_IPSEC_IKE_NEGOTIATION_DISABLED }, + { "WERR_IPSEC_IKE_QM_LIMIT", WERR_IPSEC_IKE_QM_LIMIT }, + { "WERR_IPSEC_IKE_MM_EXPIRED", WERR_IPSEC_IKE_MM_EXPIRED }, + { "WERR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID", WERR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID }, + { "WERR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH", WERR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH }, + { "WERR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID", WERR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID }, + { "WERR_IPSEC_IKE_INVALID_UMATTS", WERR_IPSEC_IKE_INVALID_UMATTS }, + { "WERR_IPSEC_IKE_DOS_COOKIE_SENT", WERR_IPSEC_IKE_DOS_COOKIE_SENT }, + { "WERR_IPSEC_IKE_SHUTTING_DOWN", WERR_IPSEC_IKE_SHUTTING_DOWN }, + { "WERR_IPSEC_IKE_CGA_AUTH_FAILED", WERR_IPSEC_IKE_CGA_AUTH_FAILED }, + { "WERR_IPSEC_IKE_PROCESS_ERR_NATOA", WERR_IPSEC_IKE_PROCESS_ERR_NATOA }, + { "WERR_IPSEC_IKE_INVALID_MM_FOR_QM", WERR_IPSEC_IKE_INVALID_MM_FOR_QM }, + { "WERR_IPSEC_IKE_QM_EXPIRED", WERR_IPSEC_IKE_QM_EXPIRED }, + { "WERR_IPSEC_IKE_TOO_MANY_FILTERS", WERR_IPSEC_IKE_TOO_MANY_FILTERS }, + { "WERR_IPSEC_IKE_NEG_STATUS_END", WERR_IPSEC_IKE_NEG_STATUS_END }, + { "WERR_SXS_SECTION_NOT_FOUND", WERR_SXS_SECTION_NOT_FOUND }, + { "WERR_SXS_CANT_GEN_ACTCTX", WERR_SXS_CANT_GEN_ACTCTX }, + { "WERR_SXS_INVALID_ACTCTXDATA_FORMAT", WERR_SXS_INVALID_ACTCTXDATA_FORMAT }, + { "WERR_SXS_ASSEMBLY_NOT_FOUND", WERR_SXS_ASSEMBLY_NOT_FOUND }, + { "WERR_SXS_MANIFEST_FORMAT_ERROR", WERR_SXS_MANIFEST_FORMAT_ERROR }, + { "WERR_SXS_MANIFEST_PARSE_ERROR", WERR_SXS_MANIFEST_PARSE_ERROR }, + { "WERR_SXS_ACTIVATION_CONTEXT_DISABLED", WERR_SXS_ACTIVATION_CONTEXT_DISABLED }, + { "WERR_SXS_KEY_NOT_FOUND", WERR_SXS_KEY_NOT_FOUND }, + { "WERR_SXS_VERSION_CONFLICT", WERR_SXS_VERSION_CONFLICT }, + { "WERR_SXS_WRONG_SECTION_TYPE", WERR_SXS_WRONG_SECTION_TYPE }, + { "WERR_SXS_THREAD_QUERIES_DISABLED", WERR_SXS_THREAD_QUERIES_DISABLED }, + { "WERR_SXS_PROCESS_DEFAULT_ALREADY_SET", WERR_SXS_PROCESS_DEFAULT_ALREADY_SET }, + { "WERR_SXS_UNKNOWN_ENCODING_GROUP", WERR_SXS_UNKNOWN_ENCODING_GROUP }, + { "WERR_SXS_UNKNOWN_ENCODING", WERR_SXS_UNKNOWN_ENCODING }, + { "WERR_SXS_INVALID_XML_NAMESPACE_URI", WERR_SXS_INVALID_XML_NAMESPACE_URI }, + { "WERR_SXS_ROOT_MANIFEST_DEPENDENCY_OT_INSTALLED", WERR_SXS_ROOT_MANIFEST_DEPENDENCY_OT_INSTALLED }, + { "WERR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED", WERR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED }, + { "WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE", WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE }, + { "WERR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE", WERR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE }, + { "WERR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE", WERR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE }, + { "WERR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT", WERR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT }, + { "WERR_SXS_DUPLICATE_DLL_NAME", WERR_SXS_DUPLICATE_DLL_NAME }, + { "WERR_SXS_DUPLICATE_WINDOWCLASS_NAME", WERR_SXS_DUPLICATE_WINDOWCLASS_NAME }, + { "WERR_SXS_DUPLICATE_CLSID", WERR_SXS_DUPLICATE_CLSID }, + { "WERR_SXS_DUPLICATE_IID", WERR_SXS_DUPLICATE_IID }, + { "WERR_SXS_DUPLICATE_TLBID", WERR_SXS_DUPLICATE_TLBID }, + { "WERR_SXS_DUPLICATE_PROGID", WERR_SXS_DUPLICATE_PROGID }, + { "WERR_SXS_DUPLICATE_ASSEMBLY_NAME", WERR_SXS_DUPLICATE_ASSEMBLY_NAME }, + { "WERR_SXS_FILE_HASH_MISMATCH", WERR_SXS_FILE_HASH_MISMATCH }, + { "WERR_SXS_POLICY_PARSE_ERROR", WERR_SXS_POLICY_PARSE_ERROR }, + { "WERR_SXS_XML_E_MISSINGQUOTE", WERR_SXS_XML_E_MISSINGQUOTE }, + { "WERR_SXS_XML_E_COMMENTSYNTAX", WERR_SXS_XML_E_COMMENTSYNTAX }, + { "WERR_SXS_XML_E_BADSTARTNAMECHAR", WERR_SXS_XML_E_BADSTARTNAMECHAR }, + { "WERR_SXS_XML_E_BADNAMECHAR", WERR_SXS_XML_E_BADNAMECHAR }, + { "WERR_SXS_XML_E_BADCHARINSTRING", WERR_SXS_XML_E_BADCHARINSTRING }, + { "WERR_SXS_XML_E_XMLDECLSYNTAX", WERR_SXS_XML_E_XMLDECLSYNTAX }, + { "WERR_SXS_XML_E_BADCHARDATA", WERR_SXS_XML_E_BADCHARDATA }, + { "WERR_SXS_XML_E_MISSINGWHITESPACE", WERR_SXS_XML_E_MISSINGWHITESPACE }, + { "WERR_SXS_XML_E_EXPECTINGTAGEND", WERR_SXS_XML_E_EXPECTINGTAGEND }, + { "WERR_SXS_XML_E_MISSINGSEMICOLON", WERR_SXS_XML_E_MISSINGSEMICOLON }, + { "WERR_SXS_XML_E_UNBALANCEDPAREN", WERR_SXS_XML_E_UNBALANCEDPAREN }, + { "WERR_SXS_XML_E_INTERNALERROR", WERR_SXS_XML_E_INTERNALERROR }, + { "WERR_SXS_XML_E_UNEXPECTED_WHITESPACE", WERR_SXS_XML_E_UNEXPECTED_WHITESPACE }, + { "WERR_SXS_XML_E_INCOMPLETE_ENCODING", WERR_SXS_XML_E_INCOMPLETE_ENCODING }, + { "WERR_SXS_XML_E_MISSING_PAREN", WERR_SXS_XML_E_MISSING_PAREN }, + { "WERR_SXS_XML_E_EXPECTINGCLOSEQUOTE", WERR_SXS_XML_E_EXPECTINGCLOSEQUOTE }, + { "WERR_SXS_XML_E_MULTIPLE_COLONS", WERR_SXS_XML_E_MULTIPLE_COLONS }, + { "WERR_SXS_XML_E_INVALID_DECIMAL", WERR_SXS_XML_E_INVALID_DECIMAL }, + { "WERR_SXS_XML_E_INVALID_HEXIDECIMAL", WERR_SXS_XML_E_INVALID_HEXIDECIMAL }, + { "WERR_SXS_XML_E_INVALID_UNICODE", WERR_SXS_XML_E_INVALID_UNICODE }, + { "WERR_SXS_XML_E_WHITESPACEORQUESTIONMARK", WERR_SXS_XML_E_WHITESPACEORQUESTIONMARK }, + { "WERR_SXS_XML_E_UNEXPECTEDENDTAG", WERR_SXS_XML_E_UNEXPECTEDENDTAG }, + { "WERR_SXS_XML_E_UNCLOSEDTAG", WERR_SXS_XML_E_UNCLOSEDTAG }, + { "WERR_SXS_XML_E_DUPLICATEATTRIBUTE", WERR_SXS_XML_E_DUPLICATEATTRIBUTE }, + { "WERR_SXS_XML_E_MULTIPLEROOTS", WERR_SXS_XML_E_MULTIPLEROOTS }, + { "WERR_SXS_XML_E_INVALIDATROOTLEVEL", WERR_SXS_XML_E_INVALIDATROOTLEVEL }, + { "WERR_SXS_XML_E_BADXMLDECL", WERR_SXS_XML_E_BADXMLDECL }, + { "WERR_SXS_XML_E_MISSINGROOT", WERR_SXS_XML_E_MISSINGROOT }, + { "WERR_SXS_XML_E_UNEXPECTEDEOF", WERR_SXS_XML_E_UNEXPECTEDEOF }, + { "WERR_SXS_XML_E_BADPEREFINSUBSET", WERR_SXS_XML_E_BADPEREFINSUBSET }, + { "WERR_SXS_XML_E_UNCLOSEDSTARTTAG", WERR_SXS_XML_E_UNCLOSEDSTARTTAG }, + { "WERR_SXS_XML_E_UNCLOSEDENDTAG", WERR_SXS_XML_E_UNCLOSEDENDTAG }, + { "WERR_SXS_XML_E_UNCLOSEDSTRING", WERR_SXS_XML_E_UNCLOSEDSTRING }, + { "WERR_SXS_XML_E_UNCLOSEDCOMMENT", WERR_SXS_XML_E_UNCLOSEDCOMMENT }, + { "WERR_SXS_XML_E_UNCLOSEDDECL", WERR_SXS_XML_E_UNCLOSEDDECL }, + { "WERR_SXS_XML_E_UNCLOSEDCDATA", WERR_SXS_XML_E_UNCLOSEDCDATA }, + { "WERR_SXS_XML_E_RESERVEDNAMESPACE", WERR_SXS_XML_E_RESERVEDNAMESPACE }, + { "WERR_SXS_XML_E_INVALIDENCODING", WERR_SXS_XML_E_INVALIDENCODING }, + { "WERR_SXS_XML_E_INVALIDSWITCH", WERR_SXS_XML_E_INVALIDSWITCH }, + { "WERR_SXS_XML_E_BADXMLCASE", WERR_SXS_XML_E_BADXMLCASE }, + { "WERR_SXS_XML_E_INVALID_STANDALONE", WERR_SXS_XML_E_INVALID_STANDALONE }, + { "WERR_SXS_XML_E_UNEXPECTED_STANDALONE", WERR_SXS_XML_E_UNEXPECTED_STANDALONE }, + { "WERR_SXS_XML_E_INVALID_VERSION", WERR_SXS_XML_E_INVALID_VERSION }, + { "WERR_SXS_XML_E_MISSINGEQUALS", WERR_SXS_XML_E_MISSINGEQUALS }, + { "WERR_SXS_PROTECTION_RECOVERY_FAILED", WERR_SXS_PROTECTION_RECOVERY_FAILED }, + { "WERR_SXS_PROTECTION_PUBLIC_KEY_OO_SHORT", WERR_SXS_PROTECTION_PUBLIC_KEY_OO_SHORT }, + { "WERR_SXS_PROTECTION_CATALOG_NOT_VALID", WERR_SXS_PROTECTION_CATALOG_NOT_VALID }, + { "WERR_SXS_UNTRANSLATABLE_HRESULT", WERR_SXS_UNTRANSLATABLE_HRESULT }, + { "WERR_SXS_PROTECTION_CATALOG_FILE_MISSING", WERR_SXS_PROTECTION_CATALOG_FILE_MISSING }, + { "WERR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE", WERR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE }, + { "WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME", WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME }, + { "WERR_SXS_ASSEMBLY_MISSING", WERR_SXS_ASSEMBLY_MISSING }, + { "WERR_SXS_CORRUPT_ACTIVATION_STACK", WERR_SXS_CORRUPT_ACTIVATION_STACK }, + { "WERR_SXS_CORRUPTION", WERR_SXS_CORRUPTION }, + { "WERR_SXS_EARLY_DEACTIVATION", WERR_SXS_EARLY_DEACTIVATION }, + { "WERR_SXS_INVALID_DEACTIVATION", WERR_SXS_INVALID_DEACTIVATION }, + { "WERR_SXS_MULTIPLE_DEACTIVATION", WERR_SXS_MULTIPLE_DEACTIVATION }, + { "WERR_SXS_PROCESS_TERMINATION_REQUESTED", WERR_SXS_PROCESS_TERMINATION_REQUESTED }, + { "WERR_SXS_RELEASE_ACTIVATION_ONTEXT", WERR_SXS_RELEASE_ACTIVATION_ONTEXT }, + { "WERR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY", WERR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY }, + { "WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE", WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE }, + { "WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME", WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME }, + { "WERR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE", WERR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE }, + { "WERR_SXS_IDENTITY_PARSE_ERROR", WERR_SXS_IDENTITY_PARSE_ERROR }, + { "WERR_MALFORMED_SUBSTITUTION_STRING", WERR_MALFORMED_SUBSTITUTION_STRING }, + { "WERR_SXS_INCORRECT_PUBLIC_KEY_OKEN", WERR_SXS_INCORRECT_PUBLIC_KEY_OKEN }, + { "WERR_UNMAPPED_SUBSTITUTION_STRING", WERR_UNMAPPED_SUBSTITUTION_STRING }, + { "WERR_SXS_ASSEMBLY_NOT_LOCKED", WERR_SXS_ASSEMBLY_NOT_LOCKED }, + { "WERR_SXS_COMPONENT_STORE_CORRUPT", WERR_SXS_COMPONENT_STORE_CORRUPT }, + { "WERR_ADVANCED_INSTALLER_FAILED", WERR_ADVANCED_INSTALLER_FAILED }, + { "WERR_XML_ENCODING_MISMATCH", WERR_XML_ENCODING_MISMATCH }, + { "WERR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT", WERR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT }, + { "WERR_SXS_IDENTITIES_DIFFERENT", WERR_SXS_IDENTITIES_DIFFERENT }, + { "WERR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT", WERR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT }, + { "WERR_SXS_FILE_NOT_PART_OF_ASSEMBLY", WERR_SXS_FILE_NOT_PART_OF_ASSEMBLY }, + { "WERR_SXS_MANIFEST_TOO_BIG", WERR_SXS_MANIFEST_TOO_BIG }, + { "WERR_SXS_SETTING_NOT_REGISTERED", WERR_SXS_SETTING_NOT_REGISTERED }, + { "WERR_SXS_TRANSACTION_CLOSURE_INCOMPLETE", WERR_SXS_TRANSACTION_CLOSURE_INCOMPLETE }, + { "WERR_EVT_INVALID_CHANNEL_PATH", WERR_EVT_INVALID_CHANNEL_PATH }, + { "WERR_EVT_INVALID_QUERY", WERR_EVT_INVALID_QUERY }, + { "WERR_EVT_PUBLISHER_METADATA_NOT_FOUND", WERR_EVT_PUBLISHER_METADATA_NOT_FOUND }, + { "WERR_EVT_EVENT_TEMPLATE_NOT_FOUND", WERR_EVT_EVENT_TEMPLATE_NOT_FOUND }, + { "WERR_EVT_INVALID_PUBLISHER_NAME", WERR_EVT_INVALID_PUBLISHER_NAME }, + { "WERR_EVT_INVALID_EVENT_DATA", WERR_EVT_INVALID_EVENT_DATA }, + { "WERR_EVT_CHANNEL_NOT_FOUND", WERR_EVT_CHANNEL_NOT_FOUND }, + { "WERR_EVT_MALFORMED_XML_TEXT", WERR_EVT_MALFORMED_XML_TEXT }, + { "WERR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL", WERR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL }, + { "WERR_EVT_CONFIGURATION_ERROR", WERR_EVT_CONFIGURATION_ERROR }, + { "WERR_EVT_QUERY_RESULT_STALE", WERR_EVT_QUERY_RESULT_STALE }, + { "WERR_EVT_QUERY_RESULT_INVALID_POSITION", WERR_EVT_QUERY_RESULT_INVALID_POSITION }, + { "WERR_EVT_NON_VALIDATING_MSXML", WERR_EVT_NON_VALIDATING_MSXML }, + { "WERR_EVT_FILTER_ALREADYSCOPED", WERR_EVT_FILTER_ALREADYSCOPED }, + { "WERR_EVT_FILTER_NOTELTSET", WERR_EVT_FILTER_NOTELTSET }, + { "WERR_EVT_FILTER_INVARG", WERR_EVT_FILTER_INVARG }, + { "WERR_EVT_FILTER_INVTEST", WERR_EVT_FILTER_INVTEST }, + { "WERR_EVT_FILTER_INVTYPE", WERR_EVT_FILTER_INVTYPE }, + { "WERR_EVT_FILTER_PARSEERR", WERR_EVT_FILTER_PARSEERR }, + { "WERR_EVT_FILTER_UNSUPPORTEDOP", WERR_EVT_FILTER_UNSUPPORTEDOP }, + { "WERR_EVT_FILTER_UNEXPECTEDTOKEN", WERR_EVT_FILTER_UNEXPECTEDTOKEN }, + { "WERR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL", WERR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL }, + { "WERR_EVT_INVALID_CHANNEL_PROPERTY_VALUE", WERR_EVT_INVALID_CHANNEL_PROPERTY_VALUE }, + { "WERR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE", WERR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE }, + { "WERR_EVT_CHANNEL_CANNOT_ACTIVATE", WERR_EVT_CHANNEL_CANNOT_ACTIVATE }, + { "WERR_EVT_FILTER_TOO_COMPLEX", WERR_EVT_FILTER_TOO_COMPLEX }, + { "WERR_EVT_MESSAGE_NOT_FOUND", WERR_EVT_MESSAGE_NOT_FOUND }, + { "WERR_EVT_MESSAGE_ID_NOT_FOUND", WERR_EVT_MESSAGE_ID_NOT_FOUND }, + { "WERR_EVT_UNRESOLVED_VALUE_INSERT", WERR_EVT_UNRESOLVED_VALUE_INSERT }, + { "WERR_EVT_UNRESOLVED_PARAMETER_INSERT", WERR_EVT_UNRESOLVED_PARAMETER_INSERT }, + { "WERR_EVT_MAX_INSERTS_REACHED", WERR_EVT_MAX_INSERTS_REACHED }, + { "WERR_EVT_EVENT_DEFINITION_NOT_OUND", WERR_EVT_EVENT_DEFINITION_NOT_OUND }, + { "WERR_EVT_MESSAGE_LOCALE_NOT_FOUND", WERR_EVT_MESSAGE_LOCALE_NOT_FOUND }, + { "WERR_EVT_VERSION_TOO_OLD", WERR_EVT_VERSION_TOO_OLD }, + { "WERR_EVT_VERSION_TOO_NEW", WERR_EVT_VERSION_TOO_NEW }, + { "WERR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY", WERR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY }, + { "WERR_EVT_PUBLISHER_DISABLED", WERR_EVT_PUBLISHER_DISABLED }, + { "WERR_EC_SUBSCRIPTION_CANNOT_ACTIVATE", WERR_EC_SUBSCRIPTION_CANNOT_ACTIVATE }, + { "WERR_EC_LOG_DISABLED", WERR_EC_LOG_DISABLED }, + { "WERR_MUI_FILE_NOT_FOUND", WERR_MUI_FILE_NOT_FOUND }, + { "WERR_MUI_INVALID_FILE", WERR_MUI_INVALID_FILE }, + { "WERR_MUI_INVALID_RC_CONFIG", WERR_MUI_INVALID_RC_CONFIG }, + { "WERR_MUI_INVALID_LOCALE_NAME", WERR_MUI_INVALID_LOCALE_NAME }, + { "WERR_MUI_INVALID_ULTIMATEFALLBACK_NAME", WERR_MUI_INVALID_ULTIMATEFALLBACK_NAME }, + { "WERR_MUI_FILE_NOT_LOADED", WERR_MUI_FILE_NOT_LOADED }, + { "WERR_RESOURCE_ENUM_USER_STOP", WERR_RESOURCE_ENUM_USER_STOP }, + { "WERR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED", WERR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED }, + { "WERR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME", WERR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME }, + { "WERR_MCA_INVALID_CAPABILITIES_STRING", WERR_MCA_INVALID_CAPABILITIES_STRING }, + { "WERR_MCA_INVALID_VCP_VERSION", WERR_MCA_INVALID_VCP_VERSION }, + { "WERR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION", WERR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION }, + { "WERR_MCA_MCCS_VERSION_MISMATCH", WERR_MCA_MCCS_VERSION_MISMATCH }, + { "WERR_MCA_UNSUPPORTED_MCCS_VERSION", WERR_MCA_UNSUPPORTED_MCCS_VERSION }, + { "WERR_MCA_INTERNAL_ERROR", WERR_MCA_INTERNAL_ERROR }, + { "WERR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED", WERR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED }, + { "WERR_MCA_UNSUPPORTED_COLOR_TEMPERATURE", WERR_MCA_UNSUPPORTED_COLOR_TEMPERATURE }, + { "WERR_AMBIGUOUS_SYSTEM_DEVICE", WERR_AMBIGUOUS_SYSTEM_DEVICE }, + { "WERR_SYSTEM_DEVICE_NOT_FOUND", WERR_SYSTEM_DEVICE_NOT_FOUND }, + /* END GENERATED-WIN32-ERROR-CODES */ { NULL, W_ERROR(0) } }; @@ -222,12 +2620,12 @@ const struct werror_str_struct dos_err_strs[] = { { WERR_NO_LOGON_SERVERS, "No logon servers found" }, { WERR_NO_SUCH_LOGON_SESSION, "No such logon session" }, { WERR_DOMAIN_CONTROLLER_NOT_FOUND, "A domain controller could not be found" }, - { WERR_DC_NOT_FOUND, "A domain controller could not be found" }, + { WERR_DCNOTFOUND, "A domain controller could not be found" }, { WERR_SETUP_NOT_JOINED, "Join failed" }, { WERR_SETUP_ALREADY_JOINED, "Machine is already joined" }, { WERR_SETUP_DOMAIN_CONTROLLER, "Machine is a Domain Controller" }, { WERR_LOGON_FAILURE, "Invalid logon credentials" }, - { WERR_USER_EXISTS, "User account already exists" }, + { WERR_USEREXISTS, "The user account already exists." }, { WERR_PASSWORD_MUST_CHANGE, "The password must be changed" }, { WERR_ACCOUNT_LOCKED_OUT, "Account locked out" }, { WERR_TIME_SKEW, "Time difference between client and server" }, @@ -240,7 +2638,2507 @@ const struct werror_str_struct dos_err_strs[] = { { WERR_INVALID_PRIMARY_GROUP, "The account's primary group is invalid" }, { WERR_DS_DRA_BAD_DN, "An invalid distinguished name was specified for this replication" }, { WERR_DS_DRA_BAD_NC, "An invalid naming context was specified for this replication operation" }, - { WERR_WRONG_PASSWORD, "The current password is incorrect" } + { WERR_WRONG_PASSWORD, "The current password is incorrect" }, + /***************************************************************************** + Auto-generated Win32 error from: + http://msdn.microsoft.com/en-us/library/cc231199%28PROT.10%29.aspx + *****************************************************************************/ + /* BEGIN GENERATED-WIN32-ERROR-CODES-DESC */ + { WERR_NERR_SUCCESS, "The operation completed successfully." }, + { WERR_INVALID_FUNCTION, "Incorrect function." }, + { WERR_FILE_NOT_FOUND, "The system cannot find the file specified." }, + { WERR_PATH_NOT_FOUND, "The system cannot find the path specified." }, + { WERR_TOO_MANY_OPEN_FILES, "The system cannot open the file." }, + { WERR_ACCESS_DENIED, "Access is denied." }, + { WERR_INVALID_HANDLE, "The handle is invalid." }, + { WERR_ARENA_TRASHED, "The storage control blocks were destroyed." }, + { WERR_NOT_ENOUGH_MEMORY, "Not enough storage is available to process this command." }, + { WERR_INVALID_BLOCK, "The storage control block address is invalid." }, + { WERR_BAD_ENVIRONMENT, "The environment is incorrect." }, + { WERR_BAD_FORMAT, "An attempt was made to load a program with an incorrect format." }, + { WERR_INVALID_ACCESS, "The access code is invalid." }, + { WERR_INVALID_DATA, "The data is invalid." }, + { WERR_OUTOFMEMORY, "Not enough storage is available to complete this operation." }, + { WERR_INVALID_DRIVE, "The system cannot find the drive specified." }, + { WERR_CURRENT_DIRECTORY, "The directory cannot be removed." }, + { WERR_NOT_SAME_DEVICE, "The system cannot move the file to a different disk drive." }, + { WERR_NO_MORE_FILES, "There are no more files." }, + { WERR_WRITE_PROTECT, "The media is write-protected." }, + { WERR_BAD_UNIT, "The system cannot find the device specified." }, + { WERR_NOT_READY, "The device is not ready." }, + { WERR_BAD_COMMAND, "The device does not recognize the command." }, + { WERR_CRC, "Data error (cyclic redundancy check)." }, + { WERR_BAD_LENGTH, "The program issued a command but the command length is incorrect." }, + { WERR_SEEK, "The drive cannot locate a specific area or track on the disk." }, + { WERR_NOT_DOS_DISK, "The specified disk cannot be accessed." }, + { WERR_SECTOR_NOT_FOUND, "The drive cannot find the sector requested." }, + { WERR_OUT_OF_PAPER, "The printer is out of paper." }, + { WERR_WRITE_FAULT, "The system cannot write to the specified device." }, + { WERR_READ_FAULT, "The system cannot read from the specified device." }, + { WERR_GEN_FAILURE, "A device attached to the system is not functioning." }, + { WERR_SHARING_VIOLATION, "The process cannot access the file because it is being used by another process." }, + { WERR_LOCK_VIOLATION, "The process cannot access the file because another process has locked a portion of the file." }, + { WERR_WRONG_DISK, "The wrong disk is in the drive. Insert %2 (Volume Serial Number: %3) into drive %1." }, + { WERR_SHARING_BUFFER_EXCEEDED, "Too many files opened for sharing." }, + { WERR_HANDLE_EOF, "Reached the end of the file." }, + { WERR_HANDLE_DISK_FULL, "The disk is full." }, + { WERR_NOT_SUPPORTED, "The request is not supported." }, + { WERR_REM_NOT_LIST, "Windows cannot find the network path. Verify that the network path is correct and the destination computer is not busy or turned off. If Windows still cannot find the network path, contact your network administrator." }, + { WERR_DUP_NAME, "You were not connected because a duplicate name exists on the network. Go to System in Control Panel to change the computer name, and then try again." }, + { WERR_BAD_NETPATH, "The network path was not found." }, + { WERR_NETWORK_BUSY, "The network is busy." }, + { WERR_DEV_NOT_EXIST, "The specified network resource or device is no longer available." }, + { WERR_TOO_MANY_CMDS, "The network BIOS command limit has been reached." }, + { WERR_ADAP_HDW_ERR, "A network adapter hardware error occurred." }, + { WERR_BAD_NET_RESP, "The specified server cannot perform the requested operation." }, + { WERR_UNEXP_NET_ERR, "An unexpected network error occurred." }, + { WERR_BAD_REM_ADAP, "The remote adapter is not compatible." }, + { WERR_PRINTQ_FULL, "The print queue is full." }, + { WERR_NO_SPOOL_SPACE, "Space to store the file waiting to be printed is not available on the server." }, + { WERR_PRINT_CANCELLED, "Your file waiting to be printed was deleted." }, + { WERR_NETNAME_DELETED, "The specified network name is no longer available." }, + { WERR_NETWORK_ACCESS_DENIED, "Network access is denied." }, + { WERR_BAD_DEV_TYPE, "The network resource type is not correct." }, + { WERR_BAD_NET_NAME, "The network name cannot be found." }, + { WERR_TOO_MANY_NAMES, "The name limit for the local computer network adapter card was exceeded." }, + { WERR_TOO_MANY_SESS, "The network BIOS session limit was exceeded." }, + { WERR_SHARING_PAUSED, "The remote server has been paused or is in the process of being started." }, + { WERR_REQ_NOT_ACCEP, "No more connections can be made to this remote computer at this time because the computer has accepted the maximum number of connections." }, + { WERR_REDIR_PAUSED, "The specified printer or disk device has been paused." }, + { WERR_FILE_EXISTS, "The file exists." }, + { WERR_CANNOT_MAKE, "The directory or file cannot be created." }, + { WERR_FAIL_I24, "Fail on INT 24." }, + { WERR_OUT_OF_STRUCTURES, "Storage to process this request is not available." }, + { WERR_ALREADY_ASSIGNED, "The local device name is already in use." }, + { WERR_INVALID_PASSWORD, "The specified network password is not correct." }, + { WERR_INVALID_PARAMETER, "The parameter is incorrect." }, + { WERR_NET_WRITE_FAULT, "A write fault occurred on the network." }, + { WERR_NO_PROC_SLOTS, "The system cannot start another process at this time." }, + { WERR_TOO_MANY_SEMAPHORES, "Cannot create another system semaphore." }, + { WERR_EXCL_SEM_ALREADY_OWNED, "The exclusive semaphore is owned by another process." }, + { WERR_SEM_IS_SET, "The semaphore is set and cannot be closed." }, + { WERR_TOO_MANY_SEM_REQUESTS, "The semaphore cannot be set again." }, + { WERR_INVALID_AT_INTERRUPT_TIME, "Cannot request exclusive semaphores at interrupt time." }, + { WERR_SEM_OWNER_DIED, "The previous ownership of this semaphore has ended." }, + { WERR_SEM_USER_LIMIT, "Insert the disk for drive %1." }, + { WERR_DISK_CHANGE, "The program stopped because an alternate disk was not inserted." }, + { WERR_DRIVE_LOCKED, "The disk is in use or locked by another process." }, + { WERR_BROKEN_PIPE, "The pipe has been ended." }, + { WERR_OPEN_FAILED, "The system cannot open the device or file specified." }, + { WERR_BUFFER_OVERFLOW, "The file name is too long." }, + { WERR_DISK_FULL, "There is not enough space on the disk." }, + { WERR_NO_MORE_SEARCH_HANDLES, "No more internal file identifiers are available." }, + { WERR_INVALID_TARGET_HANDLE, "The target internal file identifier is incorrect." }, + { WERR_INVALID_CATEGORY, "The Input Output Control (IOCTL) call made by the application program is not correct." }, + { WERR_INVALID_VERIFY_SWITCH, "The verify-on-write switch parameter value is not correct." }, + { WERR_BAD_DRIVER_LEVEL, "The system does not support the command requested." }, + { WERR_CALL_NOT_IMPLEMENTED, "This function is not supported on this system." }, + { WERR_SEM_TIMEOUT, "The semaphore time-out period has expired." }, + { WERR_INSUFFICIENT_BUFFER, "The data area passed to a system call is too small." }, + { WERR_INVALID_NAME, "The file name, directory name, or volume label syntax is incorrect." }, + { WERR_INVALID_LEVEL, "The system call level is not correct." }, + { WERR_NO_VOLUME_LABEL, "The disk has no volume label." }, + { WERR_MOD_NOT_FOUND, "The specified module could not be found." }, + { WERR_PROC_NOT_FOUND, "The specified procedure could not be found." }, + { WERR_WAIT_NO_CHILDREN, "There are no child processes to wait for." }, + { WERR_CHILD_NOT_COMPLETE, "The %1 application cannot be run in Win32 mode." }, + { WERR_DIRECT_ACCESS_HANDLE, "Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O." }, + { WERR_NEGATIVE_SEEK, "An attempt was made to move the file pointer before the beginning of the file." }, + { WERR_SEEK_ON_DEVICE, "The file pointer cannot be set on the specified device or file." }, + { WERR_NOT_SUBSTED, "The system tried to delete the substitution of a drive that is not substituted." }, + { WERR_JOIN_TO_JOIN, "The system tried to join a drive to a directory on a joined drive." }, + { WERR_SUBST_TO_SUBST, "The system tried to substitute a drive to a directory on a substituted drive." }, + { WERR_JOIN_TO_SUBST, "The system tried to join a drive to a directory on a substituted drive." }, + { WERR_SAME_DRIVE, "The system cannot join or substitute a drive to or for a directory on the same drive." }, + { WERR_DIR_NOT_ROOT, "The directory is not a subdirectory of the root directory." }, + { WERR_DIR_NOT_EMPTY, "The directory is not empty." }, + { WERR_IS_SUBST_PATH, "The path specified is being used in a substitute." }, + { WERR_IS_JOIN_PATH, "Not enough resources are available to process this command." }, + { WERR_PATH_BUSY, "The path specified cannot be used at this time." }, + { WERR_IS_SUBST_TARGET, "An attempt was made to join or substitute a drive for which a directory on the drive is the target of a previous substitute." }, + { WERR_SYSTEM_TRACE, "System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed." }, + { WERR_INVALID_EVENT_COUNT, "The number of specified semaphore events for DosMuxSemWait is not correct." }, + { WERR_TOO_MANY_MUXWAITERS, "DosMuxSemWait did not execute; too many semaphores are already set." }, + { WERR_INVALID_LIST_FORMAT, "The DosMuxSemWait list is not correct." }, + { WERR_LABEL_TOO_LONG, "The volume label you entered exceeds the label character limit of the destination file system." }, + { WERR_TOO_MANY_TCBS, "Cannot create another thread." }, + { WERR_SIGNAL_REFUSED, "The recipient process has refused the signal." }, + { WERR_DISCARDED, "The segment is already discarded and cannot be locked." }, + { WERR_NOT_LOCKED, "The segment is already unlocked." }, + { WERR_BAD_THREADID_ADDR, "The address for the thread ID is not correct." }, + { WERR_BAD_ARGUMENTS, "One or more arguments are not correct." }, + { WERR_BAD_PATHNAME, "The specified path is invalid." }, + { WERR_SIGNAL_PENDING, "A signal is already pending." }, + { WERR_MAX_THRDS_REACHED, "No more threads can be created in the system." }, + { WERR_LOCK_FAILED, "Unable to lock a region of a file." }, + { WERR_BUSY, "The requested resource is in use." }, + { WERR_CANCEL_VIOLATION, "A lock request was not outstanding for the supplied cancel region." }, + { WERR_ATOMIC_LOCKS_NOT_SUPPORTED, "The file system does not support atomic changes to the lock type." }, + { WERR_INVALID_SEGMENT_NUMBER, "The system detected a segment number that was not correct." }, + { WERR_INVALID_ORDINAL, "The operating system cannot run %1." }, + { WERR_ALREADY_EXISTS, "Cannot create a file when that file already exists." }, + { WERR_INVALID_FLAG_NUMBER, "The flag passed is not correct." }, + { WERR_SEM_NOT_FOUND, "The specified system semaphore name was not found." }, + { WERR_INVALID_STARTING_CODESEG, "The operating system cannot run %1." }, + { WERR_INVALID_STACKSEG, "The operating system cannot run %1." }, + { WERR_INVALID_MODULETYPE, "The operating system cannot run %1." }, + { WERR_INVALID_EXE_SIGNATURE, "Cannot run %1 in Win32 mode." }, + { WERR_EXE_MARKED_INVALID, "The operating system cannot run %1." }, + { WERR_BAD_EXE_FORMAT, "%1 is not a valid Win32 application." }, + { WERR_ITERATED_DATA_EXCEEDS_64K, "The operating system cannot run %1." }, + { WERR_INVALID_MINALLOCSIZE, "The operating system cannot run %1." }, + { WERR_DYNLINK_FROM_INVALID_RING, "The operating system cannot run this application program." }, + { WERR_IOPL_NOT_ENABLED, "The operating system is not presently configured to run this application." }, + { WERR_INVALID_SEGDPL, "The operating system cannot run %1." }, + { WERR_AUTODATASEG_EXCEEDS_64K, "The operating system cannot run this application program." }, + { WERR_RING2SEG_MUST_BE_MOVABLE, "The code segment cannot be greater than or equal to 64 KB." }, + { WERR_RELOC_CHAIN_XEEDS_SEGLIM, "The operating system cannot run %1." }, + { WERR_INFLOOP_IN_RELOC_CHAIN, "The operating system cannot run %1." }, + { WERR_ENVVAR_NOT_FOUND, "The system could not find the environment option that was entered." }, + { WERR_NO_SIGNAL_SENT, "No process in the command subtree has a signal handler." }, + { WERR_FILENAME_EXCED_RANGE, "The file name or extension is too long." }, + { WERR_RING2_STACK_IN_USE, "The ring 2 stack is in use." }, + { WERR_META_EXPANSION_TOO_LONG, "The asterisk (*) or question mark (?) global file name characters are entered incorrectly, or too many global file name characters are specified." }, + { WERR_INVALID_SIGNAL_NUMBER, "The signal being posted is not correct." }, + { WERR_THREAD_1_INACTIVE, "The signal handler cannot be set." }, + { WERR_LOCKED, "The segment is locked and cannot be reallocated." }, + { WERR_TOO_MANY_MODULES, "Too many dynamic-link modules are attached to this program or dynamic-link module." }, + { WERR_NESTING_NOT_ALLOWED, "Cannot nest calls to LoadModule." }, + { WERR_EXE_MACHINE_TYPE_MISMATCH, "This version of %1 is not compatible with the version of Windows you\'re running. Check your computer\'s system information to see whether you need an x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher." }, + { WERR_EXE_CANNOT_MODIFY_SIGNED_BINARY, "The image file %1 is signed, unable to modify." }, + { WERR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY, "The image file %1 is strong signed, unable to modify." }, + { WERR_FILE_CHECKED_OUT, "This file is checked out or locked for editing by another user." }, + { WERR_CHECKOUT_REQUIRED, "The file must be checked out before saving changes." }, + { WERR_BAD_FILE_TYPE, "The file type being saved or retrieved has been blocked." }, + { WERR_FILE_TOO_LARGE, "The file size exceeds the limit allowed and cannot be saved." }, + { WERR_FORMS_AUTH_REQUIRED, "Access denied. Before opening files in this location, you must first browse to the Web site and select the option to sign in automatically." }, + { WERR_VIRUS_INFECTED, "Operation did not complete successfully because the file contains a virus." }, + { WERR_VIRUS_DELETED, "This file contains a virus and cannot be opened. Due to the nature of this virus, the file has been removed from this location." }, + { WERR_PIPE_LOCAL, "The pipe is local." }, + { WERR_BAD_PIPE, "The pipe state is invalid." }, + { WERR_PIPE_BUSY, "All pipe instances are busy." }, + { WERR_NO_DATA, "The pipe is being closed." }, + { WERR_PIPE_NOT_CONNECTED, "No process is on the other end of the pipe." }, + { WERR_MORE_DATA, "More data is available." }, + { WERR_VC_DISCONNECTED, "The session was canceled." }, + { WERR_INVALID_EA_NAME, "The specified extended attribute name was invalid." }, + { WERR_EA_LIST_INCONSISTENT, "The extended attributes are inconsistent." }, + { WERR_WAIT_TIMEOUT, "The wait operation timed out." }, + { WERR_NO_MORE_ITEMS, "No more data is available." }, + { WERR_CANNOT_COPY, "The copy functions cannot be used." }, + { WERR_DIRECTORY, "The directory name is invalid." }, + { WERR_EAS_DIDNT_FIT, "The extended attributes did not fit in the buffer." }, + { WERR_EA_FILE_CORRUPT, "The extended attribute file on the mounted file system is corrupt." }, + { WERR_EA_TABLE_FULL, "The extended attribute table file is full." }, + { WERR_INVALID_EA_HANDLE, "The specified extended attribute handle is invalid." }, + { WERR_EAS_NOT_SUPPORTED, "The mounted file system does not support extended attributes." }, + { WERR_NOT_OWNER, "Attempt to release mutex not owned by caller." }, + { WERR_TOO_MANY_POSTS, "Too many posts were made to a semaphore." }, + { WERR_PARTIAL_COPY, "Only part of a ReadProcessMemory or WriteProcessMemory request was completed." }, + { WERR_OPLOCK_NOT_GRANTED, "The oplock request is denied." }, + { WERR_INVALID_OPLOCK_PROTOCOL, "An invalid oplock acknowledgment was received by the system." }, + { WERR_DISK_TOO_FRAGMENTED, "The volume is too fragmented to complete this operation." }, + { WERR_DELETE_PENDING, "The file cannot be opened because it is in the process of being deleted." }, + { WERR_MR_MID_NOT_FOUND, "The system cannot find message text for message number 0x%1 in the message file for %2." }, + { WERR_SCOPE_NOT_FOUND, "The scope specified was not found." }, + { WERR_FAIL_NOACTION_REBOOT, "No action was taken because a system reboot is required." }, + { WERR_FAIL_SHUTDOWN, "The shutdown operation failed." }, + { WERR_FAIL_RESTART, "The restart operation failed." }, + { WERR_MAX_SESSIONS_REACHED, "The maximum number of sessions has been reached." }, + { WERR_THREAD_MODE_ALREADY_BACKGROUND, "The thread is already in background processing mode." }, + { WERR_THREAD_MODE_NOT_BACKGROUND, "The thread is not in background processing mode." }, + { WERR_PROCESS_MODE_ALREADY_BACKGROUND, "The process is already in background processing mode." }, + { WERR_PROCESS_MODE_NOT_BACKGROUND, "The process is not in background processing mode." }, + { WERR_INVALID_ADDRESS, "Attempt to access invalid address." }, + { WERR_USER_PROFILE_LOAD, "User profile cannot be loaded." }, + { WERR_ARITHMETIC_OVERFLOW, "Arithmetic result exceeded 32 bits." }, + { WERR_PIPE_CONNECTED, "There is a process on the other end of the pipe." }, + { WERR_PIPE_LISTENING, "Waiting for a process to open the other end of the pipe." }, + { WERR_VERIFIER_STOP, "Application verifier has found an error in the current process." }, + { WERR_ABIOS_ERROR, "An error occurred in the ABIOS subsystem." }, + { WERR_WX86_WARNING, "A warning occurred in the WX86 subsystem." }, + { WERR_WX86_ERROR, "An error occurred in the WX86 subsystem." }, + { WERR_TIMER_NOT_CANCELED, "An attempt was made to cancel or set a timer that has an associated asynchronous procedure call (APC) and the subject thread is not the thread that originally set the timer with an associated APC routine." }, + { WERR_UNWIND, "Unwind exception code." }, + { WERR_BAD_STACK, "An invalid or unaligned stack was encountered during an unwind operation." }, + { WERR_INVALID_UNWIND_TARGET, "An invalid unwind target was encountered during an unwind operation." }, + { WERR_INVALID_PORT_ATTRIBUTES, "Invalid object attributes specified to NtCreatePort or invalid port attributes specified to NtConnectPort." }, + { WERR_PORT_MESSAGE_TOO_LONG, "Length of message passed to NtRequestPort or NtRequestWaitReplyPort was longer than the maximum message allowed by the port." }, + { WERR_INVALID_QUOTA_LOWER, "An attempt was made to lower a quota limit below the current usage." }, + { WERR_DEVICE_ALREADY_ATTACHED, "An attempt was made to attach to a device that was already attached to another device." }, + { WERR_INSTRUCTION_MISALIGNMENT, "An attempt was made to execute an instruction at an unaligned address, and the host system does not support unaligned instruction references." }, + { WERR_PROFILING_NOT_STARTED, "Profiling not started." }, + { WERR_PROFILING_NOT_STOPPED, "Profiling not stopped." }, + { WERR_COULD_NOT_INTERPRET, "The passed ACL did not contain the minimum required information." }, + { WERR_PROFILING_AT_LIMIT, "The number of active profiling objects is at the maximum and no more may be started." }, + { WERR_CANT_WAIT, "Used to indicate that an operation cannot continue without blocking for I/O." }, + { WERR_CANT_TERMINATE_SELF, "Indicates that a thread attempted to terminate itself by default (called NtTerminateThread with NULL) and it was the last thread in the current process." }, + { WERR_UNEXPECTED_MM_CREATE_ERR, "If an MM error is returned that is not defined in the standard FsRtl filter, it is converted to one of the following errors that is guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception." }, + { WERR_UNEXPECTED_MM_MAP_ERROR, "If an MM error is returned that is not defined in the standard FsRtl filter, it is converted to one of the following errors that is guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception." }, + { WERR_UNEXPECTED_MM_EXTEND_ERR, "If an MM error is returned that is not defined in the standard FsRtl filter, it is converted to one of the following errors that is guaranteed to be in the filter. In this case, information is lost; however, the filter correctly handles the exception." }, + { WERR_BAD_FUNCTION_TABLE, "A malformed function table was encountered during an unwind operation." }, + { WERR_NO_GUID_TRANSLATION, "Indicates that an attempt was made to assign protection to a file system file or directory and one of the SIDs in the security descriptor could not be translated into a GUID that could be stored by the file system. This causes the protection attempt to fail, which may cause a file creation attempt to fail." }, + { WERR_INVALID_LDT_SIZE, "Indicates that an attempt was made to grow a local domain table (LDT) by setting its size, or that the size was not an even number of selectors." }, + { WERR_INVALID_LDT_OFFSET, "Indicates that the starting value for the LDT information was not an integral multiple of the selector size." }, + { WERR_INVALID_LDT_DESCRIPTOR, "Indicates that the user supplied an invalid descriptor when trying to set up LDT descriptors." }, + { WERR_TOO_MANY_THREADS, "Indicates a process has too many threads to perform the requested action. For example, assignment of a primary token may only be performed when a process has zero or one threads." }, + { WERR_THREAD_NOT_IN_PROCESS, "An attempt was made to operate on a thread within a specific process, but the thread specified is not in the process specified." }, + { WERR_PAGEFILE_QUOTA_EXCEEDED, "Page file quota was exceeded." }, + { WERR_LOGON_SERVER_CONFLICT, "The Netlogon service cannot start because another Netlogon service running in the domain conflicts with the specified role." }, + { WERR_SYNCHRONIZATION_REQUIRED, "The Security Accounts Manager (SAM) database on a Windows Server is significantly out of synchronization with the copy on the domain controller. A complete synchronization is required." }, + { WERR_NET_OPEN_FAILED, "The NtCreateFile API failed. This error should never be returned to an application, it is a place holder for the Windows LAN Manager Redirector to use in its internal error mapping routines." }, + { WERR_IO_PRIVILEGE_FAILED, "{Privilege Failed} The I/O permissions for the process could not be changed." }, + { WERR_CONTROL_C_EXIT, "{Application Exit by CTRL+C} The application terminated as a result of a CTRL+C." }, + { WERR_MISSING_SYSTEMFILE, "{Missing System File} The required system file %hs is bad or missing." }, + { WERR_UNHANDLED_EXCEPTION, "{Application Error} The exception %s (0x%08lx) occurred in the application at location 0x%08lx." }, + { WERR_APP_INIT_FAILURE, "{Application Error} The application failed to initialize properly (0x%lx). Click OK to terminate the application." }, + { WERR_PAGEFILE_CREATE_FAILED, "{Unable to Create Paging File} The creation of the paging file %hs failed (%lx). The requested size was %ld." }, + { WERR_INVALID_IMAGE_HASH, "The hash for the image cannot be found in the system catalogs. The image is likely corrupt or the victim of tampering." }, + { WERR_NO_PAGEFILE, "{No Paging File Specified} No paging file was specified in the system configuration." }, + { WERR_ILLEGAL_FLOAT_CONTEXT, "{EXCEPTION} A real-mode application issued a floating-point instruction, and floating-point hardware is not present." }, + { WERR_NO_EVENT_PAIR, "An event pair synchronization operation was performed using the thread-specific client/server event pair object, but no event pair object was associated with the thread." }, + { WERR_DOMAIN_CTRLR_CONFIG_ERROR, "A Windows Server has an incorrect configuration." }, + { WERR_ILLEGAL_CHARACTER, "An illegal character was encountered. For a multibyte character set, this includes a lead byte without a succeeding trail byte. For the Unicode character set, this includes the characters 0xFFFF and 0xFFFE." }, + { WERR_UNDEFINED_CHARACTER, "The Unicode character is not defined in the Unicode character set installed on the system." }, + { WERR_FLOPPY_VOLUME, "The paging file cannot be created on a floppy disk." }, + { WERR_BIOS_FAILED_TO_CONNECT_INTERRUPT, "The system bios failed to connect a system interrupt to the device or bus for which the device is connected." }, + { WERR_BACKUP_CONTROLLER, "This operation is only allowed for the primary domain controller (PDC) of the domain." }, + { WERR_MUTANT_LIMIT_EXCEEDED, "An attempt was made to acquire a mutant such that its maximum count would have been exceeded." }, + { WERR_FS_DRIVER_REQUIRED, "A volume has been accessed for which a file system driver is required that has not yet been loaded." }, + { WERR_CANNOT_LOAD_REGISTRY_FILE, "{Registry File Failure} The registry cannot load the hive (file): %hs or its log or alternate. It is corrupt, absent, or not writable." }, + { WERR_DEBUG_ATTACH_FAILED, "{Unexpected Failure in DebugActiveProcess} An unexpected failure occurred while processing a DebugActiveProcess API request. You may choose OK to terminate the process, or Cancel to ignore the error." }, + { WERR_SYSTEM_PROCESS_TERMINATED, "{Fatal System Error} The %hs system process terminated unexpectedly with a status of 0x%08x (0x%08x 0x%08x). The system has been shut down." }, + { WERR_DATA_NOT_ACCEPTED, "{Data Not Accepted} The transport driver interface (TDI) client could not handle the data received during an indication." }, + { WERR_VDM_HARD_ERROR, "The NT Virtual DOS Machine (NTVDM) encountered a hard error." }, + { WERR_DRIVER_CANCEL_TIMEOUT, "{Cancel Timeout} The driver %hs failed to complete a canceled I/O request in the allotted time." }, + { WERR_REPLY_MESSAGE_MISMATCH, "{Reply Message Mismatch} An attempt was made to reply to a local procedure call (LPC) message, but the thread specified by the client ID in the message was not waiting on that message." }, + { WERR_LOST_WRITEBEHIND_DATA, "{Delayed Write Failed} Windows was unable to save all the data for the file %hs. The data has been lost. This error may be caused by a failure of your computer hardware or network connection. Try to save this file elsewhere." }, + { WERR_CLIENT_SERVER_PARAMETERS_INVALID, "The parameters passed to the server in the client/server shared memory window were invalid. Too much data may have been put in the shared memory window." }, + { WERR_NOT_TINY_STREAM, "The stream is not a tiny stream." }, + { WERR_STACK_OVERFLOW_READ, "The request must be handled by the stack overflow code." }, + { WERR_CONVERT_TO_LARGE, "Internal OFS status codes indicating how an allocation operation is handled. Either it is retried after the containing onode is moved or the extent stream is converted to a large stream." }, + { WERR_FOUND_OUT_OF_SCOPE, "The attempt to find the object found an object matching by ID on the volume but it is out of the scope of the handle used for the operation." }, + { WERR_ALLOCATE_BUCKET, "The bucket array must be grown. Retry transaction after doing so." }, + { WERR_MARSHALL_OVERFLOW, "The user/kernel marshaling buffer has overflowed." }, + { WERR_INVALID_VARIANT, "The supplied variant structure contains invalid data." }, + { WERR_BAD_COMPRESSION_BUFFER, "The specified buffer contains ill-formed data." }, + { WERR_AUDIT_FAILED, "{Audit Failed} An attempt to generate a security audit failed." }, + { WERR_TIMER_RESOLUTION_NOT_SET, "The timer resolution was not previously set by the current process." }, + { WERR_INSUFFICIENT_LOGON_INFO, "There is insufficient account information to log you on." }, + { WERR_BAD_DLL_ENTRYPOINT, "{Invalid DLL Entrypoint} The dynamic link library %hs is not written correctly. The stack pointer has been left in an inconsistent state. The entry point should be declared as WINAPI or STDCALL. Select YES to fail the DLL load. Select NO to continue execution. Selecting NO may cause the application to operate incorrectly." }, + { WERR_BAD_SERVICE_ENTRYPOINT, "{Invalid Service Callback Entrypoint} The %hs service is not written correctly. The stack pointer has been left in an inconsistent state. The callback entry point should be declared as WINAPI or STDCALL. Selecting OK will cause the service to continue operation. However, the service process may operate incorrectly." }, + { WERR_IP_ADDRESS_CONFLICT1, "There is an IP address conflict with another system on the network." }, + { WERR_IP_ADDRESS_CONFLICT2, "There is an IP address conflict with another system on the network." }, + { WERR_REGISTRY_QUOTA_LIMIT, "{Low On Registry Space} The system has reached the maximum size allowed for the system part of the registry. Additional storage requests will be ignored." }, + { WERR_NO_CALLBACK_ACTIVE, "A callback return system service cannot be executed when no callback is active." }, + { WERR_PWD_TOO_SHORT, "The password provided is too short to meet the policy of your user account. Choose a longer password." }, + { WERR_PWD_TOO_RECENT, "The policy of your user account does not allow you to change passwords too frequently. This is done to prevent users from changing back to a familiar, but potentially discovered, password. If you feel your password has been compromised, contact your administrator immediately to have a new one assigned." }, + { WERR_PWD_HISTORY_CONFLICT, "You have attempted to change your password to one that you have used in the past. The policy of your user account does not allow this. Select a password that you have not previously used." }, + { WERR_UNSUPPORTED_COMPRESSION, "The specified compression format is unsupported." }, + { WERR_INVALID_HW_PROFILE, "The specified hardware profile configuration is invalid." }, + { WERR_INVALID_PLUGPLAY_DEVICE_PATH, "The specified Plug and Play registry device path is invalid." }, + { WERR_QUOTA_LIST_INCONSISTENT, "The specified quota list is internally inconsistent with its descriptor." }, + { WERR_EVALUATION_EXPIRATION, "{Windows Evaluation Notification} The evaluation period for this installation of Windows has expired. This system will shut down in 1 hour. To restore access to this installation of Windows, upgrade this installation using a licensed distribution of this product." }, + { WERR_ILLEGAL_DLL_RELOCATION, "{Illegal System DLL Relocation} The system DLL %hs was relocated in memory. The application will not run properly. The relocation occurred because the DLL %hs occupied an address range reserved for Windows system DLLs. The vendor supplying the DLL should be contacted for a new DLL." }, + { WERR_DLL_INIT_FAILED_LOGOFF, "{DLL Initialization Failed} The application failed to initialize because the window station is shutting down." }, + { WERR_VALIDATE_CONTINUE, "The validation process needs to continue on to the next step." }, + { WERR_NO_MORE_MATCHES, "There are no more matches for the current index enumeration." }, + { WERR_RANGE_LIST_CONFLICT, "The range could not be added to the range list because of a conflict." }, + { WERR_SERVER_SID_MISMATCH, "The server process is running under a SID different than that required by the client." }, + { WERR_CANT_ENABLE_DENY_ONLY, "A group marked use for deny only cannot be enabled." }, + { WERR_FLOAT_MULTIPLE_FAULTS, "{EXCEPTION} Multiple floating point faults." }, + { WERR_FLOAT_MULTIPLE_TRAPS, "{EXCEPTION} Multiple floating point traps." }, + { WERR_NOINTERFACE, "The requested interface is not supported." }, + { WERR_DRIVER_FAILED_SLEEP, "{System Standby Failed} The driver %hs does not support standby mode. Updating this driver may allow the system to go to standby mode." }, + { WERR_CORRUPT_SYSTEM_FILE, "The system file %1 has become corrupt and has been replaced." }, + { WERR_COMMITMENT_MINIMUM, "{Virtual Memory Minimum Too Low} Your system is low on virtual memory. Windows is increasing the size of your virtual memory paging file. During this process, memory requests for some applications may be denied. For more information, see Help." }, + { WERR_PNP_RESTART_ENUMERATION, "A device was removed so enumeration must be restarted." }, + { WERR_SYSTEM_IMAGE_BAD_SIGNATURE, "{Fatal System Error} The system image %s is not properly signed. The file has been replaced with the signed file. The system has been shut down." }, + { WERR_PNP_REBOOT_REQUIRED, "Device will not start without a reboot." }, + { WERR_INSUFFICIENT_POWER, "There is not enough power to complete the requested operation." }, + { WERR_MULTIPLE_FAULT_VIOLATION, "ERROR_MULTIPLE_FAULT_VIOLATION" }, + { WERR_SYSTEM_SHUTDOWN, "The system is in the process of shutting down." }, + { WERR_PORT_NOT_SET, "An attempt to remove a process DebugPort was made, but a port was not already associated with the process." }, + { WERR_DS_VERSION_CHECK_FAILURE, "This version of Windows is not compatible with the behavior version of directory forest, domain, or domain controller." }, + { WERR_RANGE_NOT_FOUND, "The specified range could not be found in the range list." }, + { WERR_NOT_SAFE_MODE_DRIVER, "The driver was not loaded because the system is booting into safe mode." }, + { WERR_FAILED_DRIVER_ENTRY, "The driver was not loaded because it failed its initialization call." }, + { WERR_DEVICE_ENUMERATION_ERROR, "The device encountered an error while applying power or reading the device configuration. This may be caused by a failure of your hardware or by a poor connection." }, + { WERR_MOUNT_POINT_NOT_RESOLVED, "The create operation failed because the name contained at least one mount point that resolves to a volume to which the specified device object is not attached." }, + { WERR_INVALID_DEVICE_OBJECT_PARAMETER, "The device object parameter is either not a valid device object or is not attached to the volume specified by the file name." }, + { WERR_MCA_OCCURED, "A machine check error has occurred. Check the system event log for additional information." }, + { WERR_DRIVER_DATABASE_ERROR, "There was an error [%2] processing the driver database." }, + { WERR_SYSTEM_HIVE_TOO_LARGE, "The system hive size has exceeded its limit." }, + { WERR_DRIVER_FAILED_PRIOR_UNLOAD, "The driver could not be loaded because a previous version of the driver is still in memory." }, + { WERR_VOLSNAP_PREPARE_HIBERNATE, "{Volume Shadow Copy Service} Wait while the Volume Shadow Copy Service prepares volume %hs for hibernation." }, + { WERR_HIBERNATION_FAILURE, "The system has failed to hibernate (the error code is %hs). Hibernation will be disabled until the system is restarted." }, + { WERR_FILE_SYSTEM_LIMITATION, "The requested operation could not be completed due to a file system limitation." }, + { WERR_ASSERTION_FAILURE, "An assertion failure has occurred." }, + { WERR_ACPI_ERROR, "An error occurred in the Advanced Configuration and Power Interface (ACPI) subsystem." }, + { WERR_WOW_ASSERTION, "WOW assertion error." }, + { WERR_PNP_BAD_MPS_TABLE, "A device is missing in the system BIOS MultiProcessor Specification (MPS) table. This device will not be used. Contact your system vendor for system BIOS update." }, + { WERR_PNP_TRANSLATION_FAILED, "A translator failed to translate resources." }, + { WERR_PNP_IRQ_TRANSLATION_FAILED, "An interrupt request (IRQ) translator failed to translate resources." }, + { WERR_PNP_INVALID_ID, "Driver %2 returned invalid ID for a child device (%3)." }, + { WERR_WAKE_SYSTEM_DEBUGGER, "{Kernel Debugger Awakened} the system debugger was awakened by an interrupt." }, + { WERR_HANDLES_CLOSED, "{Handles Closed} Handles to objects have been automatically closed because of the requested operation." }, + { WERR_EXTRANEOUS_INFORMATION, "{Too Much Information} The specified ACL contained more information than was expected." }, + { WERR_RXACT_COMMIT_NECESSARY, "This warning level status indicates that the transaction state already exists for the registry subtree, but that a transaction commit was previously aborted. The commit has NOT been completed, but it has not been rolled back either (so it may still be committed if desired)." }, + { WERR_MEDIA_CHECK, "{Media Changed} The media may have changed." }, + { WERR_GUID_SUBSTITUTION_MADE, "{GUID Substitution} During the translation of a GUID to a Windows SID, no administratively defined GUID prefix was found. A substitute prefix was used, which will not compromise system security. However, this may provide more restrictive access than intended." }, + { WERR_STOPPED_ON_SYMLINK, "The create operation stopped after reaching a symbolic link." }, + { WERR_LONGJUMP, "A long jump has been executed." }, + { WERR_PLUGPLAY_QUERY_VETOED, "The Plug and Play query operation was not successful." }, + { WERR_UNWIND_CONSOLIDATE, "A frame consolidation has been executed." }, + { WERR_REGISTRY_HIVE_RECOVERED, "{Registry Hive Recovered} Registry hive (file): %hs was corrupted and it has been recovered. Some data might have been lost." }, + { WERR_DLL_MIGHT_BE_INSECURE, "The application is attempting to run executable code from the module %hs. This may be insecure. An alternative, %hs, is available. Should the application use the secure module %hs?" }, + { WERR_DLL_MIGHT_BE_INCOMPATIBLE, "The application is loading executable code from the module %hs. This is secure, but may be incompatible with previous releases of the operating system. An alternative, %hs, is available. Should the application use the secure module %hs?" }, + { WERR_DBG_EXCEPTION_NOT_HANDLED, "Debugger did not handle the exception." }, + { WERR_DBG_REPLY_LATER, "Debugger will reply later." }, + { WERR_DBG_UNABLE_TO_PROVIDE_HANDLE, "Debugger cannot provide handle." }, + { WERR_DBG_TERMINATE_THREAD, "Debugger terminated thread." }, + { WERR_DBG_TERMINATE_PROCESS, "Debugger terminated process." }, + { WERR_DBG_CONTROL_C, "Debugger got control C." }, + { WERR_DBG_PRINTEXCEPTION_C, "Debugger printed exception on control C." }, + { WERR_DBG_RIPEXCEPTION, "Debugger received Routing Information Protocol (RIP) exception." }, + { WERR_DBG_CONTROL_BREAK, "Debugger received control break." }, + { WERR_DBG_COMMAND_EXCEPTION, "Debugger command communication exception." }, + { WERR_OBJECT_NAME_EXISTS, "{Object Exists} An attempt was made to create an object and the object name already existed." }, + { WERR_THREAD_WAS_SUSPENDED, "{Thread Suspended} A thread termination occurred while the thread was suspended. The thread was resumed and termination proceeded." }, + { WERR_IMAGE_NOT_AT_BASE, "{Image Relocated} An image file could not be mapped at the address specified in the image file. Local fixes must be performed on this image." }, + { WERR_RXACT_STATE_CREATED, "This informational level status indicates that a specified registry subtree transaction state did not yet exist and had to be created." }, + { WERR_SEGMENT_NOTIFICATION, "{Segment Load} A virtual DOS machine (VDM) is loading, unloading, or moving an MS-DOS or Win16 program segment image. An exception is raised so a debugger can load, unload, or track symbols and breakpoints within these 16-bit segments." }, + { WERR_BAD_CURRENT_DIRECTORY, "{Invalid Current Directory} The process cannot switch to the startup current directory %hs. Select OK to set current directory to %hs, or select CANCEL to exit." }, + { WERR_FT_READ_RECOVERY_FROM_BACKUP, "{Redundant Read} To satisfy a read request, the NT fault-tolerant file system successfully read the requested data from a redundant copy. This was done because the file system encountered a failure on a member of the fault-tolerant volume, but it was unable to reassign the failing area of the device." }, + { WERR_FT_WRITE_RECOVERY, "{Redundant Write} To satisfy a write request, the Windows NT fault-tolerant file system successfully wrote a redundant copy of the information. This was done because the file system encountered a failure on a member of the fault-tolerant volume, but it was not able to reassign the failing area of the device." }, + { WERR_IMAGE_MACHINE_TYPE_MISMATCH, "{Machine Type Mismatch} The image file %hs is valid, but is for a machine type other than the current machine. Select OK to continue, or CANCEL to fail the DLL load." }, + { WERR_RECEIVE_PARTIAL, "{Partial Data Received} The network transport returned partial data to its client. The remaining data will be sent later." }, + { WERR_RECEIVE_EXPEDITED, "{Expedited Data Received} The network transport returned data to its client that was marked as expedited by the remote system." }, + { WERR_RECEIVE_PARTIAL_EXPEDITED, "{Partial Expedited Data Received} The network transport returned partial data to its client and this data was marked as expedited by the remote system. The remaining data will be sent later." }, + { WERR_EVENT_DONE, "{TDI Event Done} The TDI indication has completed successfully." }, + { WERR_EVENT_PENDING, "{TDI Event Pending} The TDI indication has entered the pending state." }, + { WERR_CHECKING_FILE_SYSTEM, "Checking file system on %wZ." }, + { WERR_FATAL_APP_EXIT, "{Fatal Application Exit} %hs." }, + { WERR_PREDEFINED_HANDLE, "The specified registry key is referenced by a predefined handle." }, + { WERR_WAS_UNLOCKED, "{Page Unlocked} The page protection of a locked page was changed to \'No Access\' and the page was unlocked from memory and from the process." }, + { WERR_SERVICE_NOTIFICATION, "%hs" }, + { WERR_WAS_LOCKED, "{Page Locked} One of the pages to lock was already locked." }, + { WERR_LOG_HARD_ERROR, "Application popup: %1 : %2" }, + { WERR_ALREADY_WIN32, "The value already corresponds with a Win 32 error code." }, + { WERR_IMAGE_MACHINE_TYPE_MISMATCH_EXE, "{Machine Type Mismatch} The image file %hs is valid, but is for a machine type other than the current machine." }, + { WERR_NO_YIELD_PERFORMED, "A yield execution was performed and no thread was available to run." }, + { WERR_TIMER_RESUME_IGNORED, "The resume flag to a timer API was ignored." }, + { WERR_ARBITRATION_UNHANDLED, "The arbiter has deferred arbitration of these resources to its parent" }, + { WERR_CARDBUS_NOT_SUPPORTED, "The inserted CardBus device cannot be started because of a configuration error on %hs\".\"" }, + { WERR_MP_PROCESSOR_MISMATCH, "The CPUs in this multiprocessor system are not all the same revision level. To use all processors the operating system restricts itself to the features of the least capable processor in the system. If problems occur with this system, contact the CPU manufacturer to see if this mix of processors is supported." }, + { WERR_HIBERNATED, "The system was put into hibernation." }, + { WERR_RESUME_HIBERNATION, "The system was resumed from hibernation." }, + { WERR_FIRMWARE_UPDATED, "Windows has detected that the system firmware (BIOS) was updated (previous firmware date = %2, current firmware date %3)." }, + { WERR_DRIVERS_LEAKING_LOCKED_PAGES, "A device driver is leaking locked I/O pages, causing system degradation. The system has automatically enabled a tracking code to try and catch the culprit." }, + { WERR_WAKE_SYSTEM, "The system has awoken." }, + { WERR_WAIT_1, "ERROR_WAIT_1" }, + { WERR_WAIT_2, "ERROR_WAIT_2" }, + { WERR_WAIT_3, "ERROR_WAIT_3" }, + { WERR_WAIT_63, "ERROR_WAIT_63" }, + { WERR_ABANDONED_WAIT_0, "ERROR_ABANDONED_WAIT_0" }, + { WERR_ABANDONED_WAIT_63, "ERROR_ABANDONED_WAIT_63" }, + { WERR_USER_APC, "ERROR_USER_APC" }, + { WERR_KERNEL_APC, "ERROR_KERNEL_APC" }, + { WERR_ALERTED, "ERROR_ALERTED" }, + { WERR_ELEVATION_REQUIRED, "The requested operation requires elevation." }, + { WERR_REPARSE, "A reparse should be performed by the object manager because the name of the file resulted in a symbolic link." }, + { WERR_OPLOCK_BREAK_IN_PROGRESS, "An open/create operation completed while an oplock break is underway." }, + { WERR_VOLUME_MOUNTED, "A new volume has been mounted by a file system." }, + { WERR_RXACT_COMMITTED, "This success level status indicates that the transaction state already exists for the registry subtree, but that a transaction commit was previously aborted. The commit has now been completed." }, + { WERR_NOTIFY_CLEANUP, "This indicates that a notify change request has been completed due to closing the handle which made the notify change request." }, + { WERR_PRIMARY_TRANSPORT_CONNECT_FAILED, "{Connect Failure on Primary Transport} An attempt was made to connect to the remote server %hs on the primary transport, but the connection failed. The computer was able to connect on a secondary transport." }, + { WERR_PAGE_FAULT_TRANSITION, "Page fault was a transition fault." }, + { WERR_PAGE_FAULT_DEMAND_ZERO, "Page fault was a demand zero fault." }, + { WERR_PAGE_FAULT_COPY_ON_WRITE, "Page fault was a demand zero fault." }, + { WERR_PAGE_FAULT_GUARD_PAGE, "Page fault was a demand zero fault." }, + { WERR_PAGE_FAULT_PAGING_FILE, "Page fault was satisfied by reading from a secondary storage device." }, + { WERR_CACHE_PAGE_LOCKED, "Cached page was locked during operation." }, + { WERR_CRASH_DUMP, "Crash dump exists in paging file." }, + { WERR_BUFFER_ALL_ZEROS, "Specified buffer contains all zeros." }, + { WERR_REPARSE_OBJECT, "A reparse should be performed by the object manager because the name of the file resulted in a symbolic link." }, + { WERR_RESOURCE_REQUIREMENTS_CHANGED, "The device has succeeded a query-stop and its resource requirements have changed." }, + { WERR_TRANSLATION_COMPLETE, "The translator has translated these resources into the global space and no further translations should be performed." }, + { WERR_NOTHING_TO_TERMINATE, "A process being terminated has no threads to terminate." }, + { WERR_PROCESS_NOT_IN_JOB, "The specified process is not part of a job." }, + { WERR_PROCESS_IN_JOB, "The specified process is part of a job." }, + { WERR_VOLSNAP_HIBERNATE_READY, "{Volume Shadow Copy Service} The system is now ready for hibernation." }, + { WERR_FSFILTER_OP_COMPLETED_SUCCESSFULLY, "A file system or file system filter driver has successfully completed an FsFilter operation." }, + { WERR_INTERRUPT_VECTOR_ALREADY_CONNECTED, "The specified interrupt vector was already connected." }, + { WERR_INTERRUPT_STILL_CONNECTED, "The specified interrupt vector is still connected." }, + { WERR_WAIT_FOR_OPLOCK, "An operation is blocked waiting for an oplock." }, + { WERR_DBG_EXCEPTION_HANDLED, "Debugger handled exception." }, + { WERR_DBG_CONTINUE, "Debugger continued." }, + { WERR_CALLBACK_POP_STACK, "An exception occurred in a user mode callback and the kernel callback frame should be removed." }, + { WERR_COMPRESSION_DISABLED, "Compression is disabled for this volume." }, + { WERR_CANTFETCHBACKWARDS, "The data provider cannot fetch backward through a result set." }, + { WERR_CANTSCROLLBACKWARDS, "The data provider cannot scroll backward through a result set." }, + { WERR_ROWSNOTRELEASED, "The data provider requires that previously fetched data is released before asking for more data." }, + { WERR_BAD_ACCESSOR_FLAGS, "The data provider was not able to interpret the flags set for a column binding in an accessor." }, + { WERR_ERRORS_ENCOUNTERED, "One or more errors occurred while processing the request." }, + { WERR_NOT_CAPABLE, "The implementation is not capable of performing the request." }, + { WERR_REQUEST_OUT_OF_SEQUENCE, "The client of a component requested an operation that is not valid given the state of the component instance." }, + { WERR_VERSION_PARSE_ERROR, "A version number could not be parsed." }, + { WERR_BADSTARTPOSITION, "The iterator\'s start position is invalid." }, + { WERR_MEMORY_HARDWARE, "The hardware has reported an uncorrectable memory error." }, + { WERR_DISK_REPAIR_DISABLED, "The attempted operation required self-healing to be enabled." }, + { WERR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE, "The Desktop heap encountered an error while allocating session memory. There is more information in the system event log." }, + { WERR_SYSTEM_POWERSTATE_TRANSITION, "The system power state is transitioning from %2 to %3." }, + { WERR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION, "The system power state is transitioning from %2 to %3 but could enter %4." }, + { WERR_MCA_EXCEPTION, "A thread is getting dispatched with MCA EXCEPTION because of MCA." }, + { WERR_ACCESS_AUDIT_BY_POLICY, "Access to %1 is monitored by policy rule %2." }, + { WERR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY, "Access to %1 has been restricted by your administrator by policy rule %2." }, + { WERR_ABANDON_HIBERFILE, "A valid hibernation file has been invalidated and should be abandoned." }, + { WERR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED, "{Delayed Write Failed} Windows was unable to save all the data for the file %hs; the data has been lost. This error may be caused by network connectivity issues. Try to save this file elsewhere." }, + { WERR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR, "{Delayed Write Failed} Windows was unable to save all the data for the file %hs; the data has been lost. This error was returned by the server on which the file exists. Try to save this file elsewhere." }, + { WERR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR, "{Delayed Write Failed} Windows was unable to save all the data for the file %hs; the data has been lost. This error may be caused if the device has been removed or the media is write-protected." }, + { WERR_EA_ACCESS_DENIED, "Access to the extended attribute was denied." }, + { WERR_OPERATION_ABORTED, "The I/O operation has been aborted because of either a thread exit or an application request." }, + { WERR_IO_INCOMPLETE, "Overlapped I/O event is not in a signaled state." }, + { WERR_IO_PENDING, "Overlapped I/O operation is in progress." }, + { WERR_NOACCESS, "Invalid access to memory location." }, + { WERR_SWAPERROR, "Error performing in-page operation." }, + { WERR_STACK_OVERFLOW, "Recursion too deep; the stack overflowed." }, + { WERR_INVALID_MESSAGE, "The window cannot act on the sent message." }, + { WERR_CAN_NOT_COMPLETE, "Cannot complete this function." }, + { WERR_INVALID_FLAGS, "Invalid flags." }, + { WERR_UNRECOGNIZED_VOLUME, "The volume does not contain a recognized file system. Be sure that all required file system drivers are loaded and that the volume is not corrupted." }, + { WERR_FILE_INVALID, "The volume for a file has been externally altered so that the opened file is no longer valid." }, + { WERR_FULLSCREEN_MODE, "The requested operation cannot be performed in full-screen mode." }, + { WERR_NO_TOKEN, "An attempt was made to reference a token that does not exist." }, + { WERR_BADDB, "The configuration registry database is corrupt." }, + { WERR_BADKEY, "The configuration registry key is invalid." }, + { WERR_CANTOPEN, "The configuration registry key could not be opened." }, + { WERR_CANTREAD, "The configuration registry key could not be read." }, + { WERR_CANTWRITE, "The configuration registry key could not be written." }, + { WERR_REGISTRY_RECOVERED, "One of the files in the registry database had to be recovered by use of a log or alternate copy. The recovery was successful." }, + { WERR_REGISTRY_CORRUPT, "The registry is corrupted. The structure of one of the files containing registry data is corrupted, or the system\'s memory image of the file is corrupted, or the file could not be recovered because the alternate copy or log was absent or corrupted." }, + { WERR_REGISTRY_IO_FAILED, "An I/O operation initiated by the registry failed and cannot be recovered. The registry could not read in, write out, or flush one of the files that contain the system\'s image of the registry." }, + { WERR_NOT_REGISTRY_FILE, "The system attempted to load or restore a file into the registry, but the specified file is not in a registry file format." }, + { WERR_KEY_DELETED, "Illegal operation attempted on a registry key that has been marked for deletion." }, + { WERR_NO_LOG_SPACE, "System could not allocate the required space in a registry log." }, + { WERR_KEY_HAS_CHILDREN, "Cannot create a symbolic link in a registry key that already has subkeys or values." }, + { WERR_CHILD_MUST_BE_VOLATILE, "Cannot create a stable subkey under a volatile parent key." }, + { WERR_NOTIFY_ENUM_DIR, "A notify change request is being completed and the information is not being returned in the caller\'s buffer. The caller now needs to enumerate the files to find the changes." }, + { WERR_DEPENDENT_SERVICES_RUNNING, "A stop control has been sent to a service that other running services are dependent on." }, + { WERR_INVALID_SERVICE_CONTROL, "The requested control is not valid for this service." }, + { WERR_SERVICE_REQUEST_TIMEOUT, "The service did not respond to the start or control request in a timely fashion." }, + { WERR_SERVICE_NO_THREAD, "A thread could not be created for the service." }, + { WERR_SERVICE_DATABASE_LOCKED, "The service database is locked." }, + { WERR_SERVICE_ALREADY_RUNNING, "An instance of the service is already running." }, + { WERR_INVALID_SERVICE_ACCOUNT, "The account name is invalid or does not exist, or the password is invalid for the account name specified." }, + { WERR_SERVICE_DISABLED, "The service cannot be started, either because it is disabled or because it has no enabled devices associated with it." }, + { WERR_CIRCULAR_DEPENDENCY, "Circular service dependency was specified." }, + { WERR_SERVICE_DOES_NOT_EXIST, "The specified service does not exist as an installed service." }, + { WERR_SERVICE_CANNOT_ACCEPT_CTRL, "The service cannot accept control messages at this time." }, + { WERR_SERVICE_NOT_ACTIVE, "The service has not been started." }, + { WERR_FAILED_SERVICE_CONTROLLER_CONNECT, "The service process could not connect to the service controller." }, + { WERR_EXCEPTION_IN_SERVICE, "An exception occurred in the service when handling the control request." }, + { WERR_DATABASE_DOES_NOT_EXIST, "The database specified does not exist." }, + { WERR_SERVICE_SPECIFIC_ERROR, "The service has returned a service-specific error code." }, + { WERR_PROCESS_ABORTED, "The process terminated unexpectedly." }, + { WERR_SERVICE_DEPENDENCY_FAIL, "The dependency service or group failed to start." }, + { WERR_SERVICE_LOGON_FAILED, "The service did not start due to a logon failure." }, + { WERR_SERVICE_START_HANG, "After starting, the service hung in a start-pending state." }, + { WERR_INVALID_SERVICE_LOCK, "The specified service database lock is invalid." }, + { WERR_SERVICE_MARKED_FOR_DELETE, "The specified service has been marked for deletion." }, + { WERR_SERVICE_EXISTS, "The specified service already exists." }, + { WERR_ALREADY_RUNNING_LKG, "The system is currently running with the last-known-good configuration." }, + { WERR_SERVICE_DEPENDENCY_DELETED, "The dependency service does not exist or has been marked for deletion." }, + { WERR_BOOT_ALREADY_ACCEPTED, "The current boot has already been accepted for use as the last-known-good control set." }, + { WERR_SERVICE_NEVER_STARTED, "No attempts to start the service have been made since the last boot." }, + { WERR_DUPLICATE_SERVICE_NAME, "The name is already in use as either a service name or a service display name." }, + { WERR_DIFFERENT_SERVICE_ACCOUNT, "The account specified for this service is different from the account specified for other services running in the same process." }, + { WERR_CANNOT_DETECT_DRIVER_FAILURE, "Failure actions can only be set for Win32 services, not for drivers." }, + { WERR_CANNOT_DETECT_PROCESS_ABORT, "This service runs in the same process as the service control manager. Therefore, the service control manager cannot take action if this service\'s process terminates unexpectedly." }, + { WERR_NO_RECOVERY_PROGRAM, "No recovery program has been configured for this service." }, + { WERR_SERVICE_NOT_IN_EXE, "The executable program that this service is configured to run in does not implement the service." }, + { WERR_NOT_SAFEBOOT_SERVICE, "This service cannot be started in Safe Mode." }, + { WERR_END_OF_MEDIA, "The physical end of the tape has been reached." }, + { WERR_FILEMARK_DETECTED, "A tape access reached a filemark." }, + { WERR_BEGINNING_OF_MEDIA, "The beginning of the tape or a partition was encountered." }, + { WERR_SETMARK_DETECTED, "A tape access reached the end of a set of files." }, + { WERR_NO_DATA_DETECTED, "No more data is on the tape." }, + { WERR_PARTITION_FAILURE, "Tape could not be partitioned." }, + { WERR_INVALID_BLOCK_LENGTH, "When accessing a new tape of a multivolume partition, the current block size is incorrect." }, + { WERR_DEVICE_NOT_PARTITIONED, "Tape partition information could not be found when loading a tape." }, + { WERR_UNABLE_TO_LOCK_MEDIA, "Unable to lock the media eject mechanism." }, + { WERR_UNABLE_TO_UNLOAD_MEDIA, "Unable to unload the media." }, + { WERR_MEDIA_CHANGED, "The media in the drive may have changed." }, + { WERR_BUS_RESET, "The I/O bus was reset." }, + { WERR_NO_MEDIA_IN_DRIVE, "No media in drive." }, + { WERR_NO_UNICODE_TRANSLATION, "No mapping for the Unicode character exists in the target multibyte code page." }, + { WERR_DLL_INIT_FAILED, "A DLL initialization routine failed." }, + { WERR_SHUTDOWN_IN_PROGRESS, "A system shutdown is in progress." }, + { WERR_NO_SHUTDOWN_IN_PROGRESS, "Unable to abort the system shutdown because no shutdown was in progress." }, + { WERR_IO_DEVICE, "The request could not be performed because of an I/O device error." }, + { WERR_SERIAL_NO_DEVICE, "No serial device was successfully initialized. The serial driver will unload." }, + { WERR_IRQ_BUSY, "Unable to open a device that was sharing an IRQ with other devices. At least one other device that uses that IRQ was already opened." }, + { WERR_MORE_WRITES, "A serial I/O operation was completed by another write to the serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.)" }, + { WERR_COUNTER_TIMEOUT, "A serial I/O operation completed because the time-out period expired. (The IOCTL_SERIAL_XOFF_COUNTER did not reach zero.)" }, + { WERR_FLOPPY_ID_MARK_NOT_FOUND, "No ID address mark was found on the floppy disk." }, + { WERR_FLOPPY_WRONG_CYLINDER, "Mismatch between the floppy disk sector ID field and the floppy disk controller track address." }, + { WERR_FLOPPY_UNKNOWN_ERROR, "The floppy disk controller reported an error that is not recognized by the floppy disk driver." }, + { WERR_FLOPPY_BAD_REGISTERS, "The floppy disk controller returned inconsistent results in its registers." }, + { WERR_DISK_RECALIBRATE_FAILED, "While accessing the hard disk, a recalibrate operation failed, even after retries." }, + { WERR_DISK_OPERATION_FAILED, "While accessing the hard disk, a disk operation failed even after retries." }, + { WERR_DISK_RESET_FAILED, "While accessing the hard disk, a disk controller reset was needed, but that also failed." }, + { WERR_EOM_OVERFLOW, "Physical end of tape encountered." }, + { WERR_NOT_ENOUGH_SERVER_MEMORY, "Not enough server storage is available to process this command." }, + { WERR_POSSIBLE_DEADLOCK, "A potential deadlock condition has been detected." }, + { WERR_MAPPED_ALIGNMENT, "The base address or the file offset specified does not have the proper alignment." }, + { WERR_SET_POWER_STATE_VETOED, "An attempt to change the system power state was vetoed by another application or driver." }, + { WERR_SET_POWER_STATE_FAILED, "The system BIOS failed an attempt to change the system power state." }, + { WERR_TOO_MANY_LINKS, "An attempt was made to create more links on a file than the file system supports." }, + { WERR_OLD_WIN_VERSION, "The specified program requires a newer version of Windows." }, + { WERR_APP_WRONG_OS, "The specified program is not a Windows or MS-DOS program." }, + { WERR_SINGLE_INSTANCE_APP, "Cannot start more than one instance of the specified program." }, + { WERR_RMODE_APP, "The specified program was written for an earlier version of Windows." }, + { WERR_INVALID_DLL, "One of the library files needed to run this application is damaged." }, + { WERR_NO_ASSOCIATION, "No application is associated with the specified file for this operation." }, + { WERR_DDE_FAIL, "An error occurred in sending the command to the application." }, + { WERR_DLL_NOT_FOUND, "One of the library files needed to run this application cannot be found." }, + { WERR_NO_MORE_USER_HANDLES, "The current process has used all of its system allowance of handles for Windows manager objects." }, + { WERR_MESSAGE_SYNC_ONLY, "The message can be used only with synchronous operations." }, + { WERR_SOURCE_ELEMENT_EMPTY, "The indicated source element has no media." }, + { WERR_DESTINATION_ELEMENT_FULL, "The indicated destination element already contains media." }, + { WERR_ILLEGAL_ELEMENT_ADDRESS, "The indicated element does not exist." }, + { WERR_MAGAZINE_NOT_PRESENT, "The indicated element is part of a magazine that is not present." }, + { WERR_DEVICE_REINITIALIZATION_NEEDED, "The indicated device requires re-initialization due to hardware errors." }, + { WERR_DEVICE_REQUIRES_CLEANING, "The device has indicated that cleaning is required before further operations are attempted." }, + { WERR_DEVICE_DOOR_OPEN, "The device has indicated that its door is open." }, + { WERR_DEVICE_NOT_CONNECTED, "The device is not connected." }, + { WERR_NOT_FOUND, "Element not found." }, + { WERR_NO_MATCH, "There was no match for the specified key in the index." }, + { WERR_SET_NOT_FOUND, "The property set specified does not exist on the object." }, + { WERR_POINT_NOT_FOUND, "The point passed to GetMouseMovePoints is not in the buffer." }, + { WERR_NO_TRACKING_SERVICE, "The tracking (workstation) service is not running." }, + { WERR_NO_VOLUME_ID, "The volume ID could not be found." }, + { WERR_UNABLE_TO_REMOVE_REPLACED, "Unable to remove the file to be replaced." }, + { WERR_UNABLE_TO_MOVE_REPLACEMENT, "Unable to move the replacement file to the file to be replaced. The file to be replaced has retained its original name." }, + { WERR_UNABLE_TO_MOVE_REPLACEMENT_2, "Unable to move the replacement file to the file to be replaced. The file to be replaced has been renamed using the backup name." }, + { WERR_JOURNAL_DELETE_IN_PROGRESS, "The volume change journal is being deleted." }, + { WERR_JOURNAL_NOT_ACTIVE, "The volume change journal is not active." }, + { WERR_POTENTIAL_FILE_FOUND, "A file was found, but it may not be the correct file." }, + { WERR_JOURNAL_ENTRY_DELETED, "The journal entry has been deleted from the journal." }, + { WERR_SHUTDOWN_IS_SCHEDULED, "A system shutdown has already been scheduled." }, + { WERR_SHUTDOWN_USERS_LOGGED_ON, "The system shutdown cannot be initiated because there are other users logged on to the computer." }, + { WERR_BAD_DEVICE, "The specified device name is invalid." }, + { WERR_CONNECTION_UNAVAIL, "The device is not currently connected but it is a remembered connection." }, + { WERR_DEVICE_ALREADY_REMEMBERED, "The local device name has a remembered connection to another network resource." }, + { WERR_NO_NET_OR_BAD_PATH, "The network path was either typed incorrectly, does not exist, or the network provider is not currently available. Try retyping the path or contact your network administrator." }, + { WERR_BAD_PROVIDER, "The specified network provider name is invalid." }, + { WERR_CANNOT_OPEN_PROFILE, "Unable to open the network connection profile." }, + { WERR_BAD_PROFILE, "The network connection profile is corrupted." }, + { WERR_NOT_CONTAINER, "Cannot enumerate a noncontainer." }, + { WERR_EXTENDED_ERROR, "An extended error has occurred." }, + { WERR_INVALID_GROUPNAME, "The format of the specified group name is invalid." }, + { WERR_INVALID_COMPUTERNAME, "The format of the specified computer name is invalid." }, + { WERR_INVALID_EVENTNAME, "The format of the specified event name is invalid." }, + { WERR_INVALID_DOMAINNAME, "The format of the specified domain name is invalid." }, + { WERR_INVALID_SERVICENAME, "The format of the specified service name is invalid." }, + { WERR_INVALID_NETNAME, "The format of the specified network name is invalid." }, + { WERR_INVALID_SHARENAME, "The format of the specified share name is invalid." }, + { WERR_INVALID_PASSWORDNAME, "The format of the specified password is invalid." }, + { WERR_INVALID_MESSAGENAME, "The format of the specified message name is invalid." }, + { WERR_INVALID_MESSAGEDEST, "The format of the specified message destination is invalid." }, + { WERR_SESSION_CREDENTIAL_CONFLICT, "Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again." }, + { WERR_REMOTE_SESSION_LIMIT_EXCEEDED, "An attempt was made to establish a session to a network server, but there are already too many sessions established to that server." }, + { WERR_DUP_DOMAINNAME, "The workgroup or domain name is already in use by another computer on the network." }, + { WERR_NO_NETWORK, "The network is not present or not started." }, + { WERR_CANCELLED, "The operation was canceled by the user." }, + { WERR_USER_MAPPED_FILE, "The requested operation cannot be performed on a file with a user-mapped section open." }, + { WERR_CONNECTION_REFUSED, "The remote system refused the network connection." }, + { WERR_GRACEFUL_DISCONNECT, "The network connection was gracefully closed." }, + { WERR_ADDRESS_ALREADY_ASSOCIATED, "The network transport endpoint already has an address associated with it." }, + { WERR_ADDRESS_NOT_ASSOCIATED, "An address has not yet been associated with the network endpoint." }, + { WERR_CONNECTION_INVALID, "An operation was attempted on a nonexistent network connection." }, + { WERR_CONNECTION_ACTIVE, "An invalid operation was attempted on an active network connection." }, + { WERR_NETWORK_UNREACHABLE, "The network location cannot be reached. For information about network troubleshooting, see Windows Help." }, + { WERR_HOST_UNREACHABLE, "The network location cannot be reached. For information about network troubleshooting, see Windows Help." }, + { WERR_PROTOCOL_UNREACHABLE, "The network location cannot be reached. For information about network troubleshooting, see Windows Help." }, + { WERR_PORT_UNREACHABLE, "No service is operating at the destination network endpoint on the remote system." }, + { WERR_REQUEST_ABORTED, "The request was aborted." }, + { WERR_CONNECTION_ABORTED, "The network connection was aborted by the local system." }, + { WERR_RETRY, "The operation could not be completed. A retry should be performed." }, + { WERR_CONNECTION_COUNT_LIMIT, "A connection to the server could not be made because the limit on the number of concurrent connections for this account has been reached." }, + { WERR_LOGIN_TIME_RESTRICTION, "Attempting to log on during an unauthorized time of day for this account." }, + { WERR_LOGIN_WKSTA_RESTRICTION, "The account is not authorized to log on from this station." }, + { WERR_INCORRECT_ADDRESS, "The network address could not be used for the operation requested." }, + { WERR_ALREADY_REGISTERED, "The service is already registered." }, + { WERR_SERVICE_NOT_FOUND, "The specified service does not exist." }, + { WERR_NOT_AUTHENTICATED, "The operation being requested was not performed because the user has not been authenticated." }, + { WERR_NOT_LOGGED_ON, "The operation being requested was not performed because the user has not logged on to the network. The specified service does not exist." }, + { WERR_CONTINUE, "Continue with work in progress." }, + { WERR_ALREADY_INITIALIZED, "An attempt was made to perform an initialization operation when initialization has already been completed." }, + { WERR_NO_MORE_DEVICES, "No more local devices." }, + { WERR_NO_SUCH_SITE, "The specified site does not exist." }, + { WERR_DOMAIN_CONTROLLER_EXISTS, "A domain controller with the specified name already exists." }, + { WERR_ONLY_IF_CONNECTED, "This operation is supported only when you are connected to the server." }, + { WERR_OVERRIDE_NOCHANGES, "The group policy framework should call the extension even if there are no changes." }, + { WERR_BAD_USER_PROFILE, "The specified user does not have a valid profile." }, + { WERR_NOT_SUPPORTED_ON_SBS, "This operation is not supported on a computer running Windows Server 2003 for Small Business Server." }, + { WERR_SERVER_SHUTDOWN_IN_PROGRESS, "The server machine is shutting down." }, + { WERR_HOST_DOWN, "The remote system is not available. For information about network troubleshooting, see Windows Help." }, + { WERR_NON_ACCOUNT_SID, "The security identifier provided is not from an account domain." }, + { WERR_NON_DOMAIN_SID, "The security identifier provided does not have a domain component." }, + { WERR_APPHELP_BLOCK, "AppHelp dialog canceled, thus preventing the application from starting." }, + { WERR_ACCESS_DISABLED_BY_POLICY, "This program is blocked by Group Policy. For more information, contact your system administrator." }, + { WERR_REG_NAT_CONSUMPTION, "A program attempt to use an invalid register value. Normally caused by an uninitialized register. This error is Itanium specific." }, + { WERR_CSCSHARE_OFFLINE, "The share is currently offline or does not exist." }, + { WERR_PKINIT_FAILURE, "The Kerberos protocol encountered an error while validating the KDC certificate during smartcard logon. There is more information in the system event log." }, + { WERR_SMARTCARD_SUBSYSTEM_FAILURE, "The Kerberos protocol encountered an error while attempting to utilize the smartcard subsystem." }, + { WERR_DOWNGRADE_DETECTED, "The system detected a possible attempt to compromise security. Ensure that you can contact the server that authenticated you." }, + { WERR_MACHINE_LOCKED, "The machine is locked and cannot be shut down without the force option." }, + { WERR_CALLBACK_SUPPLIED_INVALID_DATA, "An application-defined callback gave invalid data when called." }, + { WERR_SYNC_FOREGROUND_REFRESH_REQUIRED, "The Group Policy framework should call the extension in the synchronous foreground policy refresh." }, + { WERR_DRIVER_BLOCKED, "This driver has been blocked from loading." }, + { WERR_INVALID_IMPORT_OF_NON_DLL, "A DLL referenced a module that was neither a DLL nor the process\'s executable image." }, + { WERR_ACCESS_DISABLED_WEBBLADE, "Windows cannot open this program because it has been disabled." }, + { WERR_ACCESS_DISABLED_WEBBLADE_TAMPER, "Windows cannot open this program because the license enforcement system has been tampered with or become corrupted." }, + { WERR_RECOVERY_FAILURE, "A transaction recover failed." }, + { WERR_ALREADY_FIBER, "The current thread has already been converted to a fiber." }, + { WERR_ALREADY_THREAD, "The current thread has already been converted from a fiber." }, + { WERR_STACK_BUFFER_OVERRUN, "The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application." }, + { WERR_PARAMETER_QUOTA_EXCEEDED, "Data present in one of the parameters is more than the function can operate on." }, + { WERR_DEBUGGER_INACTIVE, "An attempt to perform an operation on a debug object failed because the object is in the process of being deleted." }, + { WERR_DELAY_LOAD_FAILED, "An attempt to delay-load a .dll or get a function address in a delay-loaded .dll failed." }, + { WERR_VDM_DISALLOWED, "%1 is a 16-bit application. You do not have permissions to execute 16-bit applications. Check your permissions with your system administrator." }, + { WERR_UNIDENTIFIED_ERROR, "Insufficient information exists to identify the cause of failure." }, + { WERR_BEYOND_VDL, "The operation occurred beyond the valid data length of the file." }, + { WERR_INCOMPATIBLE_SERVICE_SID_TYPE, "The service start failed because one or more services in the same process have an incompatible service SID type setting. A service with a restricted service SID type can only coexist in the same process with other services with a restricted SID type." }, + { WERR_DRIVER_PROCESS_TERMINATED, "The process hosting the driver for this device has been terminated." }, + { WERR_IMPLEMENTATION_LIMIT, "An operation attempted to exceed an implementation-defined limit." }, + { WERR_PROCESS_IS_PROTECTED, "Either the target process, or the target thread\'s containing process, is a protected process." }, + { WERR_SERVICE_NOTIFY_CLIENT_LAGGING, "The service notification client is lagging too far behind the current state of services in the machine." }, + { WERR_DISK_QUOTA_EXCEEDED, "An operation failed because the storage quota was exceeded." }, + { WERR_CONTENT_BLOCKED, "An operation failed because the content was blocked." }, + { WERR_INCOMPATIBLE_SERVICE_PRIVILEGE, "A privilege that the service requires to function properly does not exist in the service account configuration. You may use the Services Microsoft Management Console (MMC) snap-in (Services.msc) and the Local Security Settings MMC snap-in (Secpol.msc) to view the service configuration and the account configuration." }, + { WERR_INVALID_LABEL, "Indicates a particular SID may not be assigned as the label of an object." }, + { WERR_NOT_ALL_ASSIGNED, "Not all privileges or groups referenced are assigned to the caller." }, + { WERR_SOME_NOT_MAPPED, "Some mapping between account names and SIDs was not done." }, + { WERR_NO_QUOTAS_FOR_ACCOUNT, "No system quota limits are specifically set for this account." }, + { WERR_LOCAL_USER_SESSION_KEY, "No encryption key is available. A well-known encryption key was returned." }, + { WERR_NULL_LM_PASSWORD, "The password is too complex to be converted to a LAN Manager password. The LAN Manager password returned is a null string." }, + { WERR_UNKNOWN_REVISION, "The revision level is unknown." }, + { WERR_REVISION_MISMATCH, "Indicates two revision levels are incompatible." }, + { WERR_INVALID_OWNER, "This SID may not be assigned as the owner of this object." }, + { WERR_INVALID_PRIMARY_GROUP, "This SID may not be assigned as the primary group of an object." }, + { WERR_NO_IMPERSONATION_TOKEN, "An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client." }, + { WERR_CANT_DISABLE_MANDATORY, "The group may not be disabled." }, + { WERR_NO_LOGON_SERVERS, "There are currently no logon servers available to service the logon request." }, + { WERR_NO_SUCH_LOGON_SESSION, "A specified logon session does not exist. It may already have been terminated." }, + { WERR_NO_SUCH_PRIVILEGE, "A specified privilege does not exist." }, + { WERR_PRIVILEGE_NOT_HELD, "A required privilege is not held by the client." }, + { WERR_INVALID_ACCOUNT_NAME, "The name provided is not a properly formed account name." }, + { WERR_USER_EXISTS, "The specified account already exists." }, + { WERR_NO_SUCH_USER, "The specified account does not exist." }, + { WERR_GROUP_EXISTS, "The specified group already exists." }, + { WERR_NO_SUCH_GROUP, "The specified group does not exist." }, + { WERR_MEMBER_IN_GROUP, "Either the specified user account is already a member of the specified group, or the specified group cannot be deleted because it contains a member." }, + { WERR_MEMBER_NOT_IN_GROUP, "The specified user account is not a member of the specified group account." }, + { WERR_LAST_ADMIN, "The last remaining administration account cannot be disabled or deleted." }, + { WERR_WRONG_PASSWORD, "Unable to update the password. The value provided as the current password is incorrect." }, + { WERR_ILL_FORMED_PASSWORD, "Unable to update the password. The value provided for the new password contains values that are not allowed in passwords." }, + { WERR_PASSWORD_RESTRICTION, "Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain." }, + { WERR_LOGON_FAILURE, "Logon failure: Unknown user name or bad password." }, + { WERR_ACCOUNT_RESTRICTION, "Logon failure: User account restriction. Possible reasons are blank passwords not allowed, logon hour restrictions, or a policy restriction has been enforced." }, + { WERR_INVALID_LOGON_HOURS, "Logon failure: Account logon time restriction violation." }, + { WERR_INVALID_WORKSTATION, "Logon failure: User not allowed to log on to this computer." }, + { WERR_PASSWORD_EXPIRED, "Logon failure: The specified account password has expired." }, + { WERR_ACCOUNT_DISABLED, "Logon failure: Account currently disabled." }, + { WERR_NONE_MAPPED, "No mapping between account names and SIDs was done." }, + { WERR_TOO_MANY_LUIDS_REQUESTED, "Too many local user identifiers (LUIDs) were requested at one time." }, + { WERR_LUIDS_EXHAUSTED, "No more LUIDs are available." }, + { WERR_INVALID_SUB_AUTHORITY, "The sub-authority part of an SID is invalid for this particular use." }, + { WERR_INVALID_ACL, "The ACL structure is invalid." }, + { WERR_INVALID_SID, "The SID structure is invalid." }, + { WERR_INVALID_SECURITY_DESCR, "The security descriptor structure is invalid." }, + { WERR_BAD_INHERITANCE_ACL, "The inherited ACL or ACE could not be built." }, + { WERR_SERVER_DISABLED, "The server is currently disabled." }, + { WERR_SERVER_NOT_DISABLED, "The server is currently enabled." }, + { WERR_INVALID_ID_AUTHORITY, "The value provided was an invalid value for an identifier authority." }, + { WERR_ALLOTTED_SPACE_EXCEEDED, "No more memory is available for security information updates." }, + { WERR_INVALID_GROUP_ATTRIBUTES, "The specified attributes are invalid, or incompatible with the attributes for the group as a whole." }, + { WERR_BAD_IMPERSONATION_LEVEL, "Either a required impersonation level was not provided, or the provided impersonation level is invalid." }, + { WERR_CANT_OPEN_ANONYMOUS, "Cannot open an anonymous level security token." }, + { WERR_BAD_VALIDATION_CLASS, "The validation information class requested was invalid." }, + { WERR_BAD_TOKEN_TYPE, "The type of the token is inappropriate for its attempted use." }, + { WERR_NO_SECURITY_ON_OBJECT, "Unable to perform a security operation on an object that has no associated security." }, + { WERR_CANT_ACCESS_DOMAIN_INFO, "Configuration information could not be read from the domain controller, either because the machine is unavailable, or access has been denied." }, + { WERR_INVALID_SERVER_STATE, "The SAM or local security authority (LSA) server was in the wrong state to perform the security operation." }, + { WERR_INVALID_DOMAIN_STATE, "The domain was in the wrong state to perform the security operation." }, + { WERR_INVALID_DOMAIN_ROLE, "This operation is only allowed for the PDC of the domain." }, + { WERR_NO_SUCH_DOMAIN, "The specified domain either does not exist or could not be contacted." }, + { WERR_DOMAIN_EXISTS, "The specified domain already exists." }, + { WERR_DOMAIN_LIMIT_EXCEEDED, "An attempt was made to exceed the limit on the number of domains per server." }, + { WERR_INTERNAL_DB_CORRUPTION, "Unable to complete the requested operation because of either a catastrophic media failure or a data structure corruption on the disk." }, + { WERR_INTERNAL_ERROR, "An internal error occurred." }, + { WERR_GENERIC_NOT_MAPPED, "Generic access types were contained in an access mask that should already be mapped to nongeneric types." }, + { WERR_BAD_DESCRIPTOR_FORMAT, "A security descriptor is not in the right format (absolute or self-relative)." }, + { WERR_NOT_LOGON_PROCESS, "The requested action is restricted for use by logon processes only. The calling process has not registered as a logon process." }, + { WERR_LOGON_SESSION_EXISTS, "Cannot start a new logon session with an ID that is already in use." }, + { WERR_NO_SUCH_PACKAGE, "A specified authentication package is unknown." }, + { WERR_BAD_LOGON_SESSION_STATE, "The logon session is not in a state that is consistent with the requested operation." }, + { WERR_LOGON_SESSION_COLLISION, "The logon session ID is already in use." }, + { WERR_INVALID_LOGON_TYPE, "A logon request contained an invalid logon type value." }, + { WERR_CANNOT_IMPERSONATE, "Unable to impersonate using a named pipe until data has been read from that pipe." }, + { WERR_RXACT_INVALID_STATE, "The transaction state of a registry subtree is incompatible with the requested operation." }, + { WERR_RXACT_COMMIT_FAILURE, "An internal security database corruption has been encountered." }, + { WERR_SPECIAL_ACCOUNT, "Cannot perform this operation on built-in accounts." }, + { WERR_SPECIAL_GROUP, "Cannot perform this operation on this built-in special group." }, + { WERR_SPECIAL_USER, "Cannot perform this operation on this built-in special user." }, + { WERR_MEMBERS_PRIMARY_GROUP, "The user cannot be removed from a group because the group is currently the user\'s primary group." }, + { WERR_TOKEN_ALREADY_IN_USE, "The token is already in use as a primary token." }, + { WERR_NO_SUCH_ALIAS, "The specified local group does not exist." }, + { WERR_MEMBER_NOT_IN_ALIAS, "The specified account name is not a member of the group." }, + { WERR_MEMBER_IN_ALIAS, "The specified account name is already a member of the group." }, + { WERR_ALIAS_EXISTS, "The specified local group already exists." }, + { WERR_LOGON_NOT_GRANTED, "Logon failure: The user has not been granted the requested logon type at this computer." }, + { WERR_TOO_MANY_SECRETS, "The maximum number of secrets that may be stored in a single system has been exceeded." }, + { WERR_SECRET_TOO_LONG, "The length of a secret exceeds the maximum length allowed." }, + { WERR_INTERNAL_DB_ERROR, "The local security authority database contains an internal inconsistency." }, + { WERR_TOO_MANY_CONTEXT_IDS, "During a logon attempt, the user\'s security context accumulated too many SIDs." }, + { WERR_LOGON_TYPE_NOT_GRANTED, "Logon failure: The user has not been granted the requested logon type at this computer." }, + { WERR_NT_CROSS_ENCRYPTION_REQUIRED, "A cross-encrypted password is necessary to change a user password." }, + { WERR_NO_SUCH_MEMBER, "A member could not be added to or removed from the local group because the member does not exist." }, + { WERR_INVALID_MEMBER, "A new member could not be added to a local group because the member has the wrong account type." }, + { WERR_TOO_MANY_SIDS, "Too many SIDs have been specified." }, + { WERR_LM_CROSS_ENCRYPTION_REQUIRED, "A cross-encrypted password is necessary to change this user password." }, + { WERR_NO_INHERITANCE, "Indicates an ACL contains no inheritable components." }, + { WERR_FILE_CORRUPT, "The file or directory is corrupted and unreadable." }, + { WERR_DISK_CORRUPT, "The disk structure is corrupted and unreadable." }, + { WERR_NO_USER_SESSION_KEY, "There is no user session key for the specified logon session." }, + { WERR_LICENSE_QUOTA_EXCEEDED, "The service being accessed is licensed for a particular number of connections. No more connections can be made to the service at this time because the service has accepted the maximum number of connections." }, + { WERR_WRONG_TARGET_NAME, "Logon failure: The target account name is incorrect." }, + { WERR_MUTUAL_AUTH_FAILED, "Mutual authentication failed. The server\'s password is out of date at the domain controller." }, + { WERR_TIME_SKEW, "There is a time and/or date difference between the client and server." }, + { WERR_CURRENT_DOMAIN_NOT_ALLOWED, "This operation cannot be performed on the current domain." }, + { WERR_INVALID_WINDOW_HANDLE, "Invalid window handle." }, + { WERR_INVALID_MENU_HANDLE, "Invalid menu handle." }, + { WERR_INVALID_CURSOR_HANDLE, "Invalid cursor handle." }, + { WERR_INVALID_ACCEL_HANDLE, "Invalid accelerator table handle." }, + { WERR_INVALID_HOOK_HANDLE, "Invalid hook handle." }, + { WERR_INVALID_DWP_HANDLE, "Invalid handle to a multiple-window position structure." }, + { WERR_TLW_WITH_WSCHILD, "Cannot create a top-level child window." }, + { WERR_CANNOT_FIND_WND_CLASS, "Cannot find window class." }, + { WERR_WINDOW_OF_OTHER_THREAD, "Invalid window; it belongs to other thread." }, + { WERR_HOTKEY_ALREADY_REGISTERED, "Hot key is already registered." }, + { WERR_CLASS_ALREADY_EXISTS, "Class already exists." }, + { WERR_CLASS_DOES_NOT_EXIST, "Class does not exist." }, + { WERR_CLASS_HAS_WINDOWS, "Class still has open windows." }, + { WERR_INVALID_INDEX, "Invalid index." }, + { WERR_INVALID_ICON_HANDLE, "Invalid icon handle." }, + { WERR_PRIVATE_DIALOG_INDEX, "Using private DIALOG window words." }, + { WERR_LISTBOX_ID_NOT_FOUND, "The list box identifier was not found." }, + { WERR_NO_WILDCARD_CHARACTERS, "No wildcards were found." }, + { WERR_CLIPBOARD_NOT_OPEN, "Thread does not have a clipboard open." }, + { WERR_HOTKEY_NOT_REGISTERED, "Hot key is not registered." }, + { WERR_WINDOW_NOT_DIALOG, "The window is not a valid dialog window." }, + { WERR_CONTROL_ID_NOT_FOUND, "Control ID not found." }, + { WERR_INVALID_COMBOBOX_MESSAGE, "Invalid message for a combo box because it does not have an edit control." }, + { WERR_WINDOW_NOT_COMBOBOX, "The window is not a combo box." }, + { WERR_INVALID_EDIT_HEIGHT, "Height must be less than 256." }, + { WERR_DC_NOT_FOUND, "Invalid device context (DC) handle." }, + { WERR_INVALID_HOOK_FILTER, "Invalid hook procedure type." }, + { WERR_INVALID_FILTER_PROC, "Invalid hook procedure." }, + { WERR_HOOK_NEEDS_HMOD, "Cannot set nonlocal hook without a module handle." }, + { WERR_GLOBAL_ONLY_HOOK, "This hook procedure can only be set globally." }, + { WERR_JOURNAL_HOOK_SET, "The journal hook procedure is already installed." }, + { WERR_HOOK_NOT_INSTALLED, "The hook procedure is not installed." }, + { WERR_INVALID_LB_MESSAGE, "Invalid message for single-selection list box." }, + { WERR_SETCOUNT_ON_BAD_LB, "LB_SETCOUNT sent to non-lazy list box." }, + { WERR_LB_WITHOUT_TABSTOPS, "This list box does not support tab stops." }, + { WERR_DESTROY_OBJECT_OF_OTHER_THREAD, "Cannot destroy object created by another thread." }, + { WERR_CHILD_WINDOW_MENU, "Child windows cannot have menus." }, + { WERR_NO_SYSTEM_MENU, "The window does not have a system menu." }, + { WERR_INVALID_MSGBOX_STYLE, "Invalid message box style." }, + { WERR_INVALID_SPI_VALUE, "Invalid system-wide (SPI_*) parameter." }, + { WERR_SCREEN_ALREADY_LOCKED, "Screen already locked." }, + { WERR_HWNDS_HAVE_DIFF_PARENT, "All handles to windows in a multiple-window position structure must have the same parent." }, + { WERR_NOT_CHILD_WINDOW, "The window is not a child window." }, + { WERR_INVALID_GW_COMMAND, "Invalid GW_* command." }, + { WERR_INVALID_THREAD_ID, "Invalid thread identifier." }, + { WERR_NON_MDICHILD_WINDOW, "Cannot process a message from a window that is not a multiple document interface (MDI) window." }, + { WERR_POPUP_ALREADY_ACTIVE, "Pop-up menu already active." }, + { WERR_NO_SCROLLBARS, "The window does not have scroll bars." }, + { WERR_INVALID_SCROLLBAR_RANGE, "Scroll bar range cannot be greater than MAXLONG." }, + { WERR_INVALID_SHOWWIN_COMMAND, "Cannot show or remove the window in the way specified." }, + { WERR_NO_SYSTEM_RESOURCES, "Insufficient system resources exist to complete the requested service." }, + { WERR_NONPAGED_SYSTEM_RESOURCES, "Insufficient system resources exist to complete the requested service." }, + { WERR_PAGED_SYSTEM_RESOURCES, "Insufficient system resources exist to complete the requested service." }, + { WERR_WORKING_SET_QUOTA, "Insufficient quota to complete the requested service." }, + { WERR_PAGEFILE_QUOTA, "Insufficient quota to complete the requested service." }, + { WERR_COMMITMENT_LIMIT, "The paging file is too small for this operation to complete." }, + { WERR_MENU_ITEM_NOT_FOUND, "A menu item was not found." }, + { WERR_INVALID_KEYBOARD_HANDLE, "Invalid keyboard layout handle." }, + { WERR_HOOK_TYPE_NOT_ALLOWED, "Hook type not allowed." }, + { WERR_REQUIRES_INTERACTIVE_WINDOWSTATION, "This operation requires an interactive window station." }, + { WERR_TIMEOUT, "This operation returned because the time-out period expired." }, + { WERR_INVALID_MONITOR_HANDLE, "Invalid monitor handle." }, + { WERR_INCORRECT_SIZE, "Incorrect size argument." }, + { WERR_SYMLINK_CLASS_DISABLED, "The symbolic link cannot be followed because its type is disabled." }, + { WERR_SYMLINK_NOT_SUPPORTED, "This application does not support the current operation on symbolic links." }, + { WERR_EVENTLOG_FILE_CORRUPT, "The event log file is corrupted." }, + { WERR_EVENTLOG_CANT_START, "No event log file could be opened, so the event logging service did not start." }, + { WERR_LOG_FILE_FULL, "The event log file is full." }, + { WERR_EVENTLOG_FILE_CHANGED, "The event log file has changed between read operations." }, + { WERR_INVALID_TASK_NAME, "The specified task name is invalid." }, + { WERR_INVALID_TASK_INDEX, "The specified task index is invalid." }, + { WERR_THREAD_ALREADY_IN_TASK, "The specified thread is already joining a task." }, + { WERR_INSTALL_SERVICE_FAILURE, "The Windows Installer service could not be accessed. This can occur if the Windows Installer is not correctly installed. Contact your support personnel for assistance." }, + { WERR_INSTALL_USEREXIT, "User canceled installation." }, + { WERR_INSTALL_FAILURE, "Fatal error during installation." }, + { WERR_INSTALL_SUSPEND, "Installation suspended, incomplete." }, + { WERR_UNKNOWN_PRODUCT, "This action is valid only for products that are currently installed." }, + { WERR_UNKNOWN_FEATURE, "Feature ID not registered." }, + { WERR_UNKNOWN_COMPONENT, "Component ID not registered." }, + { WERR_UNKNOWN_PROPERTY, "Unknown property." }, + { WERR_INVALID_HANDLE_STATE, "Handle is in an invalid state." }, + { WERR_BAD_CONFIGURATION, "The configuration data for this product is corrupt. Contact your support personnel." }, + { WERR_INDEX_ABSENT, "Component qualifier not present." }, + { WERR_INSTALL_SOURCE_ABSENT, "The installation source for this product is not available. Verify that the source exists and that you can access it." }, + { WERR_INSTALL_PACKAGE_VERSION, "This installation package cannot be installed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service." }, + { WERR_PRODUCT_UNINSTALLED, "Product is uninstalled." }, + { WERR_BAD_QUERY_SYNTAX, "SQL query syntax invalid or unsupported." }, + { WERR_INVALID_FIELD, "Record field does not exist." }, + { WERR_DEVICE_REMOVED, "The device has been removed." }, + { WERR_INSTALL_ALREADY_RUNNING, "Another installation is already in progress. Complete that installation before proceeding with this install." }, + { WERR_INSTALL_PACKAGE_OPEN_FAILED, "This installation package could not be opened. Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package." }, + { WERR_INSTALL_PACKAGE_INVALID, "This installation package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer package." }, + { WERR_INSTALL_UI_FAILURE, "There was an error starting the Windows Installer service user interface. Contact your support personnel." }, + { WERR_INSTALL_LOG_FAILURE, "Error opening installation log file. Verify that the specified log file location exists and that you can write to it." }, + { WERR_INSTALL_LANGUAGE_UNSUPPORTED, "The language of this installation package is not supported by your system." }, + { WERR_INSTALL_TRANSFORM_FAILURE, "Error applying transforms. Verify that the specified transform paths are valid." }, + { WERR_INSTALL_PACKAGE_REJECTED, "This installation is forbidden by system policy. Contact your system administrator." }, + { WERR_FUNCTION_NOT_CALLED, "Function could not be executed." }, + { WERR_FUNCTION_FAILED, "Function failed during execution." }, + { WERR_INVALID_TABLE, "Invalid or unknown table specified." }, + { WERR_DATATYPE_MISMATCH, "Data supplied is of wrong type." }, + { WERR_UNSUPPORTED_TYPE, "Data of this type is not supported." }, + { WERR_CREATE_FAILED, "The Windows Installer service failed to start. Contact your support personnel." }, + { WERR_INSTALL_TEMP_UNWRITABLE, "The Temp folder is on a drive that is full or is inaccessible. Free up space on the drive or verify that you have write permission on the Temp folder." }, + { WERR_INSTALL_PLATFORM_UNSUPPORTED, "This installation package is not supported by this processor type. Contact your product vendor." }, + { WERR_INSTALL_NOTUSED, "Component not used on this computer." }, + { WERR_PATCH_PACKAGE_OPEN_FAILED, "This update package could not be opened. Verify that the update package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer update package." }, + { WERR_PATCH_PACKAGE_INVALID, "This update package could not be opened. Contact the application vendor to verify that this is a valid Windows Installer update package." }, + { WERR_PATCH_PACKAGE_UNSUPPORTED, "This update package cannot be processed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service." }, + { WERR_PRODUCT_VERSION, "Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs in Control Panel." }, + { WERR_INVALID_COMMAND_LINE, "Invalid command-line argument. Consult the Windows Installer SDK for detailed command line help." }, + { WERR_INSTALL_REMOTE_DISALLOWED, "Only administrators have permission to add, remove, or configure server software during a Terminal Services remote session. If you want to install or configure software on the server, contact your network administrator." }, + { WERR_SUCCESS_REBOOT_INITIATED, "The requested operation completed successfully. The system will be restarted so the changes can take effect." }, + { WERR_PATCH_TARGET_NOT_FOUND, "The upgrade cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade." }, + { WERR_PATCH_PACKAGE_REJECTED, "The update package is not permitted by a software restriction policy." }, + { WERR_INSTALL_TRANSFORM_REJECTED, "One or more customizations are not permitted by a software restriction policy." }, + { WERR_INSTALL_REMOTE_PROHIBITED, "The Windows Installer does not permit installation from a Remote Desktop Connection." }, + { WERR_PATCH_REMOVAL_UNSUPPORTED, "Uninstallation of the update package is not supported." }, + { WERR_UNKNOWN_PATCH, "The update is not applied to this product." }, + { WERR_PATCH_NO_SEQUENCE, "No valid sequence could be found for the set of updates." }, + { WERR_PATCH_REMOVAL_DISALLOWED, "Update removal was disallowed by policy." }, + { WERR_INVALID_PATCH_XML, "The XML update data is invalid." }, + { WERR_PATCH_MANAGED_ADVERTISED_PRODUCT, "Windows Installer does not permit updating of managed advertised products. At least one feature of the product must be installed before applying the update." }, + { WERR_INSTALL_SERVICE_SAFEBOOT, "The Windows Installer service is not accessible in Safe Mode. Try again when your computer is not in Safe Mode or you can use System Restore to return your machine to a previous good state." }, + { WERR_RPC_S_INVALID_STRING_BINDING, "The string binding is invalid." }, + { WERR_RPC_S_WRONG_KIND_OF_BINDING, "The binding handle is not the correct type." }, + { WERR_RPC_S_INVALID_BINDING, "The binding handle is invalid." }, + { WERR_RPC_S_PROTSEQ_NOT_SUPPORTED, "The RPC protocol sequence is not supported." }, + { WERR_RPC_S_INVALID_RPC_PROTSEQ, "The RPC protocol sequence is invalid." }, + { WERR_RPC_S_INVALID_STRING_UUID, "The string UUID is invalid." }, + { WERR_RPC_S_INVALID_ENDPOINT_FORMAT, "The endpoint format is invalid." }, + { WERR_RPC_S_INVALID_NET_ADDR, "The network address is invalid." }, + { WERR_RPC_S_NO_ENDPOINT_FOUND, "No endpoint was found." }, + { WERR_RPC_S_INVALID_TIMEOUT, "The time-out value is invalid." }, + { WERR_RPC_S_OBJECT_NOT_FOUND, "The object UUID) was not found." }, + { WERR_RPC_S_ALREADY_REGISTERED, "The object UUID) has already been registered." }, + { WERR_RPC_S_TYPE_ALREADY_REGISTERED, "The type UUID has already been registered." }, + { WERR_RPC_S_ALREADY_LISTENING, "The RPC server is already listening." }, + { WERR_RPC_S_NO_PROTSEQS_REGISTERED, "No protocol sequences have been registered." }, + { WERR_RPC_S_NOT_LISTENING, "The RPC server is not listening." }, + { WERR_RPC_S_UNKNOWN_MGR_TYPE, "The manager type is unknown." }, + { WERR_RPC_S_UNKNOWN_IF, "The interface is unknown." }, + { WERR_RPC_S_NO_BINDINGS, "There are no bindings." }, + { WERR_RPC_S_NO_PROTSEQS, "There are no protocol sequences." }, + { WERR_RPC_S_CANT_CREATE_ENDPOINT, "The endpoint cannot be created." }, + { WERR_RPC_S_OUT_OF_RESOURCES, "Not enough resources are available to complete this operation." }, + { WERR_RPC_S_SERVER_UNAVAILABLE, "The RPC server is unavailable." }, + { WERR_RPC_S_SERVER_TOO_BUSY, "The RPC server is too busy to complete this operation." }, + { WERR_RPC_S_INVALID_NETWORK_OPTIONS, "The network options are invalid." }, + { WERR_RPC_S_NO_CALL_ACTIVE, "There are no RPCs active on this thread." }, + { WERR_RPC_S_CALL_FAILED, "The RPC failed." }, + { WERR_RPC_S_CALL_FAILED_DNE, "The RPC failed and did not execute." }, + { WERR_RPC_S_PROTOCOL_ERROR, "An RPC protocol error occurred." }, + { WERR_RPC_S_PROXY_ACCESS_DENIED, "Access to the HTTP proxy is denied." }, + { WERR_RPC_S_UNSUPPORTED_TRANS_SYN, "The transfer syntax is not supported by the RPC server." }, + { WERR_RPC_S_UNSUPPORTED_TYPE, "The UUID type is not supported." }, + { WERR_RPC_S_INVALID_TAG, "The tag is invalid." }, + { WERR_RPC_S_INVALID_BOUND, "The array bounds are invalid." }, + { WERR_RPC_S_NO_ENTRY_NAME, "The binding does not contain an entry name." }, + { WERR_RPC_S_INVALID_NAME_SYNTAX, "The name syntax is invalid." }, + { WERR_RPC_S_UNSUPPORTED_NAME_SYNTAX, "The name syntax is not supported." }, + { WERR_RPC_S_UUID_NO_ADDRESS, "No network address is available to use to construct a UUID." }, + { WERR_RPC_S_DUPLICATE_ENDPOINT, "The endpoint is a duplicate." }, + { WERR_RPC_S_UNKNOWN_AUTHN_TYPE, "The authentication type is unknown." }, + { WERR_RPC_S_MAX_CALLS_TOO_SMALL, "The maximum number of calls is too small." }, + { WERR_RPC_S_STRING_TOO_LONG, "The string is too long." }, + { WERR_RPC_S_PROTSEQ_NOT_FOUND, "The RPC protocol sequence was not found." }, + { WERR_RPC_S_PROCNUM_OUT_OF_RANGE, "The procedure number is out of range." }, + { WERR_RPC_S_BINDING_HAS_NO_AUTH, "The binding does not contain any authentication information." }, + { WERR_RPC_S_UNKNOWN_AUTHN_SERVICE, "The authentication service is unknown." }, + { WERR_RPC_S_UNKNOWN_AUTHN_LEVEL, "The authentication level is unknown." }, + { WERR_RPC_S_INVALID_AUTH_IDENTITY, "The security context is invalid." }, + { WERR_RPC_S_UNKNOWN_AUTHZ_SERVICE, "The authorization service is unknown." }, + { WERR_EPT_S_INVALID_ENTRY, "The entry is invalid." }, + { WERR_EPT_S_CANT_PERFORM_OP, "The server endpoint cannot perform the operation." }, + { WERR_EPT_S_NOT_REGISTERED, "There are no more endpoints available from the endpoint mapper." }, + { WERR_RPC_S_NOTHING_TO_EXPORT, "No interfaces have been exported." }, + { WERR_RPC_S_INCOMPLETE_NAME, "The entry name is incomplete." }, + { WERR_RPC_S_INVALID_VERS_OPTION, "The version option is invalid." }, + { WERR_RPC_S_NO_MORE_MEMBERS, "There are no more members." }, + { WERR_RPC_S_NOT_ALL_OBJS_UNEXPORTED, "There is nothing to unexport." }, + { WERR_RPC_S_INTERFACE_NOT_FOUND, "The interface was not found." }, + { WERR_RPC_S_ENTRY_ALREADY_EXISTS, "The entry already exists." }, + { WERR_RPC_S_ENTRY_NOT_FOUND, "The entry is not found." }, + { WERR_RPC_S_NAME_SERVICE_UNAVAILABLE, "The name service is unavailable." }, + { WERR_RPC_S_INVALID_NAF_ID, "The network address family is invalid." }, + { WERR_RPC_S_CANNOT_SUPPORT, "The requested operation is not supported." }, + { WERR_RPC_S_NO_CONTEXT_AVAILABLE, "No security context is available to allow impersonation." }, + { WERR_RPC_S_INTERNAL_ERROR, "An internal error occurred in an RPC." }, + { WERR_RPC_S_ZERO_DIVIDE, "The RPC server attempted an integer division by zero." }, + { WERR_RPC_S_ADDRESS_ERROR, "An addressing error occurred in the RPC server." }, + { WERR_RPC_S_FP_DIV_ZERO, "A floating-point operation at the RPC server caused a division by zero." }, + { WERR_RPC_S_FP_UNDERFLOW, "A floating-point underflow occurred at the RPC server." }, + { WERR_RPC_S_FP_OVERFLOW, "A floating-point overflow occurred at the RPC server." }, + { WERR_RPC_X_NO_MORE_ENTRIES, "The list of RPC servers available for the binding of auto handles has been exhausted." }, + { WERR_RPC_X_SS_CHAR_TRANS_OPEN_FAIL, "Unable to open the character translation table file." }, + { WERR_RPC_X_SS_CHAR_TRANS_SHORT_FILE, "The file containing the character translation table has fewer than 512 bytes." }, + { WERR_RPC_X_SS_IN_NULL_CONTEXT, "A null context handle was passed from the client to the host during an RPC." }, + { WERR_RPC_X_SS_CONTEXT_DAMAGED, "The context handle changed during an RPC." }, + { WERR_RPC_X_SS_HANDLES_MISMATCH, "The binding handles passed to an RPC do not match." }, + { WERR_RPC_X_SS_CANNOT_GET_CALL_HANDLE, "The stub is unable to get the RPC handle." }, + { WERR_RPC_X_NULL_REF_POINTER, "A null reference pointer was passed to the stub." }, + { WERR_RPC_X_ENUM_VALUE_OUT_OF_RANGE, "The enumeration value is out of range." }, + { WERR_RPC_X_BYTE_COUNT_TOO_SMALL, "The byte count is too small." }, + { WERR_RPC_X_BAD_STUB_DATA, "The stub received bad data." }, + { WERR_INVALID_USER_BUFFER, "The supplied user buffer is not valid for the requested operation." }, + { WERR_UNRECOGNIZED_MEDIA, "The disk media is not recognized. It may not be formatted." }, + { WERR_NO_TRUST_LSA_SECRET, "The workstation does not have a trust secret." }, + { WERR_NO_TRUST_SAM_ACCOUNT, "The security database on the server does not have a computer account for this workstation trust relationship." }, + { WERR_TRUSTED_DOMAIN_FAILURE, "The trust relationship between the primary domain and the trusted domain failed." }, + { WERR_TRUSTED_RELATIONSHIP_FAILURE, "The trust relationship between this workstation and the primary domain failed." }, + { WERR_TRUST_FAILURE, "The network logon failed." }, + { WERR_RPC_S_CALL_IN_PROGRESS, "An RPC is already in progress for this thread." }, + { WERR_NETLOGON_NOT_STARTED, "An attempt was made to log on, but the network logon service was not started." }, + { WERR_ACCOUNT_EXPIRED, "The user\'s account has expired." }, + { WERR_REDIRECTOR_HAS_OPEN_HANDLES, "The redirector is in use and cannot be unloaded." }, + { WERR_PRINTER_DRIVER_ALREADY_INSTALLED, "The specified printer driver is already installed." }, + { WERR_UNKNOWN_PORT, "The specified port is unknown." }, + { WERR_UNKNOWN_PRINTER_DRIVER, "The printer driver is unknown." }, + { WERR_UNKNOWN_PRINTPROCESSOR, "The print processor is unknown." }, + { WERR_INVALID_SEPARATOR_FILE, "The specified separator file is invalid." }, + { WERR_INVALID_PRIORITY, "The specified priority is invalid." }, + { WERR_INVALID_PRINTER_NAME, "The printer name is invalid." }, + { WERR_PRINTER_ALREADY_EXISTS, "The printer already exists." }, + { WERR_INVALID_PRINTER_COMMAND, "The printer command is invalid." }, + { WERR_INVALID_DATATYPE, "The specified data type is invalid." }, + { WERR_INVALID_ENVIRONMENT, "The environment specified is invalid." }, + { WERR_RPC_S_NO_MORE_BINDINGS, "There are no more bindings." }, + { WERR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT, "The account used is an interdomain trust account. Use your global user account or local user account to access this server." }, + { WERR_NOLOGON_WORKSTATION_TRUST_ACCOUNT, "The account used is a computer account. Use your global user account or local user account to access this server." }, + { WERR_NOLOGON_SERVER_TRUST_ACCOUNT, "The account used is a server trust account. Use your global user account or local user account to access this server." }, + { WERR_DOMAIN_TRUST_INCONSISTENT, "The name or SID of the domain specified is inconsistent with the trust information for that domain." }, + { WERR_SERVER_HAS_OPEN_HANDLES, "The server is in use and cannot be unloaded." }, + { WERR_RESOURCE_DATA_NOT_FOUND, "The specified image file did not contain a resource section." }, + { WERR_RESOURCE_TYPE_NOT_FOUND, "The specified resource type cannot be found in the image file." }, + { WERR_RESOURCE_NAME_NOT_FOUND, "The specified resource name cannot be found in the image file." }, + { WERR_RESOURCE_LANG_NOT_FOUND, "The specified resource language ID cannot be found in the image file." }, + { WERR_NOT_ENOUGH_QUOTA, "Not enough quota is available to process this command." }, + { WERR_RPC_S_NO_INTERFACES, "No interfaces have been registered." }, + { WERR_RPC_S_CALL_CANCELLED, "The RPC was canceled." }, + { WERR_RPC_S_BINDING_INCOMPLETE, "The binding handle does not contain all the required information." }, + { WERR_RPC_S_COMM_FAILURE, "A communications failure occurred during an RPC." }, + { WERR_RPC_S_UNSUPPORTED_AUTHN_LEVEL, "The requested authentication level is not supported." }, + { WERR_RPC_S_NO_PRINC_NAME, "No principal name is registered." }, + { WERR_RPC_S_NOT_RPC_ERROR, "The error specified is not a valid Windows RPC error code." }, + { WERR_RPC_S_UUID_LOCAL_ONLY, "A UUID that is valid only on this computer has been allocated." }, + { WERR_RPC_S_SEC_PKG_ERROR, "A security package-specific error occurred." }, + { WERR_RPC_S_NOT_CANCELLED, "The thread is not canceled." }, + { WERR_RPC_X_INVALID_ES_ACTION, "Invalid operation on the encoding/decoding handle." }, + { WERR_RPC_X_WRONG_ES_VERSION, "Incompatible version of the serializing package." }, + { WERR_RPC_X_WRONG_STUB_VERSION, "Incompatible version of the RPC stub." }, + { WERR_RPC_X_INVALID_PIPE_OBJECT, "The RPC pipe object is invalid or corrupted." }, + { WERR_RPC_X_WRONG_PIPE_ORDER, "An invalid operation was attempted on an RPC pipe object." }, + { WERR_RPC_X_WRONG_PIPE_VERSION, "Unsupported RPC pipe version." }, + { WERR_RPC_S_GROUP_MEMBER_NOT_FOUND, "The group member was not found." }, + { WERR_EPT_S_CANT_CREATE, "The endpoint mapper database entry could not be created." }, + { WERR_RPC_S_INVALID_OBJECT, "The object UUID is the nil UUID." }, + { WERR_INVALID_TIME, "The specified time is invalid." }, + { WERR_INVALID_FORM_NAME, "The specified form name is invalid." }, + { WERR_INVALID_FORM_SIZE, "The specified form size is invalid." }, + { WERR_ALREADY_WAITING, "The specified printer handle is already being waited on." }, + { WERR_PRINTER_DELETED, "The specified printer has been deleted." }, + { WERR_INVALID_PRINTER_STATE, "The state of the printer is invalid." }, + { WERR_PASSWORD_MUST_CHANGE, "The user\'s password must be changed before logging on the first time." }, + { WERR_DOMAIN_CONTROLLER_NOT_FOUND, "Could not find the domain controller for this domain." }, + { WERR_ACCOUNT_LOCKED_OUT, "The referenced account is currently locked out and may not be logged on to." }, + { WERR_OR_INVALID_OXID, "The object exporter specified was not found." }, + { WERR_OR_INVALID_OID, "The object specified was not found." }, + { WERR_OR_INVALID_SET, "The object set specified was not found." }, + { WERR_RPC_S_SEND_INCOMPLETE, "Some data remains to be sent in the request buffer." }, + { WERR_RPC_S_INVALID_ASYNC_HANDLE, "Invalid asynchronous RPC handle." }, + { WERR_RPC_S_INVALID_ASYNC_CALL, "Invalid asynchronous RPC call handle for this operation." }, + { WERR_RPC_X_PIPE_CLOSED, "The RPC pipe object has already been closed." }, + { WERR_RPC_X_PIPE_DISCIPLINE_ERROR, "The RPC call completed before all pipes were processed." }, + { WERR_RPC_X_PIPE_EMPTY, "No more data is available from the RPC pipe." }, + { WERR_NO_SITENAME, "No site name is available for this machine." }, + { WERR_CANT_ACCESS_FILE, "The file cannot be accessed by the system." }, + { WERR_CANT_RESOLVE_FILENAME, "The name of the file cannot be resolved by the system." }, + { WERR_RPC_S_ENTRY_TYPE_MISMATCH, "The entry is not of the expected type." }, + { WERR_RPC_S_NOT_ALL_OBJS_EXPORTED, "Not all object UUIDs could be exported to the specified entry." }, + { WERR_RPC_S_INTERFACE_NOT_EXPORTED, "The interface could not be exported to the specified entry." }, + { WERR_RPC_S_PROFILE_NOT_ADDED, "The specified profile entry could not be added." }, + { WERR_RPC_S_PRF_ELT_NOT_ADDED, "The specified profile element could not be added." }, + { WERR_RPC_S_PRF_ELT_NOT_REMOVED, "The specified profile element could not be removed." }, + { WERR_RPC_S_GRP_ELT_NOT_ADDED, "The group element could not be added." }, + { WERR_RPC_S_GRP_ELT_NOT_REMOVED, "The group element could not be removed." }, + { WERR_KM_DRIVER_BLOCKED, "The printer driver is not compatible with a policy enabled on your computer that blocks Windows NT 4.0 drivers." }, + { WERR_CONTEXT_EXPIRED, "The context has expired and can no longer be used." }, + { WERR_PER_USER_TRUST_QUOTA_EXCEEDED, "The current user\'s delegated trust creation quota has been exceeded." }, + { WERR_ALL_USER_TRUST_QUOTA_EXCEEDED, "The total delegated trust creation quota has been exceeded." }, + { WERR_USER_DELETE_TRUST_QUOTA_EXCEEDED, "The current user\'s delegated trust deletion quota has been exceeded." }, + { WERR_AUTHENTICATION_FIREWALL_FAILED, "Logon failure: The machine you are logging on to is protected by an authentication firewall. The specified account is not allowed to authenticate to the machine." }, + { WERR_REMOTE_PRINT_CONNECTIONS_BLOCKED, "Remote connections to the Print Spooler are blocked by a policy set on your machine." }, + { WERR_INVALID_PIXEL_FORMAT, "The pixel format is invalid." }, + { WERR_BAD_DRIVER, "The specified driver is invalid." }, + { WERR_INVALID_WINDOW_STYLE, "The window style or class attribute is invalid for this operation." }, + { WERR_METAFILE_NOT_SUPPORTED, "The requested metafile operation is not supported." }, + { WERR_TRANSFORM_NOT_SUPPORTED, "The requested transformation operation is not supported." }, + { WERR_CLIPPING_NOT_SUPPORTED, "The requested clipping operation is not supported." }, + { WERR_INVALID_CMM, "The specified color management module is invalid." }, + { WERR_INVALID_PROFILE, "The specified color profile is invalid." }, + { WERR_TAG_NOT_FOUND, "The specified tag was not found." }, + { WERR_TAG_NOT_PRESENT, "A required tag is not present." }, + { WERR_DUPLICATE_TAG, "The specified tag is already present." }, + { WERR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE, "The specified color profile is not associated with any device." }, + { WERR_PROFILE_NOT_FOUND, "The specified color profile was not found." }, + { WERR_INVALID_COLORSPACE, "The specified color space is invalid." }, + { WERR_ICM_NOT_ENABLED, "Image Color Management is not enabled." }, + { WERR_DELETING_ICM_XFORM, "There was an error while deleting the color transform." }, + { WERR_INVALID_TRANSFORM, "The specified color transform is invalid." }, + { WERR_COLORSPACE_MISMATCH, "The specified transform does not match the bitmap\'s color space." }, + { WERR_INVALID_COLORINDEX, "The specified named color index is not present in the profile." }, + { WERR_PROFILE_DOES_NOT_MATCH_DEVICE, "The specified profile is intended for a device of a different type than the specified device." }, + { WERR_NERR_NETNOTSTARTED, "The workstation driver is not installed." }, + { WERR_NERR_UNKNOWNSERVER, "The server could not be located." }, + { WERR_NERR_SHAREMEM, "An internal error occurred. The network cannot access a shared memory segment." }, + { WERR_NERR_NONETWORKRESOURCE, "A network resource shortage occurred." }, + { WERR_NERR_REMOTEONLY, "This operation is not supported on workstations." }, + { WERR_NERR_DEVNOTREDIRECTED, "The device is not connected." }, + { WERR_CONNECTED_OTHER_PASSWORD, "The network connection was made successfully, but the user had to be prompted for a password other than the one originally specified." }, + { WERR_CONNECTED_OTHER_PASSWORD_DEFAULT, "The network connection was made successfully using default credentials." }, + { WERR_NERR_SERVERNOTSTARTED, "The Server service is not started." }, + { WERR_NERR_ITEMNOTFOUND, "The queue is empty." }, + { WERR_NERR_UNKNOWNDEVDIR, "The device or directory does not exist." }, + { WERR_NERR_REDIRECTEDPATH, "The operation is invalid on a redirected resource." }, + { WERR_NERR_DUPLICATESHARE, "The name has already been shared." }, + { WERR_NERR_NOROOM, "The server is currently out of the requested resource." }, + { WERR_NERR_TOOMANYITEMS, "Requested addition of items exceeds the maximum allowed." }, + { WERR_NERR_INVALIDMAXUSERS, "The Peer service supports only two simultaneous users." }, + { WERR_NERR_BUFTOOSMALL, "The API return buffer is too small." }, + { WERR_NERR_REMOTEERR, "A remote API error occurred." }, + { WERR_NERR_LANMANINIERROR, "An error occurred when opening or reading the configuration file." }, + { WERR_NERR_NETWORKERROR, "A general network error occurred." }, + { WERR_NERR_WKSTAINCONSISTENTSTATE, "The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service." }, + { WERR_NERR_WKSTANOTSTARTED, "The Workstation service has not been started." }, + { WERR_NERR_BROWSERNOTSTARTED, "The requested information is not available." }, + { WERR_NERR_INTERNALERROR, "An internal error occurred." }, + { WERR_NERR_BADTRANSACTCONFIG, "The server is not configured for transactions." }, + { WERR_NERR_INVALIDAPI, "The requested API is not supported on the remote server." }, + { WERR_NERR_BADEVENTNAME, "The event name is invalid." }, + { WERR_NERR_DUPNAMEREBOOT, "The computer name already exists on the network. Change it and reboot the computer." }, + { WERR_NERR_CFGCOMPNOTFOUND, "The specified component could not be found in the configuration information." }, + { WERR_NERR_CFGPARAMNOTFOUND, "The specified parameter could not be found in the configuration information." }, + { WERR_NERR_LINETOOLONG, "A line in the configuration file is too long." }, + { WERR_NERR_QNOTFOUND, "The printer does not exist." }, + { WERR_NERR_JOBNOTFOUND, "The print job does not exist." }, + { WERR_NERR_DESTNOTFOUND, "The printer destination cannot be found." }, + { WERR_NERR_DESTEXISTS, "The printer destination already exists." }, + { WERR_NERR_QEXISTS, "The print queue already exists." }, + { WERR_NERR_QNOROOM, "No more printers can be added." }, + { WERR_NERR_JOBNOROOM, "No more print jobs can be added." }, + { WERR_NERR_DESTNOROOM, "No more printer destinations can be added." }, + { WERR_NERR_DESTIDLE, "This printer destination is idle and cannot accept control operations." }, + { WERR_NERR_DESTINVALIDOP, "This printer destination request contains an invalid control function." }, + { WERR_NERR_PROCNORESPOND, "The print processor is not responding." }, + { WERR_NERR_SPOOLERNOTLOADED, "The spooler is not running." }, + { WERR_NERR_DESTINVALIDSTATE, "This operation cannot be performed on the print destination in its current state." }, + { WERR_NERR_QINVALIDSTATE, "This operation cannot be performed on the print queue in its current state." }, + { WERR_NERR_JOBINVALIDSTATE, "This operation cannot be performed on the print job in its current state." }, + { WERR_NERR_SPOOLNOMEMORY, "A spooler memory allocation failure occurred." }, + { WERR_NERR_DRIVERNOTFOUND, "The device driver does not exist." }, + { WERR_NERR_DATATYPEINVALID, "The data type is not supported by the print processor." }, + { WERR_NERR_PROCNOTFOUND, "The print processor is not installed." }, + { WERR_NERR_SERVICETABLELOCKED, "The service database is locked." }, + { WERR_NERR_SERVICETABLEFULL, "The service table is full." }, + { WERR_NERR_SERVICEINSTALLED, "The requested service has already been started." }, + { WERR_NERR_SERVICEENTRYLOCKED, "The service does not respond to control actions." }, + { WERR_NERR_SERVICENOTINSTALLED, "The service has not been started." }, + { WERR_NERR_BADSERVICENAME, "The service name is invalid." }, + { WERR_NERR_SERVICECTLTIMEOUT, "The service is not responding to the control function." }, + { WERR_NERR_SERVICECTLBUSY, "The service control is busy." }, + { WERR_NERR_BADSERVICEPROGNAME, "The configuration file contains an invalid service program name." }, + { WERR_NERR_SERVICENOTCTRL, "The service could not be controlled in its present state." }, + { WERR_NERR_SERVICEKILLPROC, "The service ended abnormally." }, + { WERR_NERR_SERVICECTLNOTVALID, "The requested pause or stop is not valid for this service." }, + { WERR_NERR_NOTINDISPATCHTBL, "The service control dispatcher could not find the service name in the dispatch table." }, + { WERR_NERR_BADCONTROLRECV, "The service control dispatcher pipe read failed." }, + { WERR_NERR_SERVICENOTSTARTING, "A thread for the new service could not be created." }, + { WERR_NERR_ALREADYLOGGEDON, "This workstation is already logged on to the LAN." }, + { WERR_NERR_NOTLOGGEDON, "The workstation is not logged on to the LAN." }, + { WERR_NERR_BADUSERNAME, "The user name or group name parameter is invalid." }, + { WERR_NERR_BADPASSWORD, "The password parameter is invalid." }, + { WERR_NERR_UNABLETOADDNAME_W, "The logon processor did not add the message alias." }, + { WERR_NERR_UNABLETOADDNAME_F, "The logon processor did not add the message alias." }, + { WERR_NERR_UNABLETODELNAME_W, "@W The logoff processor did not delete the message alias." }, + { WERR_NERR_UNABLETODELNAME_F, "The logoff processor did not delete the message alias." }, + { WERR_NERR_LOGONSPAUSED, "Network logons are paused." }, + { WERR_NERR_LOGONSERVERCONFLICT, "A centralized logon server conflict occurred." }, + { WERR_NERR_LOGONNOUSERPATH, "The server is configured without a valid user path." }, + { WERR_NERR_LOGONSCRIPTERROR, "An error occurred while loading or running the logon script." }, + { WERR_NERR_STANDALONELOGON, "The logon server was not specified. The computer will be logged on as STANDALONE." }, + { WERR_NERR_LOGONSERVERNOTFOUND, "The logon server could not be found." }, + { WERR_NERR_LOGONDOMAINEXISTS, "There is already a logon domain for this computer." }, + { WERR_NERR_NONVALIDATEDLOGON, "The logon server could not validate the logon." }, + { WERR_NERR_ACFNOTFOUND, "The security database could not be found." }, + { WERR_NERR_GROUPNOTFOUND, "The group name could not be found." }, + { WERR_NERR_USERNOTFOUND, "The user name could not be found." }, + { WERR_NERR_RESOURCENOTFOUND, "The resource name could not be found." }, + { WERR_NERR_GROUPEXISTS, "The group already exists." }, + { WERR_NERR_USEREXISTS, "The user account already exists." }, + { WERR_NERR_RESOURCEEXISTS, "The resource permission list already exists." }, + { WERR_NERR_NOTPRIMARY, "This operation is allowed only on the PDC of the domain." }, + { WERR_NERR_ACFNOTLOADED, "The security database has not been started." }, + { WERR_NERR_ACFNOROOM, "There are too many names in the user accounts database." }, + { WERR_NERR_ACFFILEIOFAIL, "A disk I/O failure occurred." }, + { WERR_NERR_ACFTOOMANYLISTS, "The limit of 64 entries per resource was exceeded." }, + { WERR_NERR_USERLOGON, "Deleting a user with a session is not allowed." }, + { WERR_NERR_ACFNOPARENT, "The parent directory could not be located." }, + { WERR_NERR_CANNOTGROWSEGMENT, "Unable to add to the security database session cache segment." }, + { WERR_NERR_SPEGROUPOP, "This operation is not allowed on this special group." }, + { WERR_NERR_NOTINCACHE, "This user is not cached in the user accounts database session cache." }, + { WERR_NERR_USERINGROUP, "The user already belongs to this group." }, + { WERR_NERR_USERNOTINGROUP, "The user does not belong to this group." }, + { WERR_NERR_ACCOUNTUNDEFINED, "This user account is undefined." }, + { WERR_NERR_ACCOUNTEXPIRED, "This user account has expired." }, + { WERR_NERR_INVALIDWORKSTATION, "The user is not allowed to log on from this workstation." }, + { WERR_NERR_INVALIDLOGONHOURS, "The user is not allowed to log on at this time." }, + { WERR_NERR_PASSWORDEXPIRED, "The password of this user has expired." }, + { WERR_NERR_PASSWORDCANTCHANGE, "The password of this user cannot change." }, + { WERR_NERR_PASSWORDHISTCONFLICT, "This password cannot be used now." }, + { WERR_NERR_PASSWORDTOOSHORT, "The password does not meet the password policy requirements. Check the minimum password length, password complexity, and password history requirements." }, + { WERR_NERR_PASSWORDTOORECENT, "The password of this user is too recent to change." }, + { WERR_NERR_INVALIDDATABASE, "The security database is corrupted." }, + { WERR_NERR_DATABASEUPTODATE, "No updates are necessary to this replicant network or local security database." }, + { WERR_NERR_SYNCREQUIRED, "This replicant database is outdated; synchronization is required." }, + { WERR_NERR_USENOTFOUND, "The network connection could not be found." }, + { WERR_NERR_BADASGTYPE, "This asg_type is invalid." }, + { WERR_NERR_DEVICEISSHARED, "This device is currently being shared." }, + { WERR_NERR_NOCOMPUTERNAME, "The computer name could not be added as a message alias. The name may already exist on the network." }, + { WERR_NERR_MSGALREADYSTARTED, "The Messenger service is already started." }, + { WERR_NERR_MSGINITFAILED, "The Messenger service failed to start." }, + { WERR_NERR_NAMENOTFOUND, "The message alias could not be found on the network." }, + { WERR_NERR_ALREADYFORWARDED, "This message alias has already been forwarded." }, + { WERR_NERR_ADDFORWARDED, "This message alias has been added but is still forwarded." }, + { WERR_NERR_ALREADYEXISTS, "This message alias already exists locally." }, + { WERR_NERR_TOOMANYNAMES, "The maximum number of added message aliases has been exceeded." }, + { WERR_NERR_DELCOMPUTERNAME, "The computer name could not be deleted." }, + { WERR_NERR_LOCALFORWARD, "Messages cannot be forwarded back to the same workstation." }, + { WERR_NERR_GRPMSGPROCESSOR, "An error occurred in the domain message processor." }, + { WERR_NERR_PAUSEDREMOTE, "The message was sent, but the recipient has paused the Messenger service." }, + { WERR_NERR_BADRECEIVE, "The message was sent but not received." }, + { WERR_NERR_NAMEINUSE, "The message alias is currently in use. Try again later." }, + { WERR_NERR_MSGNOTSTARTED, "The Messenger service has not been started." }, + { WERR_NERR_NOTLOCALNAME, "The name is not on the local computer." }, + { WERR_NERR_NOFORWARDNAME, "The forwarded message alias could not be found on the network." }, + { WERR_NERR_REMOTEFULL, "The message alias table on the remote station is full." }, + { WERR_NERR_NAMENOTFORWARDED, "Messages for this alias are not currently being forwarded." }, + { WERR_NERR_TRUNCATEDBROADCAST, "The broadcast message was truncated." }, + { WERR_NERR_INVALIDDEVICE, "This is an invalid device name." }, + { WERR_NERR_WRITEFAULT, "A write fault occurred." }, + { WERR_NERR_DUPLICATENAME, "A duplicate message alias exists on the network." }, + { WERR_NERR_DELETELATER, "This message alias will be deleted later." }, + { WERR_NERR_INCOMPLETEDEL, "The message alias was not successfully deleted from all networks." }, + { WERR_NERR_MULTIPLENETS, "This operation is not supported on computers with multiple networks." }, + { WERR_NERR_NETNAMENOTFOUND, "This shared resource does not exist." }, + { WERR_NERR_DEVICENOTSHARED, "This device is not shared." }, + { WERR_NERR_CLIENTNAMENOTFOUND, "A session does not exist with that computer name." }, + { WERR_NERR_FILEIDNOTFOUND, "There is not an open file with that identification number." }, + { WERR_NERR_EXECFAILURE, "A failure occurred when executing a remote administration command." }, + { WERR_NERR_TMPFILE, "A failure occurred when opening a remote temporary file." }, + { WERR_NERR_TOOMUCHDATA, "The data returned from a remote administration command has been truncated to 64 KB." }, + { WERR_NERR_DEVICESHARECONFLICT, "This device cannot be shared as both a spooled and a nonspooled resource." }, + { WERR_NERR_BROWSERTABLEINCOMPLETE, "The information in the list of servers may be incorrect." }, + { WERR_NERR_NOTLOCALDOMAIN, "The computer is not active in this domain." }, + { WERR_NERR_ISDFSSHARE, "The share must be removed from the Distributed File System (DFS) before it can be deleted." }, + { WERR_NERR_DEVINVALIDOPCODE, "The operation is invalid for this device." }, + { WERR_NERR_DEVNOTFOUND, "This device cannot be shared." }, + { WERR_NERR_DEVNOTOPEN, "This device was not open." }, + { WERR_NERR_BADQUEUEDEVSTRING, "This device name list is invalid." }, + { WERR_NERR_BADQUEUEPRIORITY, "The queue priority is invalid." }, + { WERR_NERR_NOCOMMDEVS, "There are no shared communication devices." }, + { WERR_NERR_QUEUENOTFOUND, "The queue you specified does not exist." }, + { WERR_NERR_BADDEVSTRING, "This list of devices is invalid." }, + { WERR_NERR_BADDEV, "The requested device is invalid." }, + { WERR_NERR_INUSEBYSPOOLER, "This device is already in use by the spooler." }, + { WERR_NERR_COMMDEVINUSE, "This device is already in use as a communication device." }, + { WERR_NERR_INVALIDCOMPUTER, "This computer name is invalid." }, + { WERR_NERR_MAXLENEXCEEDED, "The string and prefix specified are too long." }, + { WERR_NERR_BADCOMPONENT, "This path component is invalid." }, + { WERR_NERR_CANTTYPE, "Could not determine the type of input." }, + { WERR_NERR_TOOMANYENTRIES, "The buffer for types is not big enough." }, + { WERR_NERR_PROFILEFILETOOBIG, "Profile files cannot exceed 64 KB." }, + { WERR_NERR_PROFILEOFFSET, "The start offset is out of range." }, + { WERR_NERR_PROFILECLEANUP, "The system cannot delete current connections to network resources." }, + { WERR_NERR_PROFILEUNKNOWNCMD, "The system was unable to parse the command line in this file." }, + { WERR_NERR_PROFILELOADERR, "An error occurred while loading the profile file." }, + { WERR_NERR_PROFILESAVEERR, "Errors occurred while saving the profile file. The profile was partially saved." }, + { WERR_NERR_LOGOVERFLOW, "Log file %1 is full." }, + { WERR_NERR_LOGFILECHANGED, "This log file has changed between reads." }, + { WERR_NERR_LOGFILECORRUPT, "Log file %1 is corrupt." }, + { WERR_NERR_SOURCEISDIR, "The source path cannot be a directory." }, + { WERR_NERR_BADSOURCE, "The source path is illegal." }, + { WERR_NERR_BADDEST, "The destination path is illegal." }, + { WERR_NERR_DIFFERENTSERVERS, "The source and destination paths are on different servers." }, + { WERR_NERR_RUNSRVPAUSED, "The Run server you requested is paused." }, + { WERR_NERR_ERRCOMMRUNSRV, "An error occurred when communicating with a Run server." }, + { WERR_NERR_ERROREXECINGGHOST, "An error occurred when starting a background process." }, + { WERR_NERR_SHARENOTFOUND, "The shared resource you are connected to could not be found." }, + { WERR_NERR_INVALIDLANA, "The LAN adapter number is invalid." }, + { WERR_NERR_OPENFILES, "There are open files on the connection." }, + { WERR_NERR_ACTIVECONNS, "Active connections still exist." }, + { WERR_NERR_BADPASSWORDCORE, "This share name or password is invalid." }, + { WERR_NERR_DEVINUSE, "The device is being accessed by an active process." }, + { WERR_NERR_LOCALDRIVE, "The drive letter is in use locally." }, + { WERR_NERR_ALERTEXISTS, "The specified client is already registered for the specified event." }, + { WERR_NERR_TOOMANYALERTS, "The alert table is full." }, + { WERR_NERR_NOSUCHALERT, "An invalid or nonexistent alert name was raised." }, + { WERR_NERR_BADRECIPIENT, "The alert recipient is invalid." }, + { WERR_NERR_ACCTLIMITEXCEEDED, "A user\'s session with this server has been deleted" }, + { WERR_NERR_INVALIDLOGSEEK, "The log file does not contain the requested record number." }, + { WERR_NERR_BADUASCONFIG, "The user accounts database is not configured correctly." }, + { WERR_NERR_INVALIDUASOP, "This operation is not permitted when the Net Logon service is running." }, + { WERR_NERR_LASTADMIN, "This operation is not allowed on the last administrative account." }, + { WERR_NERR_DCNOTFOUND, "Could not find the domain controller for this domain." }, + { WERR_NERR_LOGONTRACKINGERROR, "Could not set logon information for this user." }, + { WERR_NERR_NETLOGONNOTSTARTED, "The Net Logon service has not been started." }, + { WERR_NERR_CANNOTGROWUASFILE, "Unable to add to the user accounts database." }, + { WERR_NERR_TIMEDIFFATDC, "This server\'s clock is not synchronized with the PDC\'s clock." }, + { WERR_NERR_PASSWORDMISMATCH, "A password mismatch has been detected." }, + { WERR_NERR_NOSUCHSERVER, "The server identification does not specify a valid server." }, + { WERR_NERR_NOSUCHSESSION, "The session identification does not specify a valid session." }, + { WERR_NERR_NOSUCHCONNECTION, "The connection identification does not specify a valid connection." }, + { WERR_NERR_TOOMANYSERVERS, "There is no space for another entry in the table of available servers." }, + { WERR_NERR_TOOMANYSESSIONS, "The server has reached the maximum number of sessions it supports." }, + { WERR_NERR_TOOMANYCONNECTIONS, "The server has reached the maximum number of connections it supports." }, + { WERR_NERR_TOOMANYFILES, "The server cannot open more files because it has reached its maximum number." }, + { WERR_NERR_NOALTERNATESERVERS, "There are no alternate servers registered on this server." }, + { WERR_NERR_TRYDOWNLEVEL, "Try the down-level (remote admin protocol) version of API instead." }, + { WERR_NERR_UPSDRIVERNOTSTARTED, "The uninterruptible power supply (UPS) driver could not be accessed by the UPS service." }, + { WERR_NERR_UPSINVALIDCONFIG, "The UPS service is not configured correctly." }, + { WERR_NERR_UPSINVALIDCOMMPORT, "The UPS service could not access the specified Comm Port." }, + { WERR_NERR_UPSSIGNALASSERTED, "The UPS indicated a line fail or low battery situation. Service not started." }, + { WERR_NERR_UPSSHUTDOWNFAILED, "The UPS service failed to perform a system shut down." }, + { WERR_NERR_BADDOSRETCODE, "The program below returned an MS-DOS error code." }, + { WERR_NERR_PROGNEEDSEXTRAMEM, "The program below needs more memory." }, + { WERR_NERR_BADDOSFUNCTION, "The program below called an unsupported MS-DOS function." }, + { WERR_NERR_REMOTEBOOTFAILED, "The workstation failed to boot." }, + { WERR_NERR_BADFILECHECKSUM, "The file below is corrupt." }, + { WERR_NERR_NORPLBOOTSYSTEM, "No loader is specified in the boot-block definition file." }, + { WERR_NERR_RPLLOADRNETBIOSERR, "NetBIOS returned an error: The network control blocks (NCBs) and Server Message Block (SMB) are dumped above." }, + { WERR_NERR_RPLLOADRDISKERR, "A disk I/O error occurred." }, + { WERR_NERR_IMAGEPARAMERR, "Image parameter substitution failed." }, + { WERR_NERR_TOOMANYIMAGEPARAMS, "Too many image parameters cross disk sector boundaries." }, + { WERR_NERR_NONDOSFLOPPYUSED, "The image was not generated from an MS-DOS disk formatted with /S." }, + { WERR_NERR_RPLBOOTRESTART, "Remote boot will be restarted later." }, + { WERR_NERR_RPLSRVRCALLFAILED, "The call to the Remoteboot server failed." }, + { WERR_NERR_CANTCONNECTRPLSRVR, "Cannot connect to the Remoteboot server." }, + { WERR_NERR_CANTOPENIMAGEFILE, "Cannot open image file on the Remoteboot server." }, + { WERR_NERR_CALLINGRPLSRVR, "Connecting to the Remoteboot server." }, + { WERR_NERR_STARTINGRPLBOOT, "Connecting to the Remoteboot server." }, + { WERR_NERR_RPLBOOTSERVICETERM, "Remote boot service was stopped, check the error log for the cause of the problem." }, + { WERR_NERR_RPLBOOTSTARTFAILED, "Remote boot startup failed; check the error log for the cause of the problem." }, + { WERR_NERR_RPL_CONNECTED, "A second connection to a Remoteboot resource is not allowed." }, + { WERR_NERR_BROWSERCONFIGUREDTONOTRUN, "The browser service was configured with MaintainServerList=No." }, + { WERR_NERR_RPLNOADAPTERSSTARTED, "Service failed to start because none of the network adapters started with this service." }, + { WERR_NERR_RPLBADREGISTRY, "Service failed to start due to bad startup information in the registry." }, + { WERR_NERR_RPLBADDATABASE, "Service failed to start because its database is absent or corrupt." }, + { WERR_NERR_RPLRPLFILESSHARE, "Service failed to start because the RPLFILES share is absent." }, + { WERR_NERR_RPLNOTRPLSERVER, "Service failed to start because the RPLUSER group is absent." }, + { WERR_NERR_RPLCANNOTENUM, "Cannot enumerate service records." }, + { WERR_NERR_RPLWKSTAINFOCORRUPTED, "Workstation record information has been corrupted." }, + { WERR_NERR_RPLWKSTANOTFOUND, "Workstation record was not found." }, + { WERR_NERR_RPLWKSTANAMEUNAVAILABLE, "Workstation name is in use by some other workstation." }, + { WERR_NERR_RPLPROFILEINFOCORRUPTED, "Profile record information has been corrupted." }, + { WERR_NERR_RPLPROFILENOTFOUND, "Profile record was not found." }, + { WERR_NERR_RPLPROFILENAMEUNAVAILABLE, "Profile name is in use by some other profile." }, + { WERR_NERR_RPLPROFILENOTEMPTY, "There are workstations using this profile." }, + { WERR_NERR_RPLCONFIGINFOCORRUPTED, "Configuration record information has been corrupted." }, + { WERR_NERR_RPLCONFIGNOTFOUND, "Configuration record was not found." }, + { WERR_NERR_RPLADAPTERINFOCORRUPTED, "Adapter ID record information has been corrupted." }, + { WERR_NERR_RPLINTERNAL, "An internal service error has occurred." }, + { WERR_NERR_RPLVENDORINFOCORRUPTED, "Vendor ID record information has been corrupted." }, + { WERR_NERR_RPLBOOTINFOCORRUPTED, "Boot block record information has been corrupted." }, + { WERR_NERR_RPLWKSTANEEDSUSERACCT, "The user account for this workstation record is missing." }, + { WERR_NERR_RPLNEEDSRPLUSERACCT, "The RPLUSER local group could not be found." }, + { WERR_NERR_RPLBOOTNOTFOUND, "Boot block record was not found." }, + { WERR_NERR_RPLINCOMPATIBLEPROFILE, "Chosen profile is incompatible with this workstation." }, + { WERR_NERR_RPLADAPTERNAMEUNAVAILABLE, "Chosen network adapter ID is in use by some other workstation." }, + { WERR_NERR_RPLCONFIGNOTEMPTY, "There are profiles using this configuration." }, + { WERR_NERR_RPLBOOTINUSE, "There are workstations, profiles, or configurations using this boot block." }, + { WERR_NERR_RPLBACKUPDATABASE, "Service failed to back up the Remoteboot database." }, + { WERR_NERR_RPLADAPTERNOTFOUND, "Adapter record was not found." }, + { WERR_NERR_RPLVENDORNOTFOUND, "Vendor record was not found." }, + { WERR_NERR_RPLVENDORNAMEUNAVAILABLE, "Vendor name is in use by some other vendor record." }, + { WERR_NERR_RPLBOOTNAMEUNAVAILABLE, "The boot name or vendor ID is in use by some other boot block record." }, + { WERR_NERR_RPLCONFIGNAMEUNAVAILABLE, "The configuration name is in use by some other configuration." }, + { WERR_NERR_DFSINTERNALCORRUPTION, "The internal database maintained by the DFS service is corrupt." }, + { WERR_NERR_DFSVOLUMEDATACORRUPT, "One of the records in the internal DFS database is corrupt." }, + { WERR_NERR_DFSNOSUCHVOLUME, "There is no DFS name whose entry path matches the input entry path." }, + { WERR_NERR_DFSVOLUMEALREADYEXISTS, "A root or link with the given name already exists." }, + { WERR_NERR_DFSALREADYSHARED, "The server share specified is already shared in the DFS." }, + { WERR_NERR_DFSNOSUCHSHARE, "The indicated server share does not support the indicated DFS namespace." }, + { WERR_NERR_DFSNOTALEAFVOLUME, "The operation is not valid in this portion of the namespace." }, + { WERR_NERR_DFSLEAFVOLUME, "The operation is not valid in this portion of the namespace." }, + { WERR_NERR_DFSVOLUMEHASMULTIPLESERVERS, "The operation is ambiguous because the link has multiple servers." }, + { WERR_NERR_DFSCANTCREATEJUNCTIONPOINT, "Unable to create a link." }, + { WERR_NERR_DFSSERVERNOTDFSAWARE, "The server is not DFS-aware." }, + { WERR_NERR_DFSBADRENAMEPATH, "The specified rename target path is invalid." }, + { WERR_NERR_DFSVOLUMEISOFFLINE, "The specified DFS link is offline." }, + { WERR_NERR_DFSNOSUCHSERVER, "The specified server is not a server for this link." }, + { WERR_NERR_DFSCYCLICALNAME, "A cycle in the DFS name was detected." }, + { WERR_NERR_DFSNOTSUPPORTEDINSERVERDFS, "The operation is not supported on a server-based DFS." }, + { WERR_NERR_DFSDUPLICATESERVICE, "This link is already supported by the specified server share." }, + { WERR_NERR_DFSCANTREMOVELASTSERVERSHARE, "Cannot remove the last server share supporting this root or link." }, + { WERR_NERR_DFSVOLUMEISINTERDFS, "The operation is not supported for an inter-DFS link." }, + { WERR_NERR_DFSINCONSISTENT, "The internal state of the DFS Service has become inconsistent." }, + { WERR_NERR_DFSSERVERUPGRADED, "The DFS Service has been installed on the specified server." }, + { WERR_NERR_DFSDATAISIDENTICAL, "The DFS data being reconciled is identical." }, + { WERR_NERR_DFSCANTREMOVEDFSROOT, "The DFS root cannot be deleted. Uninstall DFS if required." }, + { WERR_NERR_DFSCHILDORPARENTINDFS, "A child or parent directory of the share is already in a DFS." }, + { WERR_NERR_DFSINTERNALERROR, "DFS internal error." }, + { WERR_NERR_SETUPALREADYJOINED, "This machine is already joined to a domain." }, + { WERR_NERR_SETUPNOTJOINED, "This machine is not currently joined to a domain." }, + { WERR_NERR_SETUPDOMAINCONTROLLER, "This machine is a domain controller and cannot be unjoined from a domain." }, + { WERR_NERR_DEFAULTJOINREQUIRED, "The destination domain controller does not support creating machine accounts in organizational units (OUs)." }, + { WERR_NERR_INVALIDWORKGROUPNAME, "The specified workgroup name is invalid." }, + { WERR_NERR_NAMEUSESINCOMPATIBLECODEPAGE, "The specified computer name is incompatible with the default language used on the domain controller." }, + { WERR_NERR_COMPUTERACCOUNTNOTFOUND, "The specified computer account could not be found." }, + { WERR_NERR_PERSONALSKU, "This version of Windows cannot be joined to a domain." }, + { WERR_NERR_PASSWORDMUSTCHANGE, "The password must change at the next logon." }, + { WERR_NERR_ACCOUNTLOCKEDOUT, "The account is locked out." }, + { WERR_NERR_PASSWORDTOOLONG, "The password is too long." }, + { WERR_NERR_PASSWORDNOTCOMPLEXENOUGH, "The password does not meet the complexity policy." }, + { WERR_NERR_PASSWORDFILTERERROR, "The password does not meet the requirements of the password filter DLLs." }, + { WERR_UNKNOWN_PRINT_MONITOR, "The specified print monitor is unknown." }, + { WERR_PRINTER_DRIVER_IN_USE, "The specified printer driver is currently in use." }, + { WERR_SPOOL_FILE_NOT_FOUND, "The spool file was not found." }, + { WERR_SPL_NO_STARTDOC, "A StartDocPrinter call was not issued." }, + { WERR_SPL_NO_ADDJOB, "An AddJob call was not issued." }, + { WERR_PRINT_PROCESSOR_ALREADY_INSTALLED, "The specified print processor has already been installed." }, + { WERR_PRINT_MONITOR_ALREADY_INSTALLED, "The specified print monitor has already been installed." }, + { WERR_INVALID_PRINT_MONITOR, "The specified print monitor does not have the required functions." }, + { WERR_PRINT_MONITOR_IN_USE, "The specified print monitor is currently in use." }, + { WERR_PRINTER_HAS_JOBS_QUEUED, "The requested operation is not allowed when there are jobs queued to the printer." }, + { WERR_SUCCESS_REBOOT_REQUIRED, "The requested operation is successful. Changes will not be effective until the system is rebooted." }, + { WERR_SUCCESS_RESTART_REQUIRED, "The requested operation is successful. Changes will not be effective until the service is restarted." }, + { WERR_PRINTER_NOT_FOUND, "No printers were found." }, + { WERR_PRINTER_DRIVER_WARNED, "The printer driver is known to be unreliable." }, + { WERR_PRINTER_DRIVER_BLOCKED, "The printer driver is known to harm the system." }, + { WERR_PRINTER_DRIVER_PACKAGE_IN_USE, "The specified printer driver package is currently in use." }, + { WERR_CORE_DRIVER_PACKAGE_NOT_FOUND, "Unable to find a core driver package that is required by the printer driver package." }, + { WERR_FAIL_REBOOT_REQUIRED, "The requested operation failed. A system reboot is required to roll back changes made." }, + { WERR_FAIL_REBOOT_INITIATED, "The requested operation failed. A system reboot has been initiated to roll back changes made." }, + { WERR_IO_REISSUE_AS_CACHED, "Reissue the given operation as a cached I/O operation" }, + { WERR_WINS_INTERNAL, "Windows Internet Name Service (WINS) encountered an error while processing the command." }, + { WERR_CAN_NOT_DEL_LOCAL_WINS, "The local WINS cannot be deleted." }, + { WERR_STATIC_INIT, "The importation from the file failed." }, + { WERR_INC_BACKUP, "The backup failed. Was a full backup done before?" }, + { WERR_FULL_BACKUP, "The backup failed. Check the directory to which you are backing the database." }, + { WERR_REC_NON_EXISTENT, "The name does not exist in the WINS database." }, + { WERR_RPL_NOT_ALLOWED, "Replication with a nonconfigured partner is not allowed." }, + { WERR_DHCP_ADDRESS_CONFLICT, "The Dynamic Host Configuration Protocol (DHCP) client has obtained an IP address that is already in use on the network. The local interface will be disabled until the DHCP client can obtain a new address." }, + { WERR_WMI_GUID_NOT_FOUND, "The GUID passed was not recognized as valid by a WMI data provider." }, + { WERR_WMI_INSTANCE_NOT_FOUND, "The instance name passed was not recognized as valid by a WMI data provider." }, + { WERR_WMI_ITEMID_NOT_FOUND, "The data item ID passed was not recognized as valid by a WMI data provider." }, + { WERR_WMI_TRY_AGAIN, "The WMI request could not be completed and should be retried." }, + { WERR_WMI_DP_NOT_FOUND, "The WMI data provider could not be located." }, + { WERR_WMI_UNRESOLVED_INSTANCE_REF, "The WMI data provider references an instance set that has not been registered." }, + { WERR_WMI_ALREADY_ENABLED, "The WMI data block or event notification has already been enabled." }, + { WERR_WMI_GUID_DISCONNECTED, "The WMI data block is no longer available." }, + { WERR_WMI_SERVER_UNAVAILABLE, "The WMI data service is not available." }, + { WERR_WMI_DP_FAILED, "The WMI data provider failed to carry out the request." }, + { WERR_WMI_INVALID_MOF, "The WMI Managed Object Format (MOF) information is not valid." }, + { WERR_WMI_INVALID_REGINFO, "The WMI registration information is not valid." }, + { WERR_WMI_ALREADY_DISABLED, "The WMI data block or event notification has already been disabled." }, + { WERR_WMI_READ_ONLY, "The WMI data item or data block is read-only." }, + { WERR_WMI_SET_FAILURE, "The WMI data item or data block could not be changed." }, + { WERR_INVALID_MEDIA, "The media identifier does not represent a valid medium." }, + { WERR_INVALID_LIBRARY, "The library identifier does not represent a valid library." }, + { WERR_INVALID_MEDIA_POOL, "The media pool identifier does not represent a valid media pool." }, + { WERR_DRIVE_MEDIA_MISMATCH, "The drive and medium are not compatible, or they exist in different libraries." }, + { WERR_MEDIA_OFFLINE, "The medium currently exists in an offline library and must be online to perform this operation." }, + { WERR_LIBRARY_OFFLINE, "The operation cannot be performed on an offline library." }, + { WERR_EMPTY, "The library, drive, or media pool is empty." }, + { WERR_NOT_EMPTY, "The library, drive, or media pool must be empty to perform this operation." }, + { WERR_MEDIA_UNAVAILABLE, "No media is currently available in this media pool or library." }, + { WERR_RESOURCE_DISABLED, "A resource required for this operation is disabled." }, + { WERR_INVALID_CLEANER, "The media identifier does not represent a valid cleaner." }, + { WERR_UNABLE_TO_CLEAN, "The drive cannot be cleaned or does not support cleaning." }, + { WERR_OBJECT_NOT_FOUND, "The object identifier does not represent a valid object." }, + { WERR_DATABASE_FAILURE, "Unable to read from or write to the database." }, + { WERR_DATABASE_FULL, "The database is full." }, + { WERR_MEDIA_INCOMPATIBLE, "The medium is not compatible with the device or media pool." }, + { WERR_RESOURCE_NOT_PRESENT, "The resource required for this operation does not exist." }, + { WERR_INVALID_OPERATION, "The operation identifier is not valid." }, + { WERR_MEDIA_NOT_AVAILABLE, "The media is not mounted or ready for use." }, + { WERR_DEVICE_NOT_AVAILABLE, "The device is not ready for use." }, + { WERR_REQUEST_REFUSED, "The operator or administrator has refused the request." }, + { WERR_INVALID_DRIVE_OBJECT, "The drive identifier does not represent a valid drive." }, + { WERR_LIBRARY_FULL, "Library is full. No slot is available for use." }, + { WERR_MEDIUM_NOT_ACCESSIBLE, "The transport cannot access the medium." }, + { WERR_UNABLE_TO_LOAD_MEDIUM, "Unable to load the medium into the drive." }, + { WERR_UNABLE_TO_INVENTORY_DRIVE, "Unable to retrieve the drive status." }, + { WERR_UNABLE_TO_INVENTORY_SLOT, "Unable to retrieve the slot status." }, + { WERR_UNABLE_TO_INVENTORY_TRANSPORT, "Unable to retrieve status about the transport." }, + { WERR_TRANSPORT_FULL, "Cannot use the transport because it is already in use." }, + { WERR_CONTROLLING_IEPORT, "Unable to open or close the inject/eject port." }, + { WERR_UNABLE_TO_EJECT_MOUNTED_MEDIA, "Unable to eject the medium because it is in a drive." }, + { WERR_CLEANER_SLOT_SET, "A cleaner slot is already reserved." }, + { WERR_CLEANER_SLOT_NOT_SET, "A cleaner slot is not reserved." }, + { WERR_CLEANER_CARTRIDGE_SPENT, "The cleaner cartridge has performed the maximum number of drive cleanings." }, + { WERR_UNEXPECTED_OMID, "Unexpected on-medium identifier." }, + { WERR_CANT_DELETE_LAST_ITEM, "The last remaining item in this group or resource cannot be deleted." }, + { WERR_MESSAGE_EXCEEDS_MAX_SIZE, "The message provided exceeds the maximum size allowed for this parameter." }, + { WERR_VOLUME_CONTAINS_SYS_FILES, "The volume contains system or paging files." }, + { WERR_INDIGENOUS_TYPE, "The media type cannot be removed from this library because at least one drive in the library reports it can support this media type." }, + { WERR_NO_SUPPORTING_DRIVES, "This offline media cannot be mounted on this system because no enabled drives are present that can be used." }, + { WERR_CLEANER_CARTRIDGE_INSTALLED, "A cleaner cartridge is present in the tape library." }, + { WERR_IEPORT_FULL, "Cannot use the IEport because it is not empty." }, + { WERR_FILE_OFFLINE, "The remote storage service was not able to recall the file." }, + { WERR_REMOTE_STORAGE_NOT_ACTIVE, "The remote storage service is not operational at this time." }, + { WERR_REMOTE_STORAGE_MEDIA_ERROR, "The remote storage service encountered a media error." }, + { WERR_NOT_A_REPARSE_POINT, "The file or directory is not a reparse point." }, + { WERR_REPARSE_ATTRIBUTE_CONFLICT, "The reparse point attribute cannot be set because it conflicts with an existing attribute." }, + { WERR_INVALID_REPARSE_DATA, "The data present in the reparse point buffer is invalid." }, + { WERR_REPARSE_TAG_INVALID, "The tag present in the reparse point buffer is invalid." }, + { WERR_REPARSE_TAG_MISMATCH, "There is a mismatch between the tag specified in the request and the tag present in the reparse point." }, + { WERR_VOLUME_NOT_SIS_ENABLED, "Single Instance Storage (SIS) is not available on this volume." }, + { WERR_DEPENDENT_RESOURCE_EXISTS, "The operation cannot be completed because other resources depend on this resource." }, + { WERR_DEPENDENCY_NOT_FOUND, "The cluster resource dependency cannot be found." }, + { WERR_DEPENDENCY_ALREADY_EXISTS, "The cluster resource cannot be made dependent on the specified resource because it is already dependent." }, + { WERR_RESOURCE_NOT_ONLINE, "The cluster resource is not online." }, + { WERR_HOST_NODE_NOT_AVAILABLE, "A cluster node is not available for this operation." }, + { WERR_RESOURCE_NOT_AVAILABLE, "The cluster resource is not available." }, + { WERR_RESOURCE_NOT_FOUND, "The cluster resource could not be found." }, + { WERR_SHUTDOWN_CLUSTER, "The cluster is being shut down." }, + { WERR_CANT_EVICT_ACTIVE_NODE, "A cluster node cannot be evicted from the cluster unless the node is down or it is the last node." }, + { WERR_OBJECT_ALREADY_EXISTS, "The object already exists." }, + { WERR_OBJECT_IN_LIST, "The object is already in the list." }, + { WERR_GROUP_NOT_AVAILABLE, "The cluster group is not available for any new requests." }, + { WERR_GROUP_NOT_FOUND, "The cluster group could not be found." }, + { WERR_GROUP_NOT_ONLINE, "The operation could not be completed because the cluster group is not online." }, + { WERR_HOST_NODE_NOT_RESOURCE_OWNER, "The operation failed because either the specified cluster node is not the owner of the resource, or the node is not a possible owner of the resource." }, + { WERR_HOST_NODE_NOT_GROUP_OWNER, "The operation failed because either the specified cluster node is not the owner of the group, or the node is not a possible owner of the group." }, + { WERR_RESMON_CREATE_FAILED, "The cluster resource could not be created in the specified resource monitor." }, + { WERR_RESMON_ONLINE_FAILED, "The cluster resource could not be brought online by the resource monitor." }, + { WERR_RESOURCE_ONLINE, "The operation could not be completed because the cluster resource is online." }, + { WERR_QUORUM_RESOURCE, "The cluster resource could not be deleted or brought offline because it is the quorum resource." }, + { WERR_NOT_QUORUM_CAPABLE, "The cluster could not make the specified resource a quorum resource because it is not capable of being a quorum resource." }, + { WERR_CLUSTER_SHUTTING_DOWN, "The cluster software is shutting down." }, + { WERR_INVALID_STATE, "The group or resource is not in the correct state to perform the requested operation." }, + { WERR_RESOURCE_PROPERTIES_STORED, "The properties were stored but not all changes will take effect until the next time the resource is brought online." }, + { WERR_NOT_QUORUM_CLASS, "The cluster could not make the specified resource a quorum resource because it does not belong to a shared storage class." }, + { WERR_CORE_RESOURCE, "The cluster resource could not be deleted because it is a core resource." }, + { WERR_QUORUM_RESOURCE_ONLINE_FAILED, "The quorum resource failed to come online." }, + { WERR_QUORUMLOG_OPEN_FAILED, "The quorum log could not be created or mounted successfully." }, + { WERR_CLUSTERLOG_CORRUPT, "The cluster log is corrupt." }, + { WERR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE, "The record could not be written to the cluster log because it exceeds the maximum size." }, + { WERR_CLUSTERLOG_EXCEEDS_MAXSIZE, "The cluster log exceeds its maximum size." }, + { WERR_CLUSTERLOG_CHKPOINT_NOT_FOUND, "No checkpoint record was found in the cluster log." }, + { WERR_CLUSTERLOG_NOT_ENOUGH_SPACE, "The minimum required disk space needed for logging is not available." }, + { WERR_QUORUM_OWNER_ALIVE, "The cluster node failed to take control of the quorum resource because the resource is owned by another active node." }, + { WERR_NETWORK_NOT_AVAILABLE, "A cluster network is not available for this operation." }, + { WERR_NODE_NOT_AVAILABLE, "A cluster node is not available for this operation." }, + { WERR_ALL_NODES_NOT_AVAILABLE, "All cluster nodes must be running to perform this operation." }, + { WERR_RESOURCE_FAILED, "A cluster resource failed." }, + { WERR_CLUSTER_INVALID_NODE, "The cluster node is not valid." }, + { WERR_CLUSTER_NODE_EXISTS, "The cluster node already exists." }, + { WERR_CLUSTER_JOIN_IN_PROGRESS, "A node is in the process of joining the cluster." }, + { WERR_CLUSTER_NODE_NOT_FOUND, "The cluster node was not found." }, + { WERR_CLUSTER_LOCAL_NODE_NOT_FOUND, "The cluster local node information was not found." }, + { WERR_CLUSTER_NETWORK_EXISTS, "The cluster network already exists." }, + { WERR_CLUSTER_NETWORK_NOT_FOUND, "The cluster network was not found." }, + { WERR_CLUSTER_NETINTERFACE_EXISTS, "The cluster network interface already exists." }, + { WERR_CLUSTER_NETINTERFACE_NOT_FOUND, "The cluster network interface was not found." }, + { WERR_CLUSTER_INVALID_REQUEST, "The cluster request is not valid for this object." }, + { WERR_CLUSTER_INVALID_NETWORK_PROVIDER, "The cluster network provider is not valid." }, + { WERR_CLUSTER_NODE_DOWN, "The cluster node is down." }, + { WERR_CLUSTER_NODE_UNREACHABLE, "The cluster node is not reachable." }, + { WERR_CLUSTER_NODE_NOT_MEMBER, "The cluster node is not a member of the cluster." }, + { WERR_CLUSTER_JOIN_NOT_IN_PROGRESS, "A cluster join operation is not in progress." }, + { WERR_CLUSTER_INVALID_NETWORK, "The cluster network is not valid." }, + { WERR_CLUSTER_NODE_UP, "The cluster node is up." }, + { WERR_CLUSTER_IPADDR_IN_USE, "The cluster IP address is already in use." }, + { WERR_CLUSTER_NODE_NOT_PAUSED, "The cluster node is not paused." }, + { WERR_CLUSTER_NO_SECURITY_CONTEXT, "No cluster security context is available." }, + { WERR_CLUSTER_NETWORK_NOT_INTERNAL, "The cluster network is not configured for internal cluster communication." }, + { WERR_CLUSTER_NODE_ALREADY_UP, "The cluster node is already up." }, + { WERR_CLUSTER_NODE_ALREADY_DOWN, "The cluster node is already down." }, + { WERR_CLUSTER_NETWORK_ALREADY_ONLINE, "The cluster network is already online." }, + { WERR_CLUSTER_NETWORK_ALREADY_OFFLINE, "The cluster network is already offline." }, + { WERR_CLUSTER_NODE_ALREADY_MEMBER, "The cluster node is already a member of the cluster." }, + { WERR_CLUSTER_LAST_INTERNAL_NETWORK, "The cluster network is the only one configured for internal cluster communication between two or more active cluster nodes. The internal communication capability cannot be removed from the network." }, + { WERR_CLUSTER_NETWORK_HAS_DEPENDENTS, "One or more cluster resources depend on the network to provide service to clients. The client access capability cannot be removed from the network." }, + { WERR_INVALID_OPERATION_ON_QUORUM, "This operation cannot be performed on the cluster resource because it is the quorum resource. You may not bring the quorum resource offline or modify its possible owners list." }, + { WERR_DEPENDENCY_NOT_ALLOWED, "The cluster quorum resource is not allowed to have any dependencies." }, + { WERR_CLUSTER_NODE_PAUSED, "The cluster node is paused." }, + { WERR_NODE_CANT_HOST_RESOURCE, "The cluster resource cannot be brought online. The owner node cannot run this resource." }, + { WERR_CLUSTER_NODE_NOT_READY, "The cluster node is not ready to perform the requested operation." }, + { WERR_CLUSTER_NODE_SHUTTING_DOWN, "The cluster node is shutting down." }, + { WERR_CLUSTER_JOIN_ABORTED, "The cluster join operation was aborted." }, + { WERR_CLUSTER_INCOMPATIBLE_VERSIONS, "The cluster join operation failed due to incompatible software versions between the joining node and its sponsor." }, + { WERR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED, "This resource cannot be created because the cluster has reached the limit on the number of resources it can monitor." }, + { WERR_CLUSTER_SYSTEM_CONFIG_CHANGED, "The system configuration changed during the cluster join or form operation. The join or form operation was aborted." }, + { WERR_CLUSTER_RESOURCE_TYPE_NOT_FOUND, "The specified resource type was not found." }, + { WERR_CLUSTER_RESTYPE_NOT_SUPPORTED, "The specified node does not support a resource of this type. This may be due to version inconsistencies or due to the absence of the resource DLL on this node." }, + { WERR_CLUSTER_RESNAME_NOT_FOUND, "The specified resource name is not supported by this resource DLL. This may be due to a bad (or changed) name supplied to the resource DLL." }, + { WERR_CLUSTER_NO_RPC_PACKAGES_REGISTERED, "No authentication package could be registered with the RPC server." }, + { WERR_CLUSTER_OWNER_NOT_IN_PREFLIST, "You cannot bring the group online because the owner of the group is not in the preferred list for the group. To change the owner node for the group, move the group." }, + { WERR_CLUSTER_DATABASE_SEQMISMATCH, "The join operation failed because the cluster database sequence number has changed or is incompatible with the locker node. This may happen during a join operation if the cluster database was changing during the join." }, + { WERR_RESMON_INVALID_STATE, "The resource monitor will not allow the fail operation to be performed while the resource is in its current state. This may happen if the resource is in a pending state." }, + { WERR_CLUSTER_GUM_NOT_LOCKER, "A non-locker code received a request to reserve the lock for making global updates." }, + { WERR_QUORUM_DISK_NOT_FOUND, "The quorum disk could not be located by the cluster service." }, + { WERR_DATABASE_BACKUP_CORRUPT, "The backed-up cluster database is possibly corrupt." }, + { WERR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT, "A DFS root already exists in this cluster node." }, + { WERR_RESOURCE_PROPERTY_UNCHANGEABLE, "An attempt to modify a resource property failed because it conflicts with another existing property." }, + { WERR_CLUSTER_MEMBERSHIP_INVALID_STATE, "An operation was attempted that is incompatible with the current membership state of the node." }, + { WERR_CLUSTER_QUORUMLOG_NOT_FOUND, "The quorum resource does not contain the quorum log." }, + { WERR_CLUSTER_MEMBERSHIP_HALT, "The membership engine requested shutdown of the cluster service on this node." }, + { WERR_CLUSTER_INSTANCE_ID_MISMATCH, "The join operation failed because the cluster instance ID of the joining node does not match the cluster instance ID of the sponsor node." }, + { WERR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP, "A matching cluster network for the specified IP address could not be found." }, + { WERR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH, "The actual data type of the property did not match the expected data type of the property." }, + { WERR_CLUSTER_EVICT_WITHOUT_CLEANUP, "The cluster node was evicted from the cluster successfully, but the node was not cleaned up. To determine what clean-up steps failed and how to recover, see the Failover Clustering application event log using Event Viewer." }, + { WERR_CLUSTER_PARAMETER_MISMATCH, "Two or more parameter values specified for a resource\'s properties are in conflict." }, + { WERR_NODE_CANNOT_BE_CLUSTERED, "This computer cannot be made a member of a cluster." }, + { WERR_CLUSTER_WRONG_OS_VERSION, "This computer cannot be made a member of a cluster because it does not have the correct version of Windows installed." }, + { WERR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME, "A cluster cannot be created with the specified cluster name because that cluster name is already in use. Specify a different name for the cluster." }, + { WERR_CLUSCFG_ALREADY_COMMITTED, "The cluster configuration action has already been committed." }, + { WERR_CLUSCFG_ROLLBACK_FAILED, "The cluster configuration action could not be rolled back." }, + { WERR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT, "The drive letter assigned to a system disk on one node conflicted with the drive letter assigned to a disk on another node." }, + { WERR_CLUSTER_OLD_VERSION, "One or more nodes in the cluster are running a version of Windows that does not support this operation." }, + { WERR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME, "The name of the corresponding computer account does not match the network name for this resource." }, + { WERR_CLUSTER_NO_NET_ADAPTERS, "No network adapters are available." }, + { WERR_CLUSTER_POISONED, "The cluster node has been poisoned." }, + { WERR_CLUSTER_GROUP_MOVING, "The group is unable to accept the request because it is moving to another node." }, + { WERR_CLUSTER_RESOURCE_TYPE_BUSY, "The resource type cannot accept the request because it is too busy performing another operation." }, + { WERR_RESOURCE_CALL_TIMED_OUT, "The call to the cluster resource DLL timed out." }, + { WERR_INVALID_CLUSTER_IPV6_ADDRESS, "The address is not valid for an IPv6 Address resource. A global IPv6 address is required, and it must match a cluster network. Compatibility addresses are not permitted." }, + { WERR_CLUSTER_INTERNAL_INVALID_FUNCTION, "An internal cluster error occurred. A call to an invalid function was attempted." }, + { WERR_CLUSTER_PARAMETER_OUT_OF_BOUNDS, "A parameter value is out of acceptable range." }, + { WERR_CLUSTER_PARTIAL_SEND, "A network error occurred while sending data to another node in the cluster. The number of bytes transmitted was less than required." }, + { WERR_CLUSTER_REGISTRY_INVALID_FUNCTION, "An invalid cluster registry operation was attempted." }, + { WERR_CLUSTER_INVALID_STRING_TERMINATION, "An input string of characters is not properly terminated." }, + { WERR_CLUSTER_INVALID_STRING_FORMAT, "An input string of characters is not in a valid format for the data it represents." }, + { WERR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS, "An internal cluster error occurred. A cluster database transaction was attempted while a transaction was already in progress." }, + { WERR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS, "An internal cluster error occurred. There was an attempt to commit a cluster database transaction while no transaction was in progress." }, + { WERR_CLUSTER_NULL_DATA, "An internal cluster error occurred. Data was not properly initialized." }, + { WERR_CLUSTER_PARTIAL_READ, "An error occurred while reading from a stream of data. An unexpected number of bytes was returned." }, + { WERR_CLUSTER_PARTIAL_WRITE, "An error occurred while writing to a stream of data. The required number of bytes could not be written." }, + { WERR_CLUSTER_CANT_DESERIALIZE_DATA, "An error occurred while deserializing a stream of cluster data." }, + { WERR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT, "One or more property values for this resource are in conflict with one or more property values associated with its dependent resources." }, + { WERR_CLUSTER_NO_QUORUM, "A quorum of cluster nodes was not present to form a cluster." }, + { WERR_CLUSTER_INVALID_IPV6_NETWORK, "The cluster network is not valid for an IPv6 address resource, or it does not match the configured address." }, + { WERR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK, "The cluster network is not valid for an IPv6 tunnel resource. Check the configuration of the IP Address resource on which the IPv6 tunnel resource depends." }, + { WERR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP, "Quorum resource cannot reside in the available storage group." }, + { WERR_ENCRYPTION_FAILED, "The specified file could not be encrypted." }, + { WERR_DECRYPTION_FAILED, "The specified file could not be decrypted." }, + { WERR_FILE_ENCRYPTED, "The specified file is encrypted and the user does not have the ability to decrypt it." }, + { WERR_NO_RECOVERY_POLICY, "There is no valid encryption recovery policy configured for this system." }, + { WERR_NO_EFS, "The required encryption driver is not loaded for this system." }, + { WERR_WRONG_EFS, "The file was encrypted with a different encryption driver than is currently loaded." }, + { WERR_NO_USER_KEYS, "There are no Encrypting File System (EFS) keys defined for the user." }, + { WERR_FILE_NOT_ENCRYPTED, "The specified file is not encrypted." }, + { WERR_NOT_EXPORT_FORMAT, "The specified file is not in the defined EFS export format." }, + { WERR_FILE_READ_ONLY, "The specified file is read-only." }, + { WERR_DIR_EFS_DISALLOWED, "The directory has been disabled for encryption." }, + { WERR_EFS_SERVER_NOT_TRUSTED, "The server is not trusted for remote encryption operation." }, + { WERR_BAD_RECOVERY_POLICY, "Recovery policy configured for this system contains invalid recovery certificate." }, + { WERR_EFS_ALG_BLOB_TOO_BIG, "The encryption algorithm used on the source file needs a bigger key buffer than the one on the destination file." }, + { WERR_VOLUME_NOT_SUPPORT_EFS, "The disk partition does not support file encryption." }, + { WERR_EFS_DISABLED, "This machine is disabled for file encryption." }, + { WERR_EFS_VERSION_NOT_SUPPORT, "A newer system is required to decrypt this encrypted file." }, + { WERR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE, "The remote server sent an invalid response for a file being opened with client-side encryption." }, + { WERR_CS_ENCRYPTION_UNSUPPORTED_SERVER, "Client-side encryption is not supported by the remote server even though it claims to support it." }, + { WERR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE, "File is encrypted and should be opened in client-side encryption mode." }, + { WERR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE, "A new encrypted file is being created and a $EFS needs to be provided." }, + { WERR_CS_ENCRYPTION_FILE_NOT_CSE, "The SMB client requested a client-side extension (CSE) file system control (FSCTL) on a non-CSE file." }, + { WERR_NO_BROWSER_SERVERS_FOUND, "The list of servers for this workgroup is not currently available" }, + { WERR_LOG_SECTOR_INVALID, "The log service encountered an invalid log sector." }, + { WERR_LOG_SECTOR_PARITY_INVALID, "The log service encountered a log sector with invalid block parity." }, + { WERR_LOG_SECTOR_REMAPPED, "The log service encountered a remapped log sector." }, + { WERR_LOG_BLOCK_INCOMPLETE, "The log service encountered a partial or incomplete log block." }, + { WERR_LOG_INVALID_RANGE, "The log service encountered an attempt to access data outside the active log range." }, + { WERR_LOG_BLOCKS_EXHAUSTED, "The log service user marshaling buffers are exhausted." }, + { WERR_LOG_READ_CONTEXT_INVALID, "The log service encountered an attempt to read from a marshaling area with an invalid read context." }, + { WERR_LOG_RESTART_INVALID, "The log service encountered an invalid log restart area." }, + { WERR_LOG_BLOCK_VERSION, "The log service encountered an invalid log block version." }, + { WERR_LOG_BLOCK_INVALID, "The log service encountered an invalid log block." }, + { WERR_LOG_READ_MODE_INVALID, "The log service encountered an attempt to read the log with an invalid read mode." }, + { WERR_LOG_NO_RESTART, "The log service encountered a log stream with no restart area." }, + { WERR_LOG_METADATA_CORRUPT, "The log service encountered a corrupted metadata file." }, + { WERR_LOG_METADATA_INVALID, "The log service encountered a metadata file that could not be created by the log file system." }, + { WERR_LOG_METADATA_INCONSISTENT, "The log service encountered a metadata file with inconsistent data." }, + { WERR_LOG_RESERVATION_INVALID, "The log service encountered an attempt to erroneous allocate or dispose reservation space." }, + { WERR_LOG_CANT_DELETE, "The log service cannot delete a log file or file system container." }, + { WERR_LOG_CONTAINER_LIMIT_EXCEEDED, "The log service has reached the maximum allowable containers allocated to a log file." }, + { WERR_LOG_START_OF_LOG, "The log service has attempted to read or write backward past the start of the log." }, + { WERR_LOG_POLICY_ALREADY_INSTALLED, "The log policy could not be installed because a policy of the same type is already present." }, + { WERR_LOG_POLICY_NOT_INSTALLED, "The log policy in question was not installed at the time of the request." }, + { WERR_LOG_POLICY_INVALID, "The installed set of policies on the log is invalid." }, + { WERR_LOG_POLICY_CONFLICT, "A policy on the log in question prevented the operation from completing." }, + { WERR_LOG_PINNED_ARCHIVE_TAIL, "Log space cannot be reclaimed because the log is pinned by the archive tail." }, + { WERR_LOG_RECORD_NONEXISTENT, "The log record is not a record in the log file." }, + { WERR_LOG_RECORDS_RESERVED_INVALID, "The number of reserved log records or the adjustment of the number of reserved log records is invalid." }, + { WERR_LOG_SPACE_RESERVED_INVALID, "The reserved log space or the adjustment of the log space is invalid." }, + { WERR_LOG_TAIL_INVALID, "A new or existing archive tail or base of the active log is invalid." }, + { WERR_LOG_FULL, "The log space is exhausted." }, + { WERR_COULD_NOT_RESIZE_LOG, "The log could not be set to the requested size." }, + { WERR_LOG_MULTIPLEXED, "The log is multiplexed; no direct writes to the physical log are allowed." }, + { WERR_LOG_DEDICATED, "The operation failed because the log is a dedicated log." }, + { WERR_LOG_ARCHIVE_NOT_IN_PROGRESS, "The operation requires an archive context." }, + { WERR_LOG_ARCHIVE_IN_PROGRESS, "Log archival is in progress." }, + { WERR_LOG_EPHEMERAL, "The operation requires a non-ephemeral log, but the log is ephemeral." }, + { WERR_LOG_NOT_ENOUGH_CONTAINERS, "The log must have at least two containers before it can be read from or written to." }, + { WERR_LOG_CLIENT_ALREADY_REGISTERED, "A log client has already registered on the stream." }, + { WERR_LOG_CLIENT_NOT_REGISTERED, "A log client has not been registered on the stream." }, + { WERR_LOG_FULL_HANDLER_IN_PROGRESS, "A request has already been made to handle the log full condition." }, + { WERR_LOG_CONTAINER_READ_FAILED, "The log service encountered an error when attempting to read from a log container." }, + { WERR_LOG_CONTAINER_WRITE_FAILED, "The log service encountered an error when attempting to write to a log container." }, + { WERR_LOG_CONTAINER_OPEN_FAILED, "The log service encountered an error when attempting to open a log container." }, + { WERR_LOG_CONTAINER_STATE_INVALID, "The log service encountered an invalid container state when attempting a requested action." }, + { WERR_LOG_STATE_INVALID, "The log service is not in the correct state to perform a requested action." }, + { WERR_LOG_PINNED, "The log space cannot be reclaimed because the log is pinned." }, + { WERR_LOG_METADATA_FLUSH_FAILED, "The log metadata flush failed." }, + { WERR_LOG_INCONSISTENT_SECURITY, "Security on the log and its containers is inconsistent." }, + { WERR_LOG_APPENDED_FLUSH_FAILED, "Records were appended to the log or reservation changes were made, but the log could not be flushed." }, + { WERR_LOG_PINNED_RESERVATION, "The log is pinned due to reservation consuming most of the log space. Free some reserved records to make space available." }, + { WERR_INVALID_TRANSACTION, "The transaction handle associated with this operation is not valid." }, + { WERR_TRANSACTION_NOT_ACTIVE, "The requested operation was made in the context of a transaction that is no longer active." }, + { WERR_TRANSACTION_REQUEST_NOT_VALID, "The requested operation is not valid on the transaction object in its current state." }, + { WERR_TRANSACTION_NOT_REQUESTED, "The caller has called a response API, but the response is not expected because the transaction manager did not issue the corresponding request to the caller." }, + { WERR_TRANSACTION_ALREADY_ABORTED, "It is too late to perform the requested operation because the transaction has already been aborted." }, + { WERR_TRANSACTION_ALREADY_COMMITTED, "It is too late to perform the requested operation because the transaction has already been committed." }, + { WERR_TM_INITIALIZATION_FAILED, "The transaction manager was unable to be successfully initialized. Transacted operations are not supported." }, + { WERR_RESOURCEMANAGER_READ_ONLY, "The specified resource manager made no changes or updates to the resource under this transaction." }, + { WERR_TRANSACTION_NOT_JOINED, "The resource manager has attempted to prepare a transaction that it has not successfully joined." }, + { WERR_TRANSACTION_SUPERIOR_EXISTS, "The transaction object already has a superior enlistment, and the caller attempted an operation that would have created a new superior. Only a single superior enlistment is allowed." }, + { WERR_CRM_PROTOCOL_ALREADY_EXISTS, "The resource manager tried to register a protocol that already exists." }, + { WERR_TRANSACTION_PROPAGATION_FAILED, "The attempt to propagate the transaction failed." }, + { WERR_CRM_PROTOCOL_NOT_FOUND, "The requested propagation protocol was not registered as a CRM." }, + { WERR_TRANSACTION_INVALID_MARSHALL_BUFFER, "The buffer passed in to PushTransaction or PullTransaction is not in a valid format." }, + { WERR_CURRENT_TRANSACTION_NOT_VALID, "The current transaction context associated with the thread is not a valid handle to a transaction object." }, + { WERR_TRANSACTION_NOT_FOUND, "The specified transaction object could not be opened because it was not found." }, + { WERR_RESOURCEMANAGER_NOT_FOUND, "The specified resource manager object could not be opened because it was not found." }, + { WERR_ENLISTMENT_NOT_FOUND, "The specified enlistment object could not be opened because it was not found." }, + { WERR_TRANSACTIONMANAGER_NOT_FOUND, "The specified transaction manager object could not be opened because it was not found." }, + { WERR_TRANSACTIONMANAGER_NOT_ONLINE, "The specified resource manager was unable to create an enlistment because its associated transaction manager is not online." }, + { WERR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION, "The specified transaction manager was unable to create the objects contained in its log file in the ObjectB namespace. Therefore, the transaction manager was unable to recover." }, + { WERR_TRANSACTIONAL_CONFLICT, "The function attempted to use a name that is reserved for use by another transaction." }, + { WERR_RM_NOT_ACTIVE, "Transaction support within the specified file system resource manager is not started or was shut down due to an error." }, + { WERR_RM_METADATA_CORRUPT, "The metadata of the resource manager has been corrupted. The resource manager will not function." }, + { WERR_DIRECTORY_NOT_RM, "The specified directory does not contain a resource manager." }, + { WERR_TRANSACTIONS_UNSUPPORTED_REMOTE, "The remote server or share does not support transacted file operations." }, + { WERR_LOG_RESIZE_INVALID_SIZE, "The requested log size is invalid." }, + { WERR_OBJECT_NO_LONGER_EXISTS, "The object (file, stream, link) corresponding to the handle has been deleted by a transaction savepoint rollback." }, + { WERR_STREAM_MINIVERSION_NOT_FOUND, "The specified file miniversion was not found for this transacted file open." }, + { WERR_STREAM_MINIVERSION_NOT_VALID, "The specified file miniversion was found but has been invalidated. The most likely cause is a transaction savepoint rollback." }, + { WERR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION, "A miniversion may only be opened in the context of the transaction that created it." }, + { WERR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT, "It is not possible to open a miniversion with modify access." }, + { WERR_CANT_CREATE_MORE_STREAM_MINIVERSIONS, "It is not possible to create any more miniversions for this stream." }, + { WERR_REMOTE_FILE_VERSION_MISMATCH, "The remote server sent mismatching version numbers or FID for a file opened with transactions." }, + { WERR_HANDLE_NO_LONGER_VALID, "The handle has been invalidated by a transaction. The most likely cause is the presence of memory mapping on a file, or an open handle when the transaction ended or rolled back to savepoint." }, + { WERR_NO_TXF_METADATA, "There is no transaction metadata on the file." }, + { WERR_LOG_CORRUPTION_DETECTED, "The log data is corrupt." }, + { WERR_CANT_RECOVER_WITH_HANDLE_OPEN, "The file cannot be recovered because a handle is still open on it." }, + { WERR_RM_DISCONNECTED, "The transaction outcome is unavailable because the resource manager responsible for it is disconnected." }, + { WERR_ENLISTMENT_NOT_SUPERIOR, "The request was rejected because the enlistment in question is not a superior enlistment." }, + { WERR_RECOVERY_NOT_NEEDED, "The transactional resource manager is already consistent. Recovery is not needed." }, + { WERR_RM_ALREADY_STARTED, "The transactional resource manager has already been started." }, + { WERR_FILE_IDENTITY_NOT_PERSISTENT, "The file cannot be opened in a transaction because its identity depends on the outcome of an unresolved transaction." }, + { WERR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY, "The operation cannot be performed because another transaction is depending on the fact that this property will not change." }, + { WERR_CANT_CROSS_RM_BOUNDARY, "The operation would involve a single file with two transactional resource managers and is therefore not allowed." }, + { WERR_TXF_DIR_NOT_EMPTY, "The $Txf directory must be empty for this operation to succeed." }, + { WERR_INDOUBT_TRANSACTIONS_EXIST, "The operation would leave a transactional resource manager in an inconsistent state and is, therefore, not allowed." }, + { WERR_TM_VOLATILE, "The operation could not be completed because the transaction manager does not have a log." }, + { WERR_ROLLBACK_TIMER_EXPIRED, "A rollback could not be scheduled because a previously scheduled rollback has already been executed or is queued for execution." }, + { WERR_TXF_ATTRIBUTE_CORRUPT, "The transactional metadata attribute on the file or directory is corrupt and unreadable." }, + { WERR_EFS_NOT_ALLOWED_IN_TRANSACTION, "The encryption operation could not be completed because a transaction is active." }, + { WERR_TRANSACTIONAL_OPEN_NOT_ALLOWED, "This object is not allowed to be opened in a transaction." }, + { WERR_LOG_GROWTH_FAILED, "An attempt to create space in the transactional resource manager\'s log failed. The failure status has been recorded in the event log." }, + { WERR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE, "Memory mapping (creating a mapped section) to a remote file under a transaction is not supported." }, + { WERR_TXF_METADATA_ALREADY_PRESENT, "Transaction metadata is already present on this file and cannot be superseded." }, + { WERR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET, "A transaction scope could not be entered because the scope handler has not been initialized." }, + { WERR_TRANSACTION_REQUIRED_PROMOTION, "Promotion was required to allow the resource manager to enlist, but the transaction was set to disallow it." }, + { WERR_CANNOT_EXECUTE_FILE_IN_TRANSACTION, "This file is open for modification in an unresolved transaction and may be opened for execution only by a transacted reader." }, + { WERR_TRANSACTIONS_NOT_FROZEN, "The request to thaw frozen transactions was ignored because transactions were not previously frozen." }, + { WERR_TRANSACTION_FREEZE_IN_PROGRESS, "Transactions cannot be frozen because a freeze is already in progress." }, + { WERR_NOT_SNAPSHOT_VOLUME, "The target volume is not a snapshot volume. This operation is only valid on a volume mounted as a snapshot." }, + { WERR_NO_SAVEPOINT_WITH_OPEN_FILES, "The savepoint operation failed because files are open on the transaction. This is not permitted." }, + { WERR_DATA_LOST_REPAIR, "Windows has discovered corruption in a file, and that file has since been repaired. Data loss may have occurred." }, + { WERR_SPARSE_NOT_ALLOWED_IN_TRANSACTION, "The sparse operation could not be completed because a transaction is active on the file." }, + { WERR_TM_IDENTITY_MISMATCH, "The call to create a transaction manager object failed because the Tm Identity stored in the logfile does not match the Tm Identity that was passed in as an argument." }, + { WERR_FLOATED_SECTION, "I/O was attempted on a section object that has been floated as a result of a transaction ending. There is no valid data." }, + { WERR_CANNOT_ACCEPT_TRANSACTED_WORK, "The transactional resource manager cannot currently accept transacted work due to a transient condition, such as low resources." }, + { WERR_CANNOT_ABORT_TRANSACTIONS, "The transactional resource manager had too many transactions outstanding that could not be aborted. The transactional resource manager has been shut down." }, + { WERR_CTX_WINSTATION_NAME_INVALID, "The specified session name is invalid." }, + { WERR_CTX_INVALID_PD, "The specified protocol driver is invalid." }, + { WERR_CTX_PD_NOT_FOUND, "The specified protocol driver was not found in the system path." }, + { WERR_CTX_WD_NOT_FOUND, "The specified terminal connection driver was not found in the system path." }, + { WERR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY, "A registry key for event logging could not be created for this session." }, + { WERR_CTX_SERVICE_NAME_COLLISION, "A service with the same name already exists on the system." }, + { WERR_CTX_CLOSE_PENDING, "A close operation is pending on the session." }, + { WERR_CTX_NO_OUTBUF, "There are no free output buffers available." }, + { WERR_CTX_MODEM_INF_NOT_FOUND, "The MODEM.INF file was not found." }, + { WERR_CTX_INVALID_MODEMNAME, "The modem name was not found in the MODEM.INF file." }, + { WERR_CTX_MODEM_RESPONSE_ERROR, "The modem did not accept the command sent to it. Verify that the configured modem name matches the attached modem." }, + { WERR_CTX_MODEM_RESPONSE_TIMEOUT, "The modem did not respond to the command sent to it. Verify that the modem is properly cabled and turned on." }, + { WERR_CTX_MODEM_RESPONSE_NO_CARRIER, "Carrier detect has failed or carrier has been dropped due to disconnect." }, + { WERR_CTX_MODEM_RESPONSE_NO_DIALTONE, "Dial tone not detected within the required time. Verify that the phone cable is properly attached and functional." }, + { WERR_CTX_MODEM_RESPONSE_BUSY, "Busy signal detected at remote site on callback." }, + { WERR_CTX_MODEM_RESPONSE_VOICE, "Voice detected at remote site on callback." }, + { WERR_CTX_TD_ERROR, "Transport driver error" }, + { WERR_CTX_WINSTATION_NOT_FOUND, "The specified session cannot be found." }, + { WERR_CTX_WINSTATION_ALREADY_EXISTS, "The specified session name is already in use." }, + { WERR_CTX_WINSTATION_BUSY, "The requested operation cannot be completed because the terminal connection is currently busy processing a connect, disconnect, reset, or delete operation." }, + { WERR_CTX_BAD_VIDEO_MODE, "An attempt has been made to connect to a session whose video mode is not supported by the current client." }, + { WERR_CTX_GRAPHICS_INVALID, "The application attempted to enable DOS graphics mode. DOS graphics mode is not supported." }, + { WERR_CTX_LOGON_DISABLED, "Your interactive logon privilege has been disabled. Contact your administrator." }, + { WERR_CTX_NOT_CONSOLE, "The requested operation can be performed only on the system console. This is most often the result of a driver or system DLL requiring direct console access." }, + { WERR_CTX_CLIENT_QUERY_TIMEOUT, "The client failed to respond to the server connect message." }, + { WERR_CTX_CONSOLE_DISCONNECT, "Disconnecting the console session is not supported." }, + { WERR_CTX_CONSOLE_CONNECT, "Reconnecting a disconnected session to the console is not supported." }, + { WERR_CTX_SHADOW_DENIED, "The request to control another session remotely was denied." }, + { WERR_CTX_WINSTATION_ACCESS_DENIED, "The requested session access is denied." }, + { WERR_CTX_INVALID_WD, "The specified terminal connection driver is invalid." }, + { WERR_CTX_SHADOW_INVALID, "The requested session cannot be controlled remotely. This may be because the session is disconnected or does not currently have a user logged on." }, + { WERR_CTX_SHADOW_DISABLED, "The requested session is not configured to allow remote control." }, + { WERR_CTX_CLIENT_LICENSE_IN_USE, "Your request to connect to this terminal server has been rejected. Your terminal server client license number is currently being used by another user. Call your system administrator to obtain a unique license number." }, + { WERR_CTX_CLIENT_LICENSE_NOT_SET, "Your request to connect to this terminal server has been rejected. Your terminal server client license number has not been entered for this copy of the terminal server client. Contact your system administrator." }, + { WERR_CTX_LICENSE_NOT_AVAILABLE, "The number of connections to this computer is limited and all connections are in use right now. Try connecting later or contact your system administrator." }, + { WERR_CTX_LICENSE_CLIENT_INVALID, "The client you are using is not licensed to use this system. Your logon request is denied." }, + { WERR_CTX_LICENSE_EXPIRED, "The system license has expired. Your logon request is denied." }, + { WERR_CTX_SHADOW_NOT_RUNNING, "Remote control could not be terminated because the specified session is not currently being remotely controlled." }, + { WERR_CTX_SHADOW_ENDED_BY_MODE_CHANGE, "The remote control of the console was terminated because the display mode was changed. Changing the display mode in a remote control session is not supported." }, + { WERR_ACTIVATION_COUNT_EXCEEDED, "Activation has already been reset the maximum number of times for this installation. Your activation timer will not be cleared." }, + { WERR_CTX_WINSTATIONS_DISABLED, "Remote logons are currently disabled." }, + { WERR_CTX_ENCRYPTION_LEVEL_REQUIRED, "You do not have the proper encryption level to access this session." }, + { WERR_CTX_SESSION_IN_USE, "The user %s\\%s is currently logged on to this computer. Only the current user or an administrator can log on to this computer." }, + { WERR_CTX_NO_FORCE_LOGOFF, "The user %s\\%s is already logged on to the console of this computer. You do not have permission to log in at this time. To resolve this issue, contact %s\\%s and have them log off." }, + { WERR_CTX_ACCOUNT_RESTRICTION, "Unable to log you on because of an account restriction." }, + { WERR_RDP_PROTOCOL_ERROR, "The RDP component %2 detected an error in the protocol stream and has disconnected the client." }, + { WERR_CTX_CDM_CONNECT, "The Client Drive Mapping Service has connected on terminal connection." }, + { WERR_CTX_CDM_DISCONNECT, "The Client Drive Mapping Service has disconnected on terminal connection." }, + { WERR_CTX_SECURITY_LAYER_ERROR, "The terminal server security layer detected an error in the protocol stream and has disconnected the client." }, + { WERR_TS_INCOMPATIBLE_SESSIONS, "The target session is incompatible with the current session." }, + { WERR_FRS_ERR_INVALID_API_SEQUENCE, "The file replication service API was called incorrectly." }, + { WERR_FRS_ERR_STARTING_SERVICE, "The file replication service cannot be started." }, + { WERR_FRS_ERR_STOPPING_SERVICE, "The file replication service cannot be stopped." }, + { WERR_FRS_ERR_INTERNAL_API, "The file replication service API terminated the request. The event log may have more information." }, + { WERR_FRS_ERR_INTERNAL, "The file replication service terminated the request. The event log may have more information." }, + { WERR_FRS_ERR_SERVICE_COMM, "The file replication service cannot be contacted. The event log may have more information." }, + { WERR_FRS_ERR_INSUFFICIENT_PRIV, "The file replication service cannot satisfy the request because the user has insufficient privileges. The event log may have more information." }, + { WERR_FRS_ERR_AUTHENTICATION, "The file replication service cannot satisfy the request because authenticated RPC is not available. The event log may have more information." }, + { WERR_FRS_ERR_PARENT_INSUFFICIENT_PRIV, "The file replication service cannot satisfy the request because the user has insufficient privileges on the domain controller. The event log may have more information." }, + { WERR_FRS_ERR_PARENT_AUTHENTICATION, "The file replication service cannot satisfy the request because authenticated RPC is not available on the domain controller. The event log may have more information." }, + { WERR_FRS_ERR_CHILD_TO_PARENT_COMM, "The file replication service cannot communicate with the file replication service on the domain controller. The event log may have more information." }, + { WERR_FRS_ERR_PARENT_TO_CHILD_COMM, "The file replication service on the domain controller cannot communicate with the file replication service on this computer. The event log may have more information." }, + { WERR_FRS_ERR_SYSVOL_POPULATE, "The file replication service cannot populate the system volume because of an internal error. The event log may have more information." }, + { WERR_FRS_ERR_SYSVOL_POPULATE_TIMEOUT, "The file replication service cannot populate the system volume because of an internal time-out. The event log may have more information." }, + { WERR_FRS_ERR_SYSVOL_IS_BUSY, "The file replication service cannot process the request. The system volume is busy with a previous request." }, + { WERR_FRS_ERR_SYSVOL_DEMOTE, "The file replication service cannot stop replicating the system volume because of an internal error. The event log may have more information." }, + { WERR_FRS_ERR_INVALID_SERVICE_PARAMETER, "The file replication service detected an invalid parameter." }, + { WERR_DS_NOT_INSTALLED, "An error occurred while installing the directory service. For more information, see the event log." }, + { WERR_DS_MEMBERSHIP_EVALUATED_LOCALLY, "The directory service evaluated group memberships locally." }, + { WERR_DS_NO_ATTRIBUTE_OR_VALUE, "The specified directory service attribute or value does not exist." }, + { WERR_DS_INVALID_ATTRIBUTE_YNTAX, "The attribute syntax specified to the directory service is invalid." }, + { WERR_DS_ATTRIBUTE_TYPE_UNDEFINED, "The attribute type specified to the directory service is not defined." }, + { WERR_DS_ATTRIBUTE_OR_VALUE_EXISTS, "The specified directory service attribute or value already exists." }, + { WERR_DS_BUSY, "The directory service is busy." }, + { WERR_DS_UNAVAILABLE, "The directory service is unavailable." }, + { WERR_DS_NO_RIDS_ALLOCATED, "The directory service was unable to allocate a relative identifier." }, + { WERR_DS_NO_MORE_RIDS, "The directory service has exhausted the pool of relative identifiers." }, + { WERR_DS_INCORRECT_ROLE_OWNER, "The requested operation could not be performed because the directory service is not the master for that type of operation." }, + { WERR_DS_RIDMGR_INIT_ERROR, "The directory service was unable to initialize the subsystem that allocates relative identifiers." }, + { WERR_DS_OBJ_CLASS_VIOLATION, "The requested operation did not satisfy one or more constraints associated with the class of the object." }, + { WERR_DS_CANT_ON_NON_LEAF, "The directory service can perform the requested operation only on a leaf object." }, + { WERR_DS_CANT_ON_RDN, "The directory service cannot perform the requested operation on the relative distinguished name (RDN) attribute of an object." }, + { WERR_DS_CANT_MOD_OBJ_CLASS, "The directory service detected an attempt to modify the object class of an object." }, + { WERR_DS_CROSS_DOM_MOVE_ERROR, "The requested cross-domain move operation could not be performed." }, + { WERR_DS_GC_NOT_AVAILABLE, "Unable to contact the global catalog (GC) server." }, + { WERR_SHARED_POLICY, "The policy object is shared and can only be modified at the root." }, + { WERR_POLICY_OBJECT_NOT_FOUND, "The policy object does not exist." }, + { WERR_POLICY_ONLY_IN_DS, "The requested policy information is only in the directory service." }, + { WERR_PROMOTION_ACTIVE, "A domain controller promotion is currently active." }, + { WERR_NO_PROMOTION_ACTIVE, "A domain controller promotion is not currently active." }, + { WERR_DS_OPERATIONS_ERROR, "An operations error occurred." }, + { WERR_DS_PROTOCOL_ERROR, "A protocol error occurred." }, + { WERR_DS_TIMELIMIT_EXCEEDED, "The time limit for this request was exceeded." }, + { WERR_DS_SIZELIMIT_EXCEEDED, "The size limit for this request was exceeded." }, + { WERR_DS_ADMIN_LIMIT_EXCEEDED, "The administrative limit for this request was exceeded." }, + { WERR_DS_COMPARE_FALSE, "The compare response was false." }, + { WERR_DS_COMPARE_TRUE, "The compare response was true." }, + { WERR_DS_AUTH_METHOD_NOT_SUPPORTED, "The requested authentication method is not supported by the server." }, + { WERR_DS_STRONG_AUTH_REQUIRED, "A more secure authentication method is required for this server." }, + { WERR_DS_INAPPROPRIATE_AUTH, "Inappropriate authentication." }, + { WERR_DS_AUTH_UNKNOWN, "The authentication mechanism is unknown." }, + { WERR_DS_REFERRAL, "A referral was returned from the server." }, + { WERR_DS_UNAVAILABLE_CRIT_EXTENSION, "The server does not support the requested critical extension." }, + { WERR_DS_CONFIDENTIALITY_REQUIRED, "This request requires a secure connection." }, + { WERR_DS_INAPPROPRIATE_MATCHING, "Inappropriate matching." }, + { WERR_DS_CONSTRAINT_VIOLATION, "A constraint violation occurred." }, + { WERR_DS_NO_SUCH_OBJECT, "There is no such object on the server." }, + { WERR_DS_ALIAS_PROBLEM, "There is an alias problem." }, + { WERR_DS_INVALID_DN_SYNTAX, "An invalid dn syntax has been specified." }, + { WERR_DS_IS_LEAF, "The object is a leaf object." }, + { WERR_DS_ALIAS_DEREF_PROBLEM, "There is an alias dereferencing problem." }, + { WERR_DS_UNWILLING_TO_PERFORM, "The server is unwilling to process the request." }, + { WERR_DS_LOOP_DETECT, "A loop has been detected." }, + { WERR_DS_NAMING_VIOLATION, "There is a naming violation." }, + { WERR_DS_OBJECT_RESULTS_TOO_LARGE, "The result set is too large." }, + { WERR_DS_AFFECTS_MULTIPLE_DSAS, "The operation affects multiple DSAs." }, + { WERR_DS_SERVER_DOWN, "The server is not operational." }, + { WERR_DS_LOCAL_ERROR, "A local error has occurred." }, + { WERR_DS_ENCODING_ERROR, "An encoding error has occurred." }, + { WERR_DS_DECODING_ERROR, "A decoding error has occurred." }, + { WERR_DS_FILTER_UNKNOWN, "The search filter cannot be recognized." }, + { WERR_DS_PARAM_ERROR, "One or more parameters are illegal." }, + { WERR_DS_NOT_SUPPORTED, "The specified method is not supported." }, + { WERR_DS_NO_RESULTS_RETURNED, "No results were returned." }, + { WERR_DS_CONTROL_NOT_FOUND, "The specified control is not supported by the server." }, + { WERR_DS_CLIENT_LOOP, "A referral loop was detected by the client." }, + { WERR_DS_REFERRAL_LIMIT_EXCEEDED, "The preset referral limit was exceeded." }, + { WERR_DS_SORT_CONTROL_MISSING, "The search requires a SORT control." }, + { WERR_DS_OFFSET_RANGE_ERROR, "The search results exceed the offset range specified." }, + { WERR_DS_ROOT_MUST_BE_NC, "The root object must be the head of a naming context. The root object cannot have an instantiated parent." }, + { WERR_DS_ADD_REPLICA_INHIBITED, "The add replica operation cannot be performed. The naming context must be writable to create the replica." }, + { WERR_DS_ATT_NOT_DEF_IN_SCHEMA, "A reference to an attribute that is not defined in the schema occurred." }, + { WERR_DS_MAX_OBJ_SIZE_EXCEEDED, "The maximum size of an object has been exceeded." }, + { WERR_DS_OBJ_STRING_NAME_EXISTS, "An attempt was made to add an object to the directory with a name that is already in use." }, + { WERR_DS_NO_RDN_DEFINED_IN_SCHEMA, "An attempt was made to add an object of a class that does not have an RDN defined in the schema." }, + { WERR_DS_RDN_DOESNT_MATCH_SCHEMA, "An attempt was made to add an object using an RDN that is not the RDN defined in the schema." }, + { WERR_DS_NO_REQUESTED_ATTS_FOUND, "None of the requested attributes were found on the objects." }, + { WERR_DS_USER_BUFFER_TO_SMALL, "The user buffer is too small." }, + { WERR_DS_ATT_IS_NOT_ON_OBJ, "The attribute specified in the operation is not present on the object." }, + { WERR_DS_ILLEGAL_MOD_OPERATION, "Illegal modify operation. Some aspect of the modification is not permitted." }, + { WERR_DS_OBJ_TOO_LARGE, "The specified object is too large." }, + { WERR_DS_BAD_INSTANCE_TYPE, "The specified instance type is not valid." }, + { WERR_DS_MASTERDSA_REQUIRED, "The operation must be performed at a master DSA." }, + { WERR_DS_OBJECT_CLASS_REQUIRED, "The object class attribute must be specified." }, + { WERR_DS_MISSING_REQUIRED_ATT, "A required attribute is missing." }, + { WERR_DS_ATT_NOT_DEF_FOR_CLASS, "An attempt was made to modify an object to include an attribute that is not legal for its class." }, + { WERR_DS_ATT_ALREADY_EXISTS, "The specified attribute is already present on the object." }, + { WERR_DS_CANT_ADD_ATT_VALUES, "The specified attribute is not present, or has no values." }, + { WERR_DS_SINGLE_VALUE_CONSTRAINT, "Multiple values were specified for an attribute that can have only one value." }, + { WERR_DS_RANGE_CONSTRAINT, "A value for the attribute was not in the acceptable range of values." }, + { WERR_DS_ATT_VAL_ALREADY_EXISTS, "The specified value already exists." }, + { WERR_DS_CANT_REM_MISSING_ATT, "The attribute cannot be removed because it is not present on the object." }, + { WERR_DS_CANT_REM_MISSING_ATT_VAL, "The attribute value cannot be removed because it is not present on the object." }, + { WERR_DS_ROOT_CANT_BE_SUBREF, "The specified root object cannot be a subreference." }, + { WERR_DS_NO_CHAINING, "Chaining is not permitted." }, + { WERR_DS_NO_CHAINED_EVAL, "Chained evaluation is not permitted." }, + { WERR_DS_NO_PARENT_OBJECT, "The operation could not be performed because the object\'s parent is either uninstantiated or deleted." }, + { WERR_DS_PARENT_IS_AN_ALIAS, "Having a parent that is an alias is not permitted. Aliases are leaf objects." }, + { WERR_DS_CANT_MIX_MASTER_AND_REPS, "The object and parent must be of the same type, either both masters or both replicas." }, + { WERR_DS_CHILDREN_EXIST, "The operation cannot be performed because child objects exist. This operation can only be performed on a leaf object." }, + { WERR_DS_OBJ_NOT_FOUND, "Directory object not found." }, + { WERR_DS_ALIASED_OBJ_MISSING, "The aliased object is missing." }, + { WERR_DS_BAD_NAME_SYNTAX, "The object name has bad syntax." }, + { WERR_DS_ALIAS_POINTS_TO_ALIAS, "An alias is not permitted to refer to another alias." }, + { WERR_DS_CANT_DEREF_ALIAS, "The alias cannot be dereferenced." }, + { WERR_DS_OUT_OF_SCOPE, "The operation is out of scope." }, + { WERR_DS_OBJECT_BEING_REMOVED, "The operation cannot continue because the object is in the process of being removed." }, + { WERR_DS_CANT_DELETE_DSA_OBJ, "The DSA object cannot be deleted." }, + { WERR_DS_GENERIC_ERROR, "A directory service error has occurred." }, + { WERR_DS_DSA_MUST_BE_INT_MASTER, "The operation can only be performed on an internal master DSA object." }, + { WERR_DS_CLASS_NOT_DSA, "The object must be of class DSA." }, + { WERR_DS_INSUFF_ACCESS_RIGHTS, "Insufficient access rights to perform the operation." }, + { WERR_DS_ILLEGAL_SUPERIOR, "The object cannot be added because the parent is not on the list of possible superiors." }, + { WERR_DS_ATTRIBUTE_OWNED_BY_SAM, "Access to the attribute is not permitted because the attribute is owned by the SAM." }, + { WERR_DS_NAME_TOO_MANY_PARTS, "The name has too many parts." }, + { WERR_DS_NAME_TOO_LONG, "The name is too long." }, + { WERR_DS_NAME_VALUE_TOO_LONG, "The name value is too long." }, + { WERR_DS_NAME_UNPARSEABLE, "The directory service encountered an error parsing a name." }, + { WERR_DS_NAME_TYPE_UNKNOWN, "The directory service cannot get the attribute type for a name." }, + { WERR_DS_NOT_AN_OBJECT, "The name does not identify an object; the name identifies a phantom." }, + { WERR_DS_SEC_DESC_TOO_SHORT, "The security descriptor is too short." }, + { WERR_DS_SEC_DESC_INVALID, "The security descriptor is invalid." }, + { WERR_DS_NO_DELETED_NAME, "Failed to create name for deleted object." }, + { WERR_DS_SUBREF_MUST_HAVE_PARENT, "The parent of a new subreference must exist." }, + { WERR_DS_NCNAME_MUST_BE_NC, "The object must be a naming context." }, + { WERR_DS_CANT_ADD_SYSTEM_ONLY, "It is not permitted to add an attribute that is owned by the system." }, + { WERR_DS_CLASS_MUST_BE_CONCRETE, "The class of the object must be structural; you cannot instantiate an abstract class." }, + { WERR_DS_INVALID_DMD, "The schema object could not be found." }, + { WERR_DS_OBJ_GUID_EXISTS, "A local object with this GUID (dead or alive) already exists." }, + { WERR_DS_NOT_ON_BACKLINK, "The operation cannot be performed on a back link." }, + { WERR_DS_NO_CROSSREF_FOR_NC, "The cross-reference for the specified naming context could not be found." }, + { WERR_DS_SHUTTING_DOWN, "The operation could not be performed because the directory service is shutting down." }, + { WERR_DS_UNKNOWN_OPERATION, "The directory service request is invalid." }, + { WERR_DS_INVALID_ROLE_OWNER, "The role owner attribute could not be read." }, + { WERR_DS_COULDNT_CONTACT_FSMO, "The requested Flexible Single Master Operations (FSMO) operation failed. The current FSMO holder could not be contacted." }, + { WERR_DS_CROSS_NC_DN_RENAME, "Modification of a distinguished name across a naming context is not permitted." }, + { WERR_DS_CANT_MOD_SYSTEM_ONLY, "The attribute cannot be modified because it is owned by the system." }, + { WERR_DS_REPLICATOR_ONLY, "Only the replicator can perform this function." }, + { WERR_DS_OBJ_CLASS_NOT_DEFINED, "The specified class is not defined." }, + { WERR_DS_OBJ_CLASS_NOT_SUBCLASS, "The specified class is not a subclass." }, + { WERR_DS_NAME_REFERENCE_INVALID, "The name reference is invalid." }, + { WERR_DS_CROSS_REF_EXISTS, "A cross-reference already exists." }, + { WERR_DS_CANT_DEL_MASTER_CROSSREF, "It is not permitted to delete a master cross-reference." }, + { WERR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD, "Subtree notifications are only supported on naming context (NC) heads." }, + { WERR_DS_NOTIFY_FILTER_TOO_COMPLEX, "Notification filter is too complex." }, + { WERR_DS_DUP_RDN, "Schema update failed: Duplicate RDN." }, + { WERR_DS_DUP_OID, "Schema update failed: Duplicate OID." }, + { WERR_DS_DUP_MAPI_ID, "Schema update failed: Duplicate Message Application Programming Interface (MAPI) identifier." }, + { WERR_DS_DUP_SCHEMA_ID_GUID, "Schema update failed: Duplicate schema ID GUID." }, + { WERR_DS_DUP_LDAP_DISPLAY_NAME, "Schema update failed: Duplicate LDAP display name." }, + { WERR_DS_SEMANTIC_ATT_TEST, "Schema update failed: Range-Lower less than Range-Upper." }, + { WERR_DS_SYNTAX_MISMATCH, "Schema update failed: Syntax mismatch." }, + { WERR_DS_EXISTS_IN_MUST_HAVE, "Schema deletion failed: Attribute is used in the Must-Contain list." }, + { WERR_DS_EXISTS_IN_MAY_HAVE, "Schema deletion failed: Attribute is used in the May-Contain list." }, + { WERR_DS_NONEXISTENT_MAY_HAVE, "Schema update failed: Attribute in May-Contain list does not exist." }, + { WERR_DS_NONEXISTENT_MUST_HAVE, "Schema update failed: Attribute in the Must-Contain list does not exist." }, + { WERR_DS_AUX_CLS_TEST_FAIL, "Schema update failed: Class in the Aux Class list does not exist or is not an auxiliary class." }, + { WERR_DS_NONEXISTENT_POSS_SUP, "Schema update failed: Class in the Poss-Superiors list does not exist." }, + { WERR_DS_SUB_CLS_TEST_FAIL, "Schema update failed: Class in the subclass of the list does not exist or does not satisfy hierarchy rules." }, + { WERR_DS_BAD_RDN_ATT_ID_SYNTAX, "Schema update failed: Rdn-Att-Id has wrong syntax." }, + { WERR_DS_EXISTS_IN_AUX_CLS, "Schema deletion failed: Class is used as an auxiliary class." }, + { WERR_DS_EXISTS_IN_SUB_CLS, "Schema deletion failed: Class is used as a subclass." }, + { WERR_DS_EXISTS_IN_POSS_SUP, "Schema deletion failed: Class is used as a Poss-Superior." }, + { WERR_DS_RECALCSCHEMA_FAILED, "Schema update failed in recalculating validation cache." }, + { WERR_DS_TREE_DELETE_NOT_FINISHED, "The tree deletion is not finished. The request must be made again to continue deleting the tree." }, + { WERR_DS_CANT_DELETE, "The requested delete operation could not be performed." }, + { WERR_DS_ATT_SCHEMA_REQ_ID, "Cannot read the governs class identifier for the schema record." }, + { WERR_DS_BAD_ATT_SCHEMA_SYNTAX, "The attribute schema has bad syntax." }, + { WERR_DS_CANT_CACHE_ATT, "The attribute could not be cached." }, + { WERR_DS_CANT_CACHE_CLASS, "The class could not be cached." }, + { WERR_DS_CANT_REMOVE_ATT_CACHE, "The attribute could not be removed from the cache." }, + { WERR_DS_CANT_REMOVE_CLASS_CACHE, "The class could not be removed from the cache." }, + { WERR_DS_CANT_RETRIEVE_DN, "The distinguished name attribute could not be read." }, + { WERR_DS_MISSING_SUPREF, "No superior reference has been configured for the directory service. The directory service is, therefore, unable to issue referrals to objects outside this forest." }, + { WERR_DS_CANT_RETRIEVE_INSTANCE, "The instance type attribute could not be retrieved." }, + { WERR_DS_CODE_INCONSISTENCY, "An internal error has occurred." }, + { WERR_DS_DATABASE_ERROR, "A database error has occurred." }, + { WERR_DS_MISSING_EXPECTED_ATT, "An expected attribute is missing." }, + { WERR_DS_NCNAME_MISSING_CR_REF, "The specified naming context is missing a cross-reference." }, + { WERR_DS_SECURITY_CHECKING_ERROR, "A security checking error has occurred." }, + { WERR_DS_SCHEMA_NOT_LOADED, "The schema is not loaded." }, + { WERR_DS_SCHEMA_ALLOC_FAILED, "Schema allocation failed. Check if the machine is running low on memory." }, + { WERR_DS_ATT_SCHEMA_REQ_SYNTAX, "Failed to obtain the required syntax for the attribute schema." }, + { WERR_DS_GCVERIFY_ERROR, "The GC verification failed. The GC is not available or does not support the operation. Some part of the directory is currently not available." }, + { WERR_DS_DRA_SCHEMA_MISMATCH, "The replication operation failed because of a schema mismatch between the servers involved." }, + { WERR_DS_CANT_FIND_DSA_OBJ, "The DSA object could not be found." }, + { WERR_DS_CANT_FIND_EXPECTED_NC, "The naming context could not be found." }, + { WERR_DS_CANT_FIND_NC_IN_CACHE, "The naming context could not be found in the cache." }, + { WERR_DS_CANT_RETRIEVE_CHILD, "The child object could not be retrieved." }, + { WERR_DS_SECURITY_ILLEGAL_MODIFY, "The modification was not permitted for security reasons." }, + { WERR_DS_CANT_REPLACE_HIDDEN_REC, "The operation cannot replace the hidden record." }, + { WERR_DS_BAD_HIERARCHY_FILE, "The hierarchy file is invalid." }, + { WERR_DS_BUILD_HIERARCHY_TABLE_FAILED, "The attempt to build the hierarchy table failed." }, + { WERR_DS_CONFIG_PARAM_MISSING, "The directory configuration parameter is missing from the registry." }, + { WERR_DS_COUNTING_AB_INDICES_FAILED, "The attempt to count the address book indices failed." }, + { WERR_DS_HIERARCHY_TABLE_MALLOC_FAILED, "The allocation of the hierarchy table failed." }, + { WERR_DS_INTERNAL_FAILURE, "The directory service encountered an internal failure." }, + { WERR_DS_UNKNOWN_ERROR, "The directory service encountered an unknown failure." }, + { WERR_DS_ROOT_REQUIRES_CLASS_TOP, "A root object requires a class of \"top\"." }, + { WERR_DS_REFUSING_FSMO_ROLES, "This directory server is shutting down, and cannot take ownership of new floating single-master operation roles." }, + { WERR_DS_MISSING_FSMO_SETTINGS, "The directory service is missing mandatory configuration information and is unable to determine the ownership of floating single-master operation roles." }, + { WERR_DS_UNABLE_TO_SURRENDER_ROLES, "The directory service was unable to transfer ownership of one or more floating single-master operation roles to other servers." }, + { WERR_DS_DRA_GENERIC, "The replication operation failed." }, + { WERR_DS_DRA_INVALID_PARAMETER, "An invalid parameter was specified for this replication operation." }, + { WERR_DS_DRA_BUSY, "The directory service is too busy to complete the replication operation at this time." }, + { WERR_DS_DRA_BAD_DN, "The DN specified for this replication operation is invalid." }, + { WERR_DS_DRA_BAD_NC, "The naming context specified for this replication operation is invalid." }, + { WERR_DS_DRA_DN_EXISTS, "The DN specified for this replication operation already exists." }, + { WERR_DS_DRA_INTERNAL_ERROR, "The replication system encountered an internal error." }, + { WERR_DS_DRA_INCONSISTENT_DIT, "The replication operation encountered a database inconsistency." }, + { WERR_DS_DRA_CONNECTION_FAILED, "The server specified for this replication operation could not be contacted." }, + { WERR_DS_DRA_BAD_INSTANCE_TYPE, "The replication operation encountered an object with an invalid instance type." }, + { WERR_DS_DRA_OUT_OF_MEM, "The replication operation failed to allocate memory." }, + { WERR_DS_DRA_MAIL_PROBLEM, "The replication operation encountered an error with the mail system." }, + { WERR_DS_DRA_REF_ALREADY_EXISTS, "The replication reference information for the target server already exists." }, + { WERR_DS_DRA_REF_NOT_FOUND, "The replication reference information for the target server does not exist." }, + { WERR_DS_DRA_OBJ_IS_REP_SOURCE, "The naming context cannot be removed because it is replicated to another server." }, + { WERR_DS_DRA_DB_ERROR, "The replication operation encountered a database error." }, + { WERR_DS_DRA_NO_REPLICA, "The naming context is in the process of being removed or is not replicated from the specified server." }, + { WERR_DS_DRA_ACCESS_DENIED, "Replication access was denied." }, + { WERR_DS_DRA_NOT_SUPPORTED, "The requested operation is not supported by this version of the directory service." }, + { WERR_DS_DRA_RPC_CANCELLED, "The replication RPC was canceled." }, + { WERR_DS_DRA_SOURCE_DISABLED, "The source server is currently rejecting replication requests." }, + { WERR_DS_DRA_SINK_DISABLED, "The destination server is currently rejecting replication requests." }, + { WERR_DS_DRA_NAME_COLLISION, "The replication operation failed due to a collision of object names." }, + { WERR_DS_DRA_SOURCE_REINSTALLED, "The replication source has been reinstalled." }, + { WERR_DS_DRA_MISSING_PARENT, "The replication operation failed because a required parent object is missing." }, + { WERR_DS_DRA_PREEMPTED, "The replication operation was preempted." }, + { WERR_DS_DRA_ABANDON_SYNC, "The replication synchronization attempt was abandoned because of a lack of updates." }, + { WERR_DS_DRA_SHUTDOWN, "The replication operation was terminated because the system is shutting down." }, + { WERR_DS_DRA_INCOMPATIBLE_PARTIAL_SET, "A synchronization attempt failed because the destination DC is currently waiting to synchronize new partial attributes from the source. This condition is normal if a recent schema change modified the partial attribute set. The destination partial attribute set is not a subset of the source partial attribute set." }, + { WERR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA, "The replication synchronization attempt failed because a master replica attempted to sync from a partial replica." }, + { WERR_DS_DRA_EXTN_CONNECTION_FAILED, "The server specified for this replication operation was contacted, but that server was unable to contact an additional server needed to complete the operation." }, + { WERR_DS_INSTALL_SCHEMA_MISMATCH, "The version of the directory service schema of the source forest is not compatible with the version of the directory service on this computer." }, + { WERR_DS_DUP_LINK_ID, "Schema update failed: An attribute with the same link identifier already exists." }, + { WERR_DS_NAME_ERROR_RESOLVING, "Name translation: Generic processing error." }, + { WERR_DS_NAME_ERROR_NOT_FOUND, "Name translation: Could not find the name or insufficient right to see name." }, + { WERR_DS_NAME_ERROR_NOT_UNIQUE, "Name translation: Input name mapped to more than one output name." }, + { WERR_DS_NAME_ERROR_NO_MAPPING, "Name translation: The input name was found but not the associated output format." }, + { WERR_DS_NAME_ERROR_DOMAIN_ONLY, "Name translation: Unable to resolve completely, only the domain was found." }, + { WERR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING, "Name translation: Unable to perform purely syntactical mapping at the client without going out to the wire." }, + { WERR_DS_CONSTRUCTED_ATT_MOD, "Modification of a constructed attribute is not allowed." }, + { WERR_DS_WRONG_OM_OBJ_CLASS, "The OM-Object-Class specified is incorrect for an attribute with the specified syntax." }, + { WERR_DS_DRA_REPL_PENDING, "The replication request has been posted; waiting for a reply." }, + { WERR_DS_DS_REQUIRED, "The requested operation requires a directory service, and none was available." }, + { WERR_DS_INVALID_LDAP_DISPLAY_NAME, "The LDAP display name of the class or attribute contains non-ASCII characters." }, + { WERR_DS_NON_BASE_SEARCH, "The requested search operation is only supported for base searches." }, + { WERR_DS_CANT_RETRIEVE_ATTS, "The search failed to retrieve attributes from the database." }, + { WERR_DS_BACKLINK_WITHOUT_LINK, "The schema update operation tried to add a backward link attribute that has no corresponding forward link." }, + { WERR_DS_EPOCH_MISMATCH, "The source and destination of a cross-domain move do not agree on the object\'s epoch number. Either the source or the destination does not have the latest version of the object." }, + { WERR_DS_SRC_NAME_MISMATCH, "The source and destination of a cross-domain move do not agree on the object\'s current name. Either the source or the destination does not have the latest version of the object." }, + { WERR_DS_SRC_AND_DST_NC_IDENTICAL, "The source and destination for the cross-domain move operation are identical. The caller should use a local move operation instead of a cross-domain move operation." }, + { WERR_DS_DST_NC_MISMATCH, "The source and destination for a cross-domain move do not agree on the naming contexts in the forest. Either the source or the destination does not have the latest version of the Partitions container." }, + { WERR_DS_NOT_AUTHORITIVE_FOR_DST_NC, "The destination of a cross-domain move is not authoritative for the destination naming context." }, + { WERR_DS_SRC_GUID_MISMATCH, "The source and destination of a cross-domain move do not agree on the identity of the source object. Either the source or the destination does not have the latest version of the source object." }, + { WERR_DS_CANT_MOVE_DELETED_OBJECT, "The object being moved across domains is already known to be deleted by the destination server. The source server does not have the latest version of the source object." }, + { WERR_DS_PDC_OPERATION_IN_PROGRESS, "Another operation that requires exclusive access to the PDC FSMO is already in progress." }, + { WERR_DS_CROSS_DOMAIN_CLEANUP_REQD, "A cross-domain move operation failed because two versions of the moved object exist—one each in the source and destination domains. The destination object needs to be removed to restore the system to a consistent state." }, + { WERR_DS_ILLEGAL_XDOM_MOVE_OPERATION, "This object may not be moved across domain boundaries either because cross-domain moves for this class are not allowed, or the object has some special characteristics, for example, a trust account or a restricted relative identifier (RID), that prevent its move." }, + { WERR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS, "Cannot move objects with memberships across domain boundaries because, once moved, this violates the membership conditions of the account group. Remove the object from any account group memberships and retry." }, + { WERR_DS_NC_MUST_HAVE_NC_PARENT, "A naming context head must be the immediate child of another naming context head, not of an interior node." }, + { WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE, "The directory cannot validate the proposed naming context name because it does not hold a replica of the naming context above the proposed naming context. Ensure that the domain naming master role is held by a server that is configured as a GC server, and that the server is up-to-date with its replication partners. (Applies only to Windows 2000 domain naming masters.)" }, + { WERR_DS_DST_DOMAIN_NOT_NATIVE, "Destination domain must be in native mode." }, + { WERR_DS_MISSING_INFRASTRUCTURE_CONTAINER, "The operation cannot be performed because the server does not have an infrastructure container in the domain of interest." }, + { WERR_DS_CANT_MOVE_ACCOUNT_GROUP, "Cross-domain moves of nonempty account groups is not allowed." }, + { WERR_DS_CANT_MOVE_RESOURCE_GROUP, "Cross-domain moves of nonempty resource groups is not allowed." }, + { WERR_DS_INVALID_SEARCH_FLAG, "The search flags for the attribute are invalid. The ambiguous name resolution (ANR) bit is valid only on attributes of Unicode or Teletex strings." }, + { WERR_DS_NO_TREE_DELETE_ABOVE_NC, "Tree deletions starting at an object that has an NC head as a descendant are not allowed." }, + { WERR_DS_COULDNT_LOCK_TREE_FOR_DELETE, "The directory service failed to lock a tree in preparation for a tree deletion because the tree was in use." }, + { WERR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE, "The directory service failed to identify the list of objects to delete while attempting a tree deletion." }, + { WERR_DS_SAM_INIT_FAILURE, "SAM initialization failed because of the following error: %1. Error Status: 0x%2. Click OK to shut down the system and reboot into Directory Services Restore Mode. Check the event log for detailed information." }, + { WERR_DS_SENSITIVE_GROUP_VIOLATION, "Only an administrator can modify the membership list of an administrative group." }, + { WERR_DS_CANT_MOD_PRIMARYGROUPID, "Cannot change the primary group ID of a domain controller account." }, + { WERR_DS_ILLEGAL_BASE_SCHEMA_MOD, "An attempt was made to modify the base schema." }, + { WERR_DS_NONSAFE_SCHEMA_CHANGE, "Adding a new mandatory attribute to an existing class, deleting a mandatory attribute from an existing class, or adding an optional attribute to the special class Top that is not a backlink attribute (directly or through inheritance, for example, by adding or deleting an auxiliary class) is not allowed." }, + { WERR_DS_SCHEMA_UPDATE_DISALLOWED, "Schema update is not allowed on this DC because the DC is not the schema FSMO role owner." }, + { WERR_DS_CANT_CREATE_UNDER_SCHEMA, "An object of this class cannot be created under the schema container. You can only create Attribute-Schema and Class-Schema objects under the schema container." }, + { WERR_DS_INVALID_GROUP_TYPE, "The specified group type is invalid." }, + { WERR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN, "You cannot nest global groups in a mixed domain if the group is security-enabled." }, + { WERR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN, "You cannot nest local groups in a mixed domain if the group is security-enabled." }, + { WERR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER, "A global group cannot have a local group as a member." }, + { WERR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER, "A global group cannot have a universal group as a member." }, + { WERR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER, "A universal group cannot have a local group as a member." }, + { WERR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER, "A global group cannot have a cross-domain member." }, + { WERR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER, "A local group cannot have another cross domain local group as a member." }, + { WERR_DS_HAVE_PRIMARY_MEMBERS, "A group with primary members cannot change to a security-disabled group." }, + { WERR_DS_STRING_SD_CONVERSION_FAILED, "The schema cache load failed to convert the string default security descriptor (SD) on a class-schema object." }, + { WERR_DS_NAMING_MASTER_GC, "Only DSAs configured to be GC servers should be allowed to hold the domain naming master FSMO role. (Applies only to Windows 2000 servers.)" }, + { WERR_DS_DNS_LOOKUP_FAILURE, "The DSA operation is unable to proceed because of a DNS lookup failure." }, + { WERR_DS_COULDNT_UPDATE_SPNS, "While processing a change to the DNS host name for an object, the SPN values could not be kept in sync." }, + { WERR_DS_CANT_RETRIEVE_SD, "The Security Descriptor attribute could not be read." }, + { WERR_DS_KEY_NOT_UNIQUE, "The object requested was not found, but an object with that key was found." }, + { WERR_DS_WRONG_LINKED_ATT_SYNTAX, "The syntax of the linked attribute being added is incorrect. Forward links can only have syntax 2.5.5.1, 2.5.5.7, and 2.5.5.14, and backlinks can only have syntax 2.5.5.1." }, + { WERR_DS_SAM_NEED_BOOTKEY_PASSWORD, "SAM needs to get the boot password." }, + { WERR_DS_SAM_NEED_BOOTKEY_FLOPPY, "SAM needs to get the boot key from the floppy disk." }, + { WERR_DS_CANT_START, "Directory Service cannot start." }, + { WERR_DS_INIT_FAILURE, "Directory Services could not start." }, + { WERR_DS_NO_PKT_PRIVACY_ON_CONNECTION, "The connection between client and server requires packet privacy or better." }, + { WERR_DS_SOURCE_DOMAIN_IN_FOREST, "The source domain may not be in the same forest as the destination." }, + { WERR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST, "The destination domain must be in the forest." }, + { WERR_DS_DESTINATION_AUDITING_NOT_ENABLED, "The operation requires that destination domain auditing be enabled." }, + { WERR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN, "The operation could not locate a DC for the source domain." }, + { WERR_DS_SRC_OBJ_NOT_GROUP_OR_USER, "The source object must be a group or user." }, + { WERR_DS_SRC_SID_EXISTS_IN_FOREST, "The source object\'s SID already exists in the destination forest." }, + { WERR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH, "The source and destination object must be of the same type." }, + { WERR_SAM_INIT_FAILURE, "SAM initialization failed because of the following error: %1. Error Status: 0x%2. Click OK to shut down the system and reboot into Safe Mode. Check the event log for detailed information." }, + { WERR_DS_DRA_SCHEMA_INFO_SHIP, "Schema information could not be included in the replication request." }, + { WERR_DS_DRA_SCHEMA_CONFLICT, "The replication operation could not be completed due to a schema incompatibility." }, + { WERR_DS_DRA_EARLIER_SCHEMA_CONFLICT, "The replication operation could not be completed due to a previous schema incompatibility." }, + { WERR_DS_DRA_OBJ_NC_MISMATCH, "The replication update could not be applied because either the source or the destination has not yet received information regarding a recent cross-domain move operation." }, + { WERR_DS_NC_STILL_HAS_DSAS, "The requested domain could not be deleted because there exist domain controllers that still host this domain." }, + { WERR_DS_GC_REQUIRED, "The requested operation can be performed only on a GC server." }, + { WERR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY, "A local group can only be a member of other local groups in the same domain." }, + { WERR_DS_NO_FPO_IN_UNIVERSAL_GROUPS, "Foreign security principals cannot be members of universal groups." }, + { WERR_DS_CANT_ADD_TO_GC, "The attribute is not allowed to be replicated to the GC because of security reasons." }, + { WERR_DS_NO_CHECKPOINT_WITH_PDC, "The checkpoint with the PDC could not be taken because too many modifications are currently being processed." }, + { WERR_DS_SOURCE_AUDITING_NOT_ENABLED, "The operation requires that source domain auditing be enabled." }, + { WERR_DS_CANT_CREATE_IN_NONDOMAIN_NC, "Security principal objects can only be created inside domain naming contexts." }, + { WERR_DS_INVALID_NAME_FOR_SPN, "An SPN could not be constructed because the provided host name is not in the necessary format." }, + { WERR_DS_FILTER_USES_CONTRUCTED_ATTRS, "A filter was passed that uses constructed attributes." }, + { WERR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED, "Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased." }, + { WERR_DS_MUST_BE_RUN_ON_DST_DC, "For security reasons, the operation must be run on the destination DC." }, + { WERR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER, "For security reasons, the source DC must be Windows NT 4.0 SP4 and later." }, + { WERR_DS_CANT_TREE_DELETE_CRITICAL_OBJ, "Critical directory service system objects cannot be deleted during tree deletion operations. The tree deletion may have been partially performed." }, + { WERR_DS_INIT_FAILURE_CONSOLE, "Directory Services could not start because of the following error: %1. Error Status: 0x%2. Click OK to shut down the system. You can use the Recovery Console to further diagnose the system." }, + { WERR_DS_SAM_INIT_FAILURE_CONSOLE, "SAM initialization failed because of the following error: %1. Error Status: 0x%2. Click OK to shut down the system. You can use the Recovery Console to further diagnose the system." }, + { WERR_DS_FOREST_VERSION_TOO_HIGH, "The version of the operating system installed is incompatible with the current forest functional level. You must upgrade to a new version of the operating system before this server can become a domain controller in this forest." }, + { WERR_DS_DOMAIN_VERSION_TOO_HIGH, "The version of the operating system installed is incompatible with the current domain functional level. You must upgrade to a new version of the operating system before this server can become a domain controller in this domain." }, + { WERR_DS_FOREST_VERSION_TOO_LOW, "The version of the operating system installed on this server no longer supports the current forest functional level. You must raise the forest functional level before this server can become a domain controller in this forest." }, + { WERR_DS_DOMAIN_VERSION_TOO_LOW, "The version of the operating system installed on this server no longer supports the current domain functional level. You must raise the domain functional level before this server can become a domain controller in this domain." }, + { WERR_DS_INCOMPATIBLE_VERSION, "The version of the operating system installed on this server is incompatible with the functional level of the domain or forest." }, + { WERR_DS_LOW_DSA_VERSION, "The functional level of the domain (or forest) cannot be raised to the requested value because one or more domain controllers in the domain (or forest) are at a lower, incompatible functional level." }, + { WERR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN, "The forest functional level cannot be raised to the requested value because one or more domains are still in mixed-domain mode. All domains in the forest must be in native mode for you to raise the forest functional level." }, + { WERR_DS_NOT_SUPPORTED_SORT_ORDER, "The sort order requested is not supported." }, + { WERR_DS_NAME_NOT_UNIQUE, "The requested name already exists as a unique identifier." }, + { WERR_DS_MACHINE_ACCOUNT_CREATED_PRENT4, "The machine account was created before Windows NT 4.0. The account needs to be re-created." }, + { WERR_DS_OUT_OF_VERSION_STORE, "The database is out of version store." }, + { WERR_DS_INCOMPATIBLE_CONTROLS_USED, "Unable to continue operation because multiple conflicting controls were used." }, + { WERR_DS_NO_REF_DOMAIN, "Unable to find a valid security descriptor reference domain for this partition." }, + { WERR_DS_RESERVED_LINK_ID, "Schema update failed: The link identifier is reserved." }, + { WERR_DS_LINK_ID_NOT_AVAILABLE, "Schema update failed: There are no link identifiers available." }, + { WERR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER, "An account group cannot have a universal group as a member." }, + { WERR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE, "Rename or move operations on naming context heads or read-only objects are not allowed." }, + { WERR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC, "Move operations on objects in the schema naming context are not allowed." }, + { WERR_DS_MODIFYDN_DISALLOWED_BY_FLAG, "A system flag has been set on the object that does not allow the object to be moved or renamed." }, + { WERR_DS_MODIFYDN_WRONG_GRANDPARENT, "This object is not allowed to change its grandparent container. Moves are not forbidden on this object, but are restricted to sibling containers." }, + { WERR_DS_NAME_ERROR_TRUST_REFERRAL, "Unable to resolve completely; a referral to another forest was generated." }, + { WERR_NOT_SUPPORTED_ON_STANDARD_SERVER, "The requested action is not supported on a standard server." }, + { WERR_DS_CANT_ACCESS_REMOTE_PART_OF_AD, "Could not access a partition of the directory service located on a remote server. Make sure at least one server is running for the partition in question." }, + { WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2, "The directory cannot validate the proposed naming context (or partition) name because it does not hold a replica, nor can it contact a replica of the naming context above the proposed naming context. Ensure that the parent naming context is properly registered in the DNS, and at least one replica of this naming context is reachable by the domain naming master." }, + { WERR_DS_THREAD_LIMIT_EXCEEDED, "The thread limit for this request was exceeded." }, + { WERR_DS_NOT_CLOSEST, "The GC server is not in the closest site." }, + { WERR_DS_SINGLE_USER_MODE_FAILED, "The directory service failed to enter single-user mode." }, + { WERR_DS_NTDSCRIPT_SYNTAX_ERROR, "The directory service cannot parse the script because of a syntax error." }, + { WERR_DS_NTDSCRIPT_PROCESS_ERROR, "The directory service cannot process the script because of an error." }, + { WERR_DS_DIFFERENT_REPL_EPOCHS, "The directory service cannot perform the requested operation because the servers involved are of different replication epochs (which is usually related to a domain rename that is in progress)." }, + { WERR_DS_DRS_EXTENSIONS_CHANGED, "The directory service binding must be renegotiated due to a change in the server extensions information." }, + { WERR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR, "The operation is not allowed on a disabled cross-reference." }, + { WERR_DS_NO_MSDS_INTID, "Schema update failed: No values for msDS-IntId are available." }, + { WERR_DS_DUP_MSDS_INTID, "Schema update failed: Duplicate msDS-IntId. Retry the operation." }, + { WERR_DS_EXISTS_IN_RDNATTID, "Schema deletion failed: Attribute is used in rDNAttID." }, + { WERR_DS_AUTHORIZATION_FAILED, "The directory service failed to authorize the request." }, + { WERR_DS_INVALID_SCRIPT, "The directory service cannot process the script because it is invalid." }, + { WERR_DS_REMOTE_CROSSREF_OP_FAILED, "The remote create cross-reference operation failed on the domain naming master FSMO. The operation\'s error is in the extended data." }, + { WERR_DS_CROSS_REF_BUSY, "A cross-reference is in use locally with the same name." }, + { WERR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN, "The directory service cannot derive an SPN with which to mutually authenticate the target server because the server\'s domain has been deleted from the forest." }, + { WERR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC, "Writable NCs prevent this DC from demoting." }, + { WERR_DS_DUPLICATE_ID_FOUND, "The requested object has a nonunique identifier and cannot be retrieved." }, + { WERR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT, "Insufficient attributes were given to create an object. This object may not exist because it may have been deleted and the garbage already collected." }, + { WERR_DS_GROUP_CONVERSION_ERROR, "The group cannot be converted due to attribute restrictions on the requested group type." }, + { WERR_DS_CANT_MOVE_APP_BASIC_GROUP, "Cross-domain moves of nonempty basic application groups is not allowed." }, + { WERR_DS_CANT_MOVE_APP_QUERY_GROUP, "Cross-domain moves of nonempty query-based application groups is not allowed." }, + { WERR_DS_ROLE_NOT_VERIFIED, "The FSMO role ownership could not be verified because its directory partition did not replicate successfully with at least one replication partner." }, + { WERR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL, "The target container for a redirection of a well-known object container cannot already be a special container." }, + { WERR_DS_DOMAIN_RENAME_IN_PROGRESS, "The directory service cannot perform the requested operation because a domain rename operation is in progress." }, + { WERR_DS_EXISTING_AD_CHILD_NC, "The directory service detected a child partition below the requested partition name. The partition hierarchy must be created in a top down method." }, + { WERR_DS_REPL_LIFETIME_EXCEEDED, "The directory service cannot replicate with this server because the time since the last replication with this server has exceeded the tombstone lifetime." }, + { WERR_DS_DISALLOWED_IN_SYSTEM_CONTAINER, "The requested operation is not allowed on an object under the system container." }, + { WERR_DS_LDAP_SEND_QUEUE_FULL, "The LDAP server\'s network send queue has filled up because the client is not processing the results of its requests fast enough. No more requests will be processed until the client catches up. If the client does not catch up then it will be disconnected." }, + { WERR_DS_DRA_OUT_SCHEDULE_WINDOW, "The scheduled replication did not take place because the system was too busy to execute the request within the schedule window. The replication queue is overloaded. Consider reducing the number of partners or decreasing the scheduled replication frequency." }, + { WERR_DS_POLICY_NOT_KNOWN, "At this time, it cannot be determined if the branch replication policy is available on the hub domain controller. Retry at a later time to account for replication latencies." }, + { WERR_NO_SITE_SETTINGS_OBJECT, "The site settings object for the specified site does not exist." }, + { WERR_NO_SECRETS, "The local account store does not contain secret material for the specified account." }, + { WERR_NO_WRITABLE_DC_FOUND, "Could not find a writable domain controller in the domain." }, + { WERR_DS_NO_SERVER_OBJECT, "The server object for the domain controller does not exist." }, + { WERR_DS_NO_NTDSA_OBJECT, "The NTDS Settings object for the domain controller does not exist." }, + { WERR_DS_NON_ASQ_SEARCH, "The requested search operation is not supported for attribute scoped query (ASQ) searches." }, + { WERR_DS_AUDIT_FAILURE, "A required audit event could not be generated for the operation." }, + { WERR_DS_INVALID_SEARCH_FLAG_SUBTREE, "The search flags for the attribute are invalid. The subtree index bit is valid only on single-valued attributes." }, + { WERR_DS_INVALID_SEARCH_FLAG_TUPLE, "The search flags for the attribute are invalid. The tuple index bit is valid only on attributes of Unicode strings." }, + { WERR_IPSEC_QM_POLICY_EXISTS, "The specified quick mode policy already exists." }, + { WERR_IPSEC_QM_POLICY_NOT_FOUND, "The specified quick mode policy was not found." }, + { WERR_IPSEC_QM_POLICY_IN_USE, "The specified quick mode policy is being used." }, + { WERR_IPSEC_MM_POLICY_EXISTS, "The specified main mode policy already exists." }, + { WERR_IPSEC_MM_POLICY_NOT_FOUND, "The specified main mode policy was not found." }, + { WERR_IPSEC_MM_POLICY_IN_USE, "The specified main mode policy is being used." }, + { WERR_IPSEC_MM_FILTER_EXISTS, "The specified main mode filter already exists." }, + { WERR_IPSEC_MM_FILTER_NOT_FOUND, "The specified main mode filter was not found." }, + { WERR_IPSEC_TRANSPORT_FILTER_EXISTS, "The specified transport mode filter already exists." }, + { WERR_IPSEC_TRANSPORT_FILTER_NOT_FOUND, "The specified transport mode filter does not exist." }, + { WERR_IPSEC_MM_AUTH_EXISTS, "The specified main mode authentication list exists." }, + { WERR_IPSEC_MM_AUTH_NOT_FOUND, "The specified main mode authentication list was not found." }, + { WERR_IPSEC_MM_AUTH_IN_USE, "The specified main mode authentication list is being used." }, + { WERR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND, "The specified default main mode policy was not found." }, + { WERR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND, "The specified default main mode authentication list was not found." }, + { WERR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND, "The specified default quick mode policy was not found." }, + { WERR_IPSEC_TUNNEL_FILTER_EXISTS, "The specified tunnel mode filter exists." }, + { WERR_IPSEC_TUNNEL_FILTER_NOT_FOUND, "The specified tunnel mode filter was not found." }, + { WERR_IPSEC_MM_FILTER_PENDING_DELETION, "The main mode filter is pending deletion." }, + { WERR_IPSEC_TRANSPORT_FILTER_ENDING_DELETION, "The transport filter is pending deletion." }, + { WERR_IPSEC_TUNNEL_FILTER_PENDING_DELETION, "The tunnel filter is pending deletion." }, + { WERR_IPSEC_MM_POLICY_PENDING_ELETION, "The main mode policy is pending deletion." }, + { WERR_IPSEC_MM_AUTH_PENDING_DELETION, "The main mode authentication bundle is pending deletion." }, + { WERR_IPSEC_QM_POLICY_PENDING_DELETION, "The quick mode policy is pending deletion." }, + { WERR_IPSEC_IKE_NEG_STATUS_BEGIN, "ERROR_IPSEC_IKE_NEG_STATUS_BEGIN" }, + { WERR_IPSEC_IKE_AUTH_FAIL, "The IKE authentication credentials are unacceptable." }, + { WERR_IPSEC_IKE_ATTRIB_FAIL, "The IKE security attributes are unacceptable." }, + { WERR_IPSEC_IKE_NEGOTIATION_PENDING, "The IKE negotiation is in progress." }, + { WERR_IPSEC_IKE_GENERAL_PROCESSING_ERROR, "General processing error." }, + { WERR_IPSEC_IKE_TIMED_OUT, "Negotiation timed out." }, + { WERR_IPSEC_IKE_NO_CERT, "The IKE failed to find a valid machine certificate. Contact your network security administrator about installing a valid certificate in the appropriate certificate store." }, + { WERR_IPSEC_IKE_SA_DELETED, "The IKE security association (SA) was deleted by a peer before it was completely established." }, + { WERR_IPSEC_IKE_SA_REAPED, "The IKE SA was deleted before it was completely established." }, + { WERR_IPSEC_IKE_MM_ACQUIRE_DROP, "The negotiation request sat in the queue too long." }, + { WERR_IPSEC_IKE_QM_ACQUIRE_DROP, "The negotiation request sat in the queue too long." }, + { WERR_IPSEC_IKE_QUEUE_DROP_MM, "The negotiation request sat in the queue too long." }, + { WERR_IPSEC_IKE_QUEUE_DROP_NO_MM, "The negotiation request sat in the queue too long." }, + { WERR_IPSEC_IKE_DROP_NO_RESPONSE, "There was no response from a peer." }, + { WERR_IPSEC_IKE_MM_DELAY_DROP, "The negotiation took too long." }, + { WERR_IPSEC_IKE_QM_DELAY_DROP, "The negotiation took too long." }, + { WERR_IPSEC_IKE_ERROR, "An unknown error occurred." }, + { WERR_IPSEC_IKE_CRL_FAILED, "The certificate revocation check failed." }, + { WERR_IPSEC_IKE_INVALID_KEY_USAGE, "Invalid certificate key usage." }, + { WERR_IPSEC_IKE_INVALID_CERT_TYPE, "Invalid certificate type." }, + { WERR_IPSEC_IKE_NO_PRIVATE_KEY, "The IKE negotiation failed because the machine certificate used does not have a private key. IPsec certificates require a private key. Contact your network security administrator about a certificate that has a private key." }, + { WERR_IPSEC_IKE_DH_FAIL, "There was a failure in the Diffie-Hellman computation." }, + { WERR_IPSEC_IKE_INVALID_HEADER, "Invalid header." }, + { WERR_IPSEC_IKE_NO_POLICY, "No policy configured." }, + { WERR_IPSEC_IKE_INVALID_SIGNATURE, "Failed to verify signature." }, + { WERR_IPSEC_IKE_KERBEROS_ERROR, "Failed to authenticate using Kerberos." }, + { WERR_IPSEC_IKE_NO_PUBLIC_KEY, "The peer\'s certificate did not have a public key." }, + { WERR_IPSEC_IKE_PROCESS_ERR, "Error processing the error payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_SA, "Error processing the SA payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_PROP, "Error processing the proposal payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_TRANS, "Error processing the transform payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_KE, "Error processing the key exchange payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_ID, "Error processing the ID payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_CERT, "Error processing the certification payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_CERT_REQ, "Error processing the certificate request payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_HASH, "Error processing the hash payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_SIG, "Error processing the signature payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_NONCE, "Error processing the nonce payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_NOTIFY, "Error processing the notify payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_DELETE, "Error processing the delete payload." }, + { WERR_IPSEC_IKE_PROCESS_ERR_VENDOR, "Error processing the VendorId payload." }, + { WERR_IPSEC_IKE_INVALID_PAYLOAD, "Invalid payload received." }, + { WERR_IPSEC_IKE_LOAD_SOFT_SA, "Soft SA loaded." }, + { WERR_IPSEC_IKE_SOFT_SA_TORN_DOWN, "Soft SA torn down." }, + { WERR_IPSEC_IKE_INVALID_COOKIE, "Invalid cookie received." }, + { WERR_IPSEC_IKE_NO_PEER_CERT, "Peer failed to send valid machine certificate." }, + { WERR_IPSEC_IKE_PEER_CRL_FAILED, "Certification revocation check of peer\'s certificate failed." }, + { WERR_IPSEC_IKE_POLICY_CHANGE, "New policy invalidated SAs formed with the old policy." }, + { WERR_IPSEC_IKE_NO_MM_POLICY, "There is no available main mode IKE policy." }, + { WERR_IPSEC_IKE_NOTCBPRIV, "Failed to enabled trusted computer base (TCB) privilege." }, + { WERR_IPSEC_IKE_SECLOADFAIL, "Failed to load SECURITY.DLL." }, + { WERR_IPSEC_IKE_FAILSSPINIT, "Failed to obtain the security function table dispatch address from the SSPI." }, + { WERR_IPSEC_IKE_FAILQUERYSSP, "Failed to query the Kerberos package to obtain the max token size." }, + { WERR_IPSEC_IKE_SRVACQFAIL, "Failed to obtain the Kerberos server credentials for the Internet Security Association and Key Management Protocol (ISAKMP)/ERROR_IPSEC_IKE service. Kerberos authentication will not function. The most likely reason for this is lack of domain membership. This is normal if your computer is a member of a workgroup." }, + { WERR_IPSEC_IKE_SRVQUERYCRED, "Failed to determine the SSPI principal name for ISAKMP/ERROR_IPSEC_IKE service (QueryCredentialsAttributes)." }, + { WERR_IPSEC_IKE_GETSPIFAIL, "Failed to obtain a new service provider interface (SPI) for the inbound SA from the IPsec driver. The most common cause for this is that the driver does not have the correct filter. Check your policy to verify the filters." }, + { WERR_IPSEC_IKE_INVALID_FILTER, "Given filter is invalid" }, + { WERR_IPSEC_IKE_OUT_OF_MEMORY, "Memory allocation failed." }, + { WERR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED, "Failed to add an SA to the IPSec driver. The most common cause for this is if the IKE negotiation took too long to complete. If the problem persists, reduce the load on the faulting machine." }, + { WERR_IPSEC_IKE_INVALID_POLICY, "Invalid policy." }, + { WERR_IPSEC_IKE_UNKNOWN_DOI, "Invalid digital object identifier (DOI)." }, + { WERR_IPSEC_IKE_INVALID_SITUATION, "Invalid situation." }, + { WERR_IPSEC_IKE_DH_FAILURE, "Diffie-Hellman failure." }, + { WERR_IPSEC_IKE_INVALID_GROUP, "Invalid Diffie-Hellman group." }, + { WERR_IPSEC_IKE_ENCRYPT, "Error encrypting payload." }, + { WERR_IPSEC_IKE_DECRYPT, "Error decrypting payload." }, + { WERR_IPSEC_IKE_POLICY_MATCH, "Policy match error." }, + { WERR_IPSEC_IKE_UNSUPPORTED_ID, "Unsupported ID." }, + { WERR_IPSEC_IKE_INVALID_HASH, "Hash verification failed." }, + { WERR_IPSEC_IKE_INVALID_HASH_ALG, "Invalid hash algorithm." }, + { WERR_IPSEC_IKE_INVALID_HASH_SIZE, "Invalid hash size." }, + { WERR_IPSEC_IKE_INVALID_ENCRYPT_ALG, "Invalid encryption algorithm." }, + { WERR_IPSEC_IKE_INVALID_AUTH_ALG, "Invalid authentication algorithm." }, + { WERR_IPSEC_IKE_INVALID_SIG, "Invalid certificate signature." }, + { WERR_IPSEC_IKE_LOAD_FAILED, "Load failed." }, + { WERR_IPSEC_IKE_RPC_DELETE, "Deleted by using an RPC call." }, + { WERR_IPSEC_IKE_BENIGN_REINIT, "A temporary state was created to perform reinitialization. This is not a real failure." }, + { WERR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY, "The lifetime value received in the Responder Lifetime Notify is below the Windows 2000 configured minimum value. Fix the policy on the peer machine." }, + { WERR_IPSEC_IKE_INVALID_CERT_KEYLEN, "Key length in the certificate is too small for configured security requirements." }, + { WERR_IPSEC_IKE_MM_LIMIT, "Maximum number of established MM SAs to peer exceeded." }, + { WERR_IPSEC_IKE_NEGOTIATION_DISABLED, "The IKE received a policy that disables negotiation." }, + { WERR_IPSEC_IKE_QM_LIMIT, "Reached maximum quick mode limit for the main mode. New main mode will be started." }, + { WERR_IPSEC_IKE_MM_EXPIRED, "Main mode SA lifetime expired or the peer sent a main mode delete." }, + { WERR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID, "Main mode SA assumed to be invalid because peer stopped responding." }, + { WERR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH, "Certificate does not chain to a trusted root in IPsec policy." }, + { WERR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID, "Received unexpected message ID." }, + { WERR_IPSEC_IKE_INVALID_UMATTS, "Received invalid AuthIP user mode attributes." }, + { WERR_IPSEC_IKE_DOS_COOKIE_SENT, "Sent DOS cookie notify to initiator." }, + { WERR_IPSEC_IKE_SHUTTING_DOWN, "The IKE service is shutting down." }, + { WERR_IPSEC_IKE_CGA_AUTH_FAILED, "Could not verify the binding between the color graphics adapter (CGA) address and the certificate." }, + { WERR_IPSEC_IKE_PROCESS_ERR_NATOA, "Error processing the NatOA payload." }, + { WERR_IPSEC_IKE_INVALID_MM_FOR_QM, "The parameters of the main mode are invalid for this quick mode." }, + { WERR_IPSEC_IKE_QM_EXPIRED, "The quick mode SA was expired by the IPsec driver." }, + { WERR_IPSEC_IKE_TOO_MANY_FILTERS, "Too many dynamically added IKEEXT filters were detected." }, + { WERR_IPSEC_IKE_NEG_STATUS_END, "ERROR_IPSEC_IKE_NEG_STATUS_END" }, + { WERR_SXS_SECTION_NOT_FOUND, "The requested section was not present in the activation context." }, + { WERR_SXS_CANT_GEN_ACTCTX, "The application has failed to start because its side-by-side configuration is incorrect. See the application event log for more detail." }, + { WERR_SXS_INVALID_ACTCTXDATA_FORMAT, "The application binding data format is invalid." }, + { WERR_SXS_ASSEMBLY_NOT_FOUND, "The referenced assembly is not installed on your system." }, + { WERR_SXS_MANIFEST_FORMAT_ERROR, "The manifest file does not begin with the required tag and format information." }, + { WERR_SXS_MANIFEST_PARSE_ERROR, "The manifest file contains one or more syntax errors." }, + { WERR_SXS_ACTIVATION_CONTEXT_DISABLED, "The application attempted to activate a disabled activation context." }, + { WERR_SXS_KEY_NOT_FOUND, "The requested lookup key was not found in any active activation context." }, + { WERR_SXS_VERSION_CONFLICT, "A component version required by the application conflicts with another active component version." }, + { WERR_SXS_WRONG_SECTION_TYPE, "The type requested activation context section does not match the query API used." }, + { WERR_SXS_THREAD_QUERIES_DISABLED, "Lack of system resources has required isolated activation to be disabled for the current thread of execution." }, + { WERR_SXS_PROCESS_DEFAULT_ALREADY_SET, "An attempt to set the process default activation context failed because the process default activation context was already set." }, + { WERR_SXS_UNKNOWN_ENCODING_GROUP, "The encoding group identifier specified is not recognized." }, + { WERR_SXS_UNKNOWN_ENCODING, "The encoding requested is not recognized." }, + { WERR_SXS_INVALID_XML_NAMESPACE_URI, "The manifest contains a reference to an invalid URI." }, + { WERR_SXS_ROOT_MANIFEST_DEPENDENCY_OT_INSTALLED, "The application manifest contains a reference to a dependent assembly that is not installed." }, + { WERR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED, "The manifest for an assembly used by the application has a reference to a dependent assembly that is not installed." }, + { WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE, "The manifest contains an attribute for the assembly identity that is not valid." }, + { WERR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE, "The manifest is missing the required default namespace specification on the assembly element." }, + { WERR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE, "The manifest has a default namespace specified on the assembly element but its value is not urn:schemas-microsoft-com:asm.v1\".\"" }, + { WERR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT, "The private manifest probed has crossed the reparse-point-associated path." }, + { WERR_SXS_DUPLICATE_DLL_NAME, "Two or more components referenced directly or indirectly by the application manifest have files by the same name." }, + { WERR_SXS_DUPLICATE_WINDOWCLASS_NAME, "Two or more components referenced directly or indirectly by the application manifest have window classes with the same name." }, + { WERR_SXS_DUPLICATE_CLSID, "Two or more components referenced directly or indirectly by the application manifest have the same COM server CLSIDs." }, + { WERR_SXS_DUPLICATE_IID, "Two or more components referenced directly or indirectly by the application manifest have proxies for the same COM interface IIDs." }, + { WERR_SXS_DUPLICATE_TLBID, "Two or more components referenced directly or indirectly by the application manifest have the same COM type library TLBIDs." }, + { WERR_SXS_DUPLICATE_PROGID, "Two or more components referenced directly or indirectly by the application manifest have the same COM ProgIDs." }, + { WERR_SXS_DUPLICATE_ASSEMBLY_NAME, "Two or more components referenced directly or indirectly by the application manifest are different versions of the same component, which is not permitted." }, + { WERR_SXS_FILE_HASH_MISMATCH, "A component\'s file does not match the verification information present in the component manifest." }, + { WERR_SXS_POLICY_PARSE_ERROR, "The policy manifest contains one or more syntax errors." }, + { WERR_SXS_XML_E_MISSINGQUOTE, "Manifest Parse Error: A string literal was expected, but no opening quotation mark was found." }, + { WERR_SXS_XML_E_COMMENTSYNTAX, "Manifest Parse Error: Incorrect syntax was used in a comment." }, + { WERR_SXS_XML_E_BADSTARTNAMECHAR, "Manifest Parse Error: A name started with an invalid character." }, + { WERR_SXS_XML_E_BADNAMECHAR, "Manifest Parse Error: A name contained an invalid character." }, + { WERR_SXS_XML_E_BADCHARINSTRING, "Manifest Parse Error: A string literal contained an invalid character." }, + { WERR_SXS_XML_E_XMLDECLSYNTAX, "Manifest Parse Error: Invalid syntax for an XML declaration." }, + { WERR_SXS_XML_E_BADCHARDATA, "Manifest Parse Error: An Invalid character was found in text content." }, + { WERR_SXS_XML_E_MISSINGWHITESPACE, "Manifest Parse Error: Required white space was missing." }, + { WERR_SXS_XML_E_EXPECTINGTAGEND, "Manifest Parse Error: The angle bracket (>) character was expected." }, + { WERR_SXS_XML_E_MISSINGSEMICOLON, "Manifest Parse Error: A semicolon (;) was expected." }, + { WERR_SXS_XML_E_UNBALANCEDPAREN, "Manifest Parse Error: Unbalanced parentheses." }, + { WERR_SXS_XML_E_INTERNALERROR, "Manifest Parse Error: Internal error." }, + { WERR_SXS_XML_E_UNEXPECTED_WHITESPACE, "Manifest Parse Error: Whitespace is not allowed at this location." }, + { WERR_SXS_XML_E_INCOMPLETE_ENCODING, "Manifest Parse Error: End of file reached in invalid state for current encoding." }, + { WERR_SXS_XML_E_MISSING_PAREN, "Manifest Parse Error: Missing parenthesis." }, + { WERR_SXS_XML_E_EXPECTINGCLOSEQUOTE, "Manifest Parse Error: A single (\') or double (\") quotation mark is missing." }, + { WERR_SXS_XML_E_MULTIPLE_COLONS, "Manifest Parse Error: Multiple colons are not allowed in a name." }, + { WERR_SXS_XML_E_INVALID_DECIMAL, "Manifest Parse Error: Invalid character for decimal digit." }, + { WERR_SXS_XML_E_INVALID_HEXIDECIMAL, "Manifest Parse Error: Invalid character for hexadecimal digit." }, + { WERR_SXS_XML_E_INVALID_UNICODE, "Manifest Parse Error: Invalid Unicode character value for this platform." }, + { WERR_SXS_XML_E_WHITESPACEORQUESTIONMARK, "Manifest Parse Error: Expecting whitespace or question mark (?)." }, + { WERR_SXS_XML_E_UNEXPECTEDENDTAG, "Manifest Parse Error: End tag was not expected at this location." }, + { WERR_SXS_XML_E_UNCLOSEDTAG, "Manifest Parse Error: The following tags were not closed: %1." }, + { WERR_SXS_XML_E_DUPLICATEATTRIBUTE, "Manifest Parse Error: Duplicate attribute." }, + { WERR_SXS_XML_E_MULTIPLEROOTS, "Manifest Parse Error: Only one top-level element is allowed in an XML document." }, + { WERR_SXS_XML_E_INVALIDATROOTLEVEL, "Manifest Parse Error: Invalid at the top level of the document." }, + { WERR_SXS_XML_E_BADXMLDECL, "Manifest Parse Error: Invalid XML declaration." }, + { WERR_SXS_XML_E_MISSINGROOT, "Manifest Parse Error: XML document must have a top-level element." }, + { WERR_SXS_XML_E_UNEXPECTEDEOF, "Manifest Parse Error: Unexpected end of file." }, + { WERR_SXS_XML_E_BADPEREFINSUBSET, "Manifest Parse Error: Parameter entities cannot be used inside markup declarations in an internal subset." }, + { WERR_SXS_XML_E_UNCLOSEDSTARTTAG, "Manifest Parse Error: Element was not closed." }, + { WERR_SXS_XML_E_UNCLOSEDENDTAG, "Manifest Parse Error: End element was missing the angle bracket (>) character." }, + { WERR_SXS_XML_E_UNCLOSEDSTRING, "Manifest Parse Error: A string literal was not closed." }, + { WERR_SXS_XML_E_UNCLOSEDCOMMENT, "Manifest Parse Error: A comment was not closed." }, + { WERR_SXS_XML_E_UNCLOSEDDECL, "Manifest Parse Error: A declaration was not closed." }, + { WERR_SXS_XML_E_UNCLOSEDCDATA, "Manifest Parse Error: A CDATA section was not closed." }, + { WERR_SXS_XML_E_RESERVEDNAMESPACE, "Manifest Parse Error: The namespace prefix is not allowed to start with the reserved string xml\".\"" }, + { WERR_SXS_XML_E_INVALIDENCODING, "Manifest Parse Error: System does not support the specified encoding." }, + { WERR_SXS_XML_E_INVALIDSWITCH, "Manifest Parse Error: Switch from current encoding to specified encoding not supported." }, + { WERR_SXS_XML_E_BADXMLCASE, "Manifest Parse Error: The name \"xml\" is reserved and must be lowercase." }, + { WERR_SXS_XML_E_INVALID_STANDALONE, "Manifest Parse Error: The stand-alone attribute must have the value \"yes\" or \"no\"." }, + { WERR_SXS_XML_E_UNEXPECTED_STANDALONE, "Manifest Parse Error: The stand-alone attribute cannot be used in external entities." }, + { WERR_SXS_XML_E_INVALID_VERSION, "Manifest Parse Error: Invalid version number." }, + { WERR_SXS_XML_E_MISSINGEQUALS, "Manifest Parse Error: Missing equal sign (=) between the attribute and the attribute value." }, + { WERR_SXS_PROTECTION_RECOVERY_FAILED, "Assembly Protection Error: Unable to recover the specified assembly." }, + { WERR_SXS_PROTECTION_PUBLIC_KEY_OO_SHORT, "Assembly Protection Error: The public key for an assembly was too short to be allowed." }, + { WERR_SXS_PROTECTION_CATALOG_NOT_VALID, "Assembly Protection Error: The catalog for an assembly is not valid, or does not match the assembly\'s manifest." }, + { WERR_SXS_UNTRANSLATABLE_HRESULT, "An HRESULT could not be translated to a corresponding Win32 error code." }, + { WERR_SXS_PROTECTION_CATALOG_FILE_MISSING, "Assembly Protection Error: The catalog for an assembly is missing." }, + { WERR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE, "The supplied assembly identity is missing one or more attributes that must be present in this context." }, + { WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME, "The supplied assembly identity has one or more attribute names that contain characters not permitted in XML names." }, + { WERR_SXS_ASSEMBLY_MISSING, "The referenced assembly could not be found." }, + { WERR_SXS_CORRUPT_ACTIVATION_STACK, "The activation context activation stack for the running thread of execution is corrupt." }, + { WERR_SXS_CORRUPTION, "The application isolation metadata for this process or thread has become corrupt." }, + { WERR_SXS_EARLY_DEACTIVATION, "The activation context being deactivated is not the most recently activated one." }, + { WERR_SXS_INVALID_DEACTIVATION, "The activation context being deactivated is not active for the current thread of execution." }, + { WERR_SXS_MULTIPLE_DEACTIVATION, "The activation context being deactivated has already been deactivated." }, + { WERR_SXS_PROCESS_TERMINATION_REQUESTED, "A component used by the isolation facility has requested to terminate the process." }, + { WERR_SXS_RELEASE_ACTIVATION_ONTEXT, "A kernel mode component is releasing a reference on an activation context." }, + { WERR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY, "The activation context of the system default assembly could not be generated." }, + { WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE, "The value of an attribute in an identity is not within the legal range." }, + { WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME, "The name of an attribute in an identity is not within the legal range." }, + { WERR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE, "An identity contains two definitions for the same attribute." }, + { WERR_SXS_IDENTITY_PARSE_ERROR, "The identity string is malformed. This may be due to a trailing comma, more than two unnamed attributes, a missing attribute name, or a missing attribute value." }, + { WERR_MALFORMED_SUBSTITUTION_STRING, "A string containing localized substitutable content was malformed. Either a dollar sign ($) was followed by something other than a left parenthesis or another dollar sign, or a substitution\'s right parenthesis was not found." }, + { WERR_SXS_INCORRECT_PUBLIC_KEY_OKEN, "The public key token does not correspond to the public key specified." }, + { WERR_UNMAPPED_SUBSTITUTION_STRING, "A substitution string had no mapping." }, + { WERR_SXS_ASSEMBLY_NOT_LOCKED, "The component must be locked before making the request." }, + { WERR_SXS_COMPONENT_STORE_CORRUPT, "The component store has been corrupted." }, + { WERR_ADVANCED_INSTALLER_FAILED, "An advanced installer failed during setup or servicing." }, + { WERR_XML_ENCODING_MISMATCH, "The character encoding in the XML declaration did not match the encoding used in the document." }, + { WERR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT, "The identities of the manifests are identical, but the contents are different." }, + { WERR_SXS_IDENTITIES_DIFFERENT, "The component identities are different." }, + { WERR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT, "The assembly is not a deployment." }, + { WERR_SXS_FILE_NOT_PART_OF_ASSEMBLY, "The file is not a part of the assembly." }, + { WERR_SXS_MANIFEST_TOO_BIG, "The size of the manifest exceeds the maximum allowed." }, + { WERR_SXS_SETTING_NOT_REGISTERED, "The setting is not registered." }, + { WERR_SXS_TRANSACTION_CLOSURE_INCOMPLETE, "One or more required members of the transaction are not present." }, + { WERR_EVT_INVALID_CHANNEL_PATH, "The specified channel path is invalid." }, + { WERR_EVT_INVALID_QUERY, "The specified query is invalid." }, + { WERR_EVT_PUBLISHER_METADATA_NOT_FOUND, "The publisher metadata cannot be found in the resource." }, + { WERR_EVT_EVENT_TEMPLATE_NOT_FOUND, "The template for an event definition cannot be found in the resource (error = %1)." }, + { WERR_EVT_INVALID_PUBLISHER_NAME, "The specified publisher name is invalid." }, + { WERR_EVT_INVALID_EVENT_DATA, "The event data raised by the publisher is not compatible with the event template definition in the publisher\'s manifest." }, + { WERR_EVT_CHANNEL_NOT_FOUND, "The specified channel could not be found. Check channel configuration." }, + { WERR_EVT_MALFORMED_XML_TEXT, "The specified XML text was not well-formed. See extended error for more details." }, + { WERR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL, "The caller is trying to subscribe to a direct channel which is not allowed. The events for a direct channel go directly to a log file and cannot be subscribed to." }, + { WERR_EVT_CONFIGURATION_ERROR, "Configuration error." }, + { WERR_EVT_QUERY_RESULT_STALE, "The query result is stale or invalid. This may be due to the log being cleared or rolling over after the query result was created. Users should handle this code by releasing the query result object and reissuing the query." }, + { WERR_EVT_QUERY_RESULT_INVALID_POSITION, "Query result is currently at an invalid position." }, + { WERR_EVT_NON_VALIDATING_MSXML, "Registered Microsoft XML (MSXML) does not support validation." }, + { WERR_EVT_FILTER_ALREADYSCOPED, "An expression can only be followed by a change-of-scope operation if it itself evaluates to a node set and is not already part of some other change-of-scope operation." }, + { WERR_EVT_FILTER_NOTELTSET, "Cannot perform a step operation from a term that does not represent an element set." }, + { WERR_EVT_FILTER_INVARG, "Left side arguments to binary operators must be either attributes, nodes, or variables and right side arguments must be constants." }, + { WERR_EVT_FILTER_INVTEST, "A step operation must involve either a node test or, in the case of a predicate, an algebraic expression against which to test each node in the node set identified by the preceding node set can be evaluated." }, + { WERR_EVT_FILTER_INVTYPE, "This data type is currently unsupported." }, + { WERR_EVT_FILTER_PARSEERR, "A syntax error occurred at position %1!d!" }, + { WERR_EVT_FILTER_UNSUPPORTEDOP, "This operator is unsupported by this implementation of the filter." }, + { WERR_EVT_FILTER_UNEXPECTEDTOKEN, "The token encountered was unexpected." }, + { WERR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL, "The requested operation cannot be performed over an enabled direct channel. The channel must first be disabled before performing the requested operation." }, + { WERR_EVT_INVALID_CHANNEL_PROPERTY_VALUE, "Channel property %1!s! contains an invalid value. The value has an invalid type, is outside the valid range, cannot be updated, or is not supported by this type of channel." }, + { WERR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE, "Publisher property %1!s! contains an invalid value. The value has an invalid type, is outside the valid range, cannot be updated, or is not supported by this type of publisher." }, + { WERR_EVT_CHANNEL_CANNOT_ACTIVATE, "The channel fails to activate." }, + { WERR_EVT_FILTER_TOO_COMPLEX, "The xpath expression exceeded supported complexity. Simplify it or split it into two or more simple expressions." }, + { WERR_EVT_MESSAGE_NOT_FOUND, "The message resource is present but the message is not found in the string or message table." }, + { WERR_EVT_MESSAGE_ID_NOT_FOUND, "The message ID for the desired message could not be found." }, + { WERR_EVT_UNRESOLVED_VALUE_INSERT, "The substitution string for the insert index (%1) could not be found." }, + { WERR_EVT_UNRESOLVED_PARAMETER_INSERT, "The description string for the parameter reference (%1) could not be found." }, + { WERR_EVT_MAX_INSERTS_REACHED, "The maximum number of replacements has been reached." }, + { WERR_EVT_EVENT_DEFINITION_NOT_OUND, "The event definition could not be found for the event ID (%1)." }, + { WERR_EVT_MESSAGE_LOCALE_NOT_FOUND, "The locale-specific resource for the desired message is not present." }, + { WERR_EVT_VERSION_TOO_OLD, "The resource is too old to be compatible." }, + { WERR_EVT_VERSION_TOO_NEW, "The resource is too new to be compatible." }, + { WERR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY, "The channel at index %1 of the query cannot be opened." }, + { WERR_EVT_PUBLISHER_DISABLED, "The publisher has been disabled and its resource is not available. This usually occurs when the publisher is in the process of being uninstalled or upgraded." }, + { WERR_EC_SUBSCRIPTION_CANNOT_ACTIVATE, "The subscription fails to activate." }, + { WERR_EC_LOG_DISABLED, "The log of the subscription is in a disabled state and events cannot be forwarded to it. The log must first be enabled before the subscription can be activated." }, + { WERR_MUI_FILE_NOT_FOUND, "The resource loader failed to find the Multilingual User Interface (MUI) file." }, + { WERR_MUI_INVALID_FILE, "The resource loader failed to load the MUI file because the file failed to pass validation." }, + { WERR_MUI_INVALID_RC_CONFIG, "The release candidate (RC) manifest is corrupted with garbage data, is an unsupported version, or is missing a required item." }, + { WERR_MUI_INVALID_LOCALE_NAME, "The RC manifest has an invalid culture name." }, + { WERR_MUI_INVALID_ULTIMATEFALLBACK_NAME, "The RC Manifest has an invalid ultimate fallback name." }, + { WERR_MUI_FILE_NOT_LOADED, "The resource loader cache does not have a loaded MUI entry." }, + { WERR_RESOURCE_ENUM_USER_STOP, "The user stopped resource enumeration." }, + { WERR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED, "User interface language installation failed." }, + { WERR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME, "Locale installation failed." }, + { WERR_MCA_INVALID_CAPABILITIES_STRING, "The monitor returned a DDC/CI capabilities string that did not comply with the ACCESS.bus 3.0, DDC/CI 1.1, or MCCS 2 Revision 1 specification." }, + { WERR_MCA_INVALID_VCP_VERSION, "The monitor\'s VCP version (0xDF) VCP code returned an invalid version value." }, + { WERR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION, "The monitor does not comply with the MCCS specification it claims to support." }, + { WERR_MCA_MCCS_VERSION_MISMATCH, "The MCCS version in a monitor\'s mccs_ver capability does not match the MCCS version the monitor reports when the VCP version (0xDF) VCP code is used." }, + { WERR_MCA_UNSUPPORTED_MCCS_VERSION, "The monitor configuration API works only with monitors that support the MCCS 1.0, MCCS 2.0, or MCCS 2.0 Revision 1 specifications." }, + { WERR_MCA_INTERNAL_ERROR, "An internal monitor configuration API error occurred." }, + { WERR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED, "The monitor returned an invalid monitor technology type. CRT, plasma, and LCD (TFT) are examples of monitor technology types. This error implies that the monitor violated the MCCS 2.0 or MCCS 2.0 Revision 1 specification." }, + { WERR_MCA_UNSUPPORTED_COLOR_TEMPERATURE, "The SetMonitorColorTemperature() caller passed a color temperature to it that the current monitor did not support. CRT, plasma, and LCD (TFT) are examples of monitor technology types. This error implies that the monitor violated the MCCS 2.0 or MCCS 2.0 Revision 1 specification." }, + { WERR_AMBIGUOUS_SYSTEM_DEVICE, "The requested system device cannot be identified due to multiple indistinguishable devices potentially matching the identification criteria." }, + { WERR_SYSTEM_DEVICE_NOT_FOUND, "The requested system device cannot be found." }, + /* END GENERATED-WIN32-ERROR-CODES-DESC */ }; diff --git a/libcli/util/ntstatus.h b/libcli/util/ntstatus.h index 1608e2874f..1025f47210 100644 --- a/libcli/util/ntstatus.h +++ b/libcli/util/ntstatus.h @@ -60,8 +60,8 @@ typedef uint32_t NTSTATUS; #define ERROR_INSUFFICIENT_BUFFER NT_STATUS(0x007a) #define ERROR_INVALID_DATATYPE NT_STATUS(0x070c) -/* XXX Win7 Status code: Name unknown. */ -#define NT_STATUS_WIN7_INVALID_RANGE NT_STATUS(0xC0000000 | 0x01a1) +/* Win7 status codes. */ +#define NT_STATUS_INVALID_LOCK_RANGE NT_STATUS(0xC0000000 | 0x01a1) /* Win32 Error codes extracted using a loop in smbclient then printing a netmon sniff to a file. */ @@ -595,8 +595,7 @@ typedef uint32_t NTSTATUS; #define NT_STATUS_TOO_MANY_LINKS NT_STATUS(0xC0000000 | 0x0265) #define NT_STATUS_QUOTA_LIST_INCONSISTENT NT_STATUS(0xC0000000 | 0x0266) #define NT_STATUS_FILE_IS_OFFLINE NT_STATUS(0xC0000000 | 0x0267) -#define NT_STATUS_DS_BUSY NT_STATUS(0xC0000000 | 0x02a5) -#define NT_STATUS_DS_NO_MORE_RIDS NT_STATUS(0xC0000000 | 0x02a8) +#define NT_STATUS_DS_NO_MORE_RIDS NT_STATUS(0xC0000000 | 0x02A8) #define NT_STATUS_NOT_A_REPARSE_POINT NT_STATUS(0xC0000000 | 0x0275) #define NT_STATUS_CURRENT_DOMAIN_NOT_ALLOWED NT_STATUS(0xC0000000 | 0x02E9) #define NT_STATUS_OBJECTID_NOT_FOUND NT_STATUS(0xC0000000 | 0x02F0) @@ -606,7 +605,10 @@ typedef uint32_t NTSTATUS; #define NT_STATUS_RPC_PROTSEQ_NOT_SUPPORTED NT_STATUS(0xC0000000 | 0x20004) #define NT_STATUS_RPC_UNSUPPORTED_NAME_SYNTAX NT_STATUS(0xC0000000 | 0x20026) #define NT_STATUS_RPC_NT_CALL_FAILED NT_STATUS(0xC0000000 | 0x2001B) - +#define NT_STATUS_RPC_NT_PROTOCOL_ERROR NT_STATUS(0xC0000000 | 0x2001D) +#define NT_STATUS_RPC_NT_PROCNUM_OUT_OF_RANGE NT_STATUS(0xC0000000 | 0x2002E) +#define NT_STATUS_ERROR_DS_OBJ_STRING_NAME_EXISTS NT_STATUS(0xC0000000 | 0x2071) +#define NT_STATUS_ERROR_DS_INCOMPATIBLE_VERSION NT_STATUS(0xC0000000 | 0x00002177) /* I use NT_STATUS_FOOBAR when I have no idea what error code to use - * this means we need a torture test */ @@ -635,8 +637,8 @@ NTSTATUS nt_status_string_to_code(const char *nt_status_str); /** Used by ntstatus_dos_equal: */ extern bool ntstatus_check_dos_mapping; -#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0) -#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000) +#define NT_STATUS_IS_OK(x) (likely(NT_STATUS_V(x) == 0)) +#define NT_STATUS_IS_ERR(x) (unlikely((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000)) /* checking for DOS error mapping here is ugly, but unfortunately the alternative is a very intrusive rewrite of the torture code */ #if _SAMBA_BUILD_ == 4 @@ -646,7 +648,16 @@ extern bool ntstatus_check_dos_mapping; #endif #define NT_STATUS_HAVE_NO_MEMORY(x) do { \ + if (unlikely(!(x))) { \ + return NT_STATUS_NO_MEMORY;\ + }\ +} while (0) + +/* This varient is for when you want to free a local + temporary memory context in the error path */ +#define NT_STATUS_HAVE_NO_MEMORY_AND_FREE(x, ctx) do { \ if (!(x)) {\ + talloc_free(ctx); \ return NT_STATUS_NO_MEMORY;\ }\ } while (0) diff --git a/libcli/util/werror.h b/libcli/util/werror.h index 2976390ebf..ac4fb37257 100644 --- a/libcli/util/werror.h +++ b/libcli/util/werror.h @@ -74,139 +74,130 @@ typedef uint32_t WERROR; /* these are win32 error codes. There are only a few places where these matter for Samba, primarily in the NT printing code */ -#define WERR_OK W_ERROR(0) -#define WERR_BADFUNC W_ERROR(1) -#define WERR_BADFILE W_ERROR(2) -#define WERR_ACCESS_DENIED W_ERROR(5) -#define WERR_BADFID W_ERROR(6) -#define WERR_NOMEM W_ERROR(8) -#define WERR_GENERAL_FAILURE W_ERROR(31) -#define WERR_NOT_SUPPORTED W_ERROR(50) -#define WERR_DUP_NAME W_ERROR(52) -#define WERR_BAD_NETPATH W_ERROR(53) -#define WERR_BAD_NET_RESP W_ERROR(58) -#define WERR_UNEXP_NET_ERR W_ERROR(59) -#define WERR_DEVICE_NOT_EXIST W_ERROR(55) -#define WERR_PRINTQ_FULL W_ERROR(61) -#define WERR_NO_SPOOL_SPACE W_ERROR(62) -#define WERR_NO_SUCH_SHARE W_ERROR(67) -#define WERR_FILE_EXISTS W_ERROR(80) -#define WERR_BAD_PASSWORD W_ERROR(86) -#define WERR_INVALID_PARAM W_ERROR(87) -#define WERR_CALL_NOT_IMPLEMENTED W_ERROR(120) -#define WERR_SEM_TIMEOUT W_ERROR(121) -#define WERR_INSUFFICIENT_BUFFER W_ERROR(122) -#define WERR_INVALID_NAME W_ERROR(123) -#define WERR_UNKNOWN_LEVEL W_ERROR(124) -#define WERR_OBJECT_PATH_INVALID W_ERROR(161) -#define WERR_ALREADY_EXISTS W_ERROR(183) -#define WERR_NO_MORE_ITEMS W_ERROR(259) -#define WERR_MORE_DATA W_ERROR(234) -#define WERR_INVALID_OWNER W_ERROR(1307) -#define WERR_IO_PENDING W_ERROR(997) -#define WERR_CAN_NOT_COMPLETE W_ERROR(1003) -#define WERR_INVALID_FLAGS W_ERROR(1004) -#define WERR_REG_CORRUPT W_ERROR(1015) -#define WERR_REG_IO_FAILURE W_ERROR(1016) -#define WERR_REG_FILE_INVALID W_ERROR(1017) -#define WERR_NO_SUCH_SERVICE W_ERROR(1060) -#define WERR_INVALID_SERVICE_CONTROL W_ERROR(1052) -#define WERR_SERVICE_ALREADY_RUNNING W_ERROR(1056) -#define WERR_SERVICE_DISABLED W_ERROR(1058) -#define WERR_SERVICE_MARKED_FOR_DELETE W_ERROR(1072) -#define WERR_SERVICE_EXISTS W_ERROR(1073) -#define WERR_SERVICE_NEVER_STARTED W_ERROR(1077) -#define WERR_DUPLICATE_SERVICE_NAME W_ERROR(1078) -#define WERR_DEVICE_NOT_CONNECTED W_ERROR(1167) -#define WERR_NOT_FOUND W_ERROR(1168) -#define WERR_INVALID_COMPUTERNAME W_ERROR(1210) -#define WERR_INVALID_DOMAINNAME W_ERROR(1212) -#define WERR_NOT_AUTHENTICATED W_ERROR(1244) -#define WERR_UNKNOWN_REVISION W_ERROR(1305) -#define WERR_MACHINE_LOCKED W_ERROR(1271) -#define WERR_REVISION_MISMATCH W_ERROR(1306) -#define WERR_INVALID_OWNER W_ERROR(1307) -#define WERR_INVALID_PRIMARY_GROUP W_ERROR(1308) -#define WERR_NO_LOGON_SERVERS W_ERROR(1311) -#define WERR_NO_SUCH_LOGON_SESSION W_ERROR(1312) -#define WERR_NO_SUCH_PRIVILEGE W_ERROR(1313) -#define WERR_PRIVILEGE_NOT_HELD W_ERROR(1314) -#define WERR_USER_ALREADY_EXISTS W_ERROR(1316) -#define WERR_NO_SUCH_USER W_ERROR(1317) -#define WERR_GROUP_EXISTS W_ERROR(1318) -#define WERR_NO_SUCH_GROUP W_ERROR(1319) -#define WERR_MEMBER_IN_GROUP W_ERROR(1320) -#define WERR_USER_NOT_IN_GROUP W_ERROR(1321) -#define WERR_WRONG_PASSWORD W_ERROR(1323) -#define WERR_PASSWORD_RESTRICTION W_ERROR(1325) -#define WERR_LOGON_FAILURE W_ERROR(1326) -#define WERR_NO_SUCH_DOMAIN W_ERROR(1355) -#define WERR_NONE_MAPPED W_ERROR(1332) -#define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338) -#define WERR_INVALID_DOMAIN_STATE W_ERROR(1353) -#define WERR_INVALID_DOMAIN_ROLE W_ERROR(1354) -#define WERR_NO_SUCH_DOMAIN W_ERROR(1355) -#define WERR_NO_SYSTEM_RESOURCES W_ERROR(1450) -#define WERR_SPECIAL_ACCOUNT W_ERROR(1371) -#define WERR_NO_SUCH_ALIAS W_ERROR(1376) -#define WERR_MEMBER_IN_ALIAS W_ERROR(1378) -#define WERR_ALIAS_EXISTS W_ERROR(1379) -#define WERR_TIME_SKEW W_ERROR(1398) -#define WERR_EVENTLOG_FILE_CORRUPT W_ERROR(1500) -#define WERR_SERVER_UNAVAILABLE W_ERROR(1722) -#define WERR_INVALID_USER_BUFFER W_ERROR(1784) -#define WERR_NO_TRUST_SAM_ACCOUNT W_ERROR(1787) -#define WERR_INVALID_FORM_NAME W_ERROR(1902) -#define WERR_INVALID_FORM_SIZE W_ERROR(1903) -#define WERR_PASSWORD_MUST_CHANGE W_ERROR(1907) -#define WERR_ACCOUNT_LOCKED_OUT W_ERROR(1909) -#define WERR_ALREADY_SHARED W_ERROR(2118) -#define WERR_NOT_CONNECTED W_ERROR(2250) -#define WERR_NAME_NOT_FOUND W_ERROR(2273) -#define WERR_SESSION_NOT_FOUND W_ERROR(2312) -#define WERR_FID_NOT_FOUND W_ERROR(2314) -#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(2453) -#define WERR_TIME_DIFF_AT_DC W_ERROR(2457) - -#define WERR_DEVICE_NOT_AVAILABLE W_ERROR(4319) -#define WERR_STATUS_MORE_ENTRIES W_ERROR(0x0105) - -#define WERR_PRINTER_DRIVER_ALREADY_INSTALLED W_ERROR(ERRdriveralreadyinstalled) -#define WERR_UNKNOWN_PORT W_ERROR(ERRunknownprinterport) -#define WERR_UNKNOWN_PRINTER_DRIVER W_ERROR(ERRunknownprinterdriver) -#define WERR_UNKNOWN_PRINTPROCESSOR W_ERROR(ERRunknownprintprocessor) -#define WERR_INVALID_SEPARATOR_FILE W_ERROR(ERRinvalidseparatorfile) -#define WERR_INVALID_PRIORITY W_ERROR(ERRinvalidjobpriority) -#define WERR_INVALID_PRINTER_NAME W_ERROR(ERRinvalidprintername) -#define WERR_PRINTER_ALREADY_EXISTS W_ERROR(ERRprinteralreadyexists) -#define WERR_INVALID_PRINTER_COMMAND W_ERROR(ERRinvalidprintercommand) -#define WERR_INVALID_DATATYPE W_ERROR(ERRinvaliddatatype) -#define WERR_INVALID_ENVIRONMENT W_ERROR(ERRinvalidenvironment) - -#define WERR_UNKNOWN_PRINT_MONITOR W_ERROR(ERRunknownprintmonitor) -#define WERR_PRINTER_DRIVER_IN_USE W_ERROR(ERRprinterdriverinuse) -#define WERR_SPOOL_FILE_NOT_FOUND W_ERROR(ERRspoolfilenotfound) -#define WERR_SPL_NO_STARTDOC W_ERROR(ERRnostartdoc) -#define WERR_SPL_NO_ADDJOB W_ERROR(ERRnoaddjob) -#define WERR_PRINT_PROCESSOR_ALREADY_INSTALLED W_ERROR(ERRprintprocessoralreadyinstalled) -#define WERR_PRINT_MONITOR_ALREADY_INSTALLED W_ERROR(ERRprintmonitoralreadyinstalled) -#define WERR_INVALID_PRINT_MONITOR W_ERROR(ERRinvalidprintmonitor) -#define WERR_PRINT_MONITOR_IN_USE W_ERROR(ERRprintmonitorinuse) -#define WERR_PRINTER_HAS_JOBS_QUEUED W_ERROR(ERRprinterhasjobsqueued) - -#define WERR_CLASS_NOT_REGISTERED W_ERROR(0x40154) -#define WERR_NO_SHUTDOWN_IN_PROGRESS W_ERROR(0x45c) -#define WERR_SHUTDOWN_ALREADY_IN_PROGRESS W_ERROR(0x45b) +#define WERR_OK W_ERROR(0x00000000) +#define WERR_BADFUNC W_ERROR(0x00000001) +#define WERR_BADFILE W_ERROR(0x00000002) +#define WERR_ACCESS_DENIED W_ERROR(0x00000005) +#define WERR_BADFID W_ERROR(0x00000006) +#define WERR_NOMEM W_ERROR(0x00000008) +#define WERR_GENERAL_FAILURE W_ERROR(0x0000001F) +#define WERR_NOT_SUPPORTED W_ERROR(0x00000032) +#define WERR_DUP_NAME W_ERROR(0x00000034) +#define WERR_BAD_NETPATH W_ERROR(0x00000035) +#define WERR_BAD_NET_RESP W_ERROR(0x0000003A) +#define WERR_UNEXP_NET_ERR W_ERROR(0x0000003B) +#define WERR_DEVICE_NOT_EXIST W_ERROR(0x00000037) +#define WERR_PRINTQ_FULL W_ERROR(0x0000003D) +#define WERR_NO_SPOOL_SPACE W_ERROR(0x0000003E) +#define WERR_NO_SUCH_SHARE W_ERROR(0x00000043) +#define WERR_FILE_EXISTS W_ERROR(0x00000050) +#define WERR_BAD_PASSWORD W_ERROR(0x00000056) +#define WERR_INVALID_PARAM W_ERROR(0x00000057) +#define WERR_CALL_NOT_IMPLEMENTED W_ERROR(0x00000078) +#define WERR_SEM_TIMEOUT W_ERROR(0x00000079) +#define WERR_INSUFFICIENT_BUFFER W_ERROR(0x0000007A) +#define WERR_INVALID_NAME W_ERROR(0x0000007B) +#define WERR_UNKNOWN_LEVEL W_ERROR(0x0000007C) +#define WERR_OBJECT_PATH_INVALID W_ERROR(0x000000A1) +#define WERR_ALREADY_EXISTS W_ERROR(0x000000B7) +#define WERR_MORE_DATA W_ERROR(0x000000EA) +#define WERR_NO_MORE_ITEMS W_ERROR(0x00000103) +#define WERR_STATUS_MORE_ENTRIES W_ERROR(0x00000105) +#define WERR_IO_PENDING W_ERROR(0x000003E5) +#define WERR_CAN_NOT_COMPLETE W_ERROR(0x000003EB) +#define WERR_INVALID_FLAGS W_ERROR(0x000003EC) +#define WERR_REG_CORRUPT W_ERROR(0x000003F7) +#define WERR_REG_IO_FAILURE W_ERROR(0x000003F8) +#define WERR_REG_FILE_INVALID W_ERROR(0x000003F9) +#define WERR_INVALID_SERVICE_CONTROL W_ERROR(0x0000041C) +#define WERR_SERVICE_ALREADY_RUNNING W_ERROR(0x00000420) +#define WERR_SERVICE_DISABLED W_ERROR(0x00000422) +#define WERR_NO_SUCH_SERVICE W_ERROR(0x00000424) +#define WERR_SERVICE_MARKED_FOR_DELETE W_ERROR(0x00000430) +#define WERR_SERVICE_EXISTS W_ERROR(0x00000431) +#define WERR_SERVICE_NEVER_STARTED W_ERROR(0x00000435) +#define WERR_DUPLICATE_SERVICE_NAME W_ERROR(0x00000436) +#define WERR_DEVICE_NOT_CONNECTED W_ERROR(0x0000048F) +#define WERR_NOT_FOUND W_ERROR(0x00000490) +#define WERR_INVALID_COMPUTERNAME W_ERROR(0x000004BA) +#define WERR_INVALID_DOMAINNAME W_ERROR(0x000004BC) +#define WERR_NOT_AUTHENTICATED W_ERROR(0x000004DC) +#define WERR_MACHINE_LOCKED W_ERROR(0x000004F7) +#define WERR_UNKNOWN_REVISION W_ERROR(0x00000519) +#define WERR_INVALID_OWNER W_ERROR(0x0000051B) +#define WERR_REVISION_MISMATCH W_ERROR(0x0000051A) +#define WERR_INVALID_OWNER W_ERROR(0x0000051B) +#define WERR_INVALID_PRIMARY_GROUP W_ERROR(0x0000051C) +#define WERR_NO_LOGON_SERVERS W_ERROR(0x0000051F) +#define WERR_NO_SUCH_LOGON_SESSION W_ERROR(0x00000520) +#define WERR_NO_SUCH_PRIVILEGE W_ERROR(0x00000521) +#define WERR_PRIVILEGE_NOT_HELD W_ERROR(0x00000522) +#define WERR_USER_ALREADY_EXISTS W_ERROR(0x00000524) +#define WERR_NO_SUCH_USER W_ERROR(0x00000525) +#define WERR_GROUP_EXISTS W_ERROR(0x00000526) +#define WERR_NO_SUCH_GROUP W_ERROR(0x00000527) +#define WERR_MEMBER_IN_GROUP W_ERROR(0x00000528) +#define WERR_USER_NOT_IN_GROUP W_ERROR(0x00000529) +#define WERR_WRONG_PASSWORD W_ERROR(0x0000052B) +#define WERR_PASSWORD_RESTRICTION W_ERROR(0x0000052D) +#define WERR_LOGON_FAILURE W_ERROR(0x0000052E) +#define WERR_NONE_MAPPED W_ERROR(0x00000534) +#define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(0x0000053A) +#define WERR_INVALID_DOMAIN_STATE W_ERROR(0x00000549) +#define WERR_INVALID_DOMAIN_ROLE W_ERROR(0x0000054A) +#define WERR_NO_SUCH_DOMAIN W_ERROR(0x0000054B) +#define WERR_SPECIAL_ACCOUNT W_ERROR(0x0000055B) +#define WERR_NO_SUCH_ALIAS W_ERROR(0x00000560) +#define WERR_MEMBER_IN_ALIAS W_ERROR(0x00000562) +#define WERR_ALIAS_EXISTS W_ERROR(0x00000563) +#define WERR_TIME_SKEW W_ERROR(0x00000576) +#define WERR_NO_SYSTEM_RESOURCES W_ERROR(0x000005AA) +#define WERR_EVENTLOG_FILE_CORRUPT W_ERROR(0x000005DC) +#define WERR_SERVER_UNAVAILABLE W_ERROR(0x000006BA) +#define WERR_INVALID_USER_BUFFER W_ERROR(0x000006F8) +#define WERR_NO_TRUST_SAM_ACCOUNT W_ERROR(0x000006FB) +#define WERR_INVALID_FORM_NAME W_ERROR(0x0000076E) +#define WERR_INVALID_FORM_SIZE W_ERROR(0x0000076F) +#define WERR_PASSWORD_MUST_CHANGE W_ERROR(0x00000773) +#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(0x00000774) +#define WERR_ACCOUNT_LOCKED_OUT W_ERROR(0x00000775) + + +#define WERR_DEVICE_NOT_AVAILABLE W_ERROR(0x000010DF) + +#define WERR_PRINTER_DRIVER_ALREADY_INSTALLED W_ERROR(0x00000703) +#define WERR_UNKNOWN_PORT W_ERROR(0x00000704) +#define WERR_UNKNOWN_PRINTER_DRIVER W_ERROR(0x00000705) +#define WERR_UNKNOWN_PRINTPROCESSOR W_ERROR(0x00000706) +#define WERR_INVALID_SEPARATOR_FILE W_ERROR(0x00000707) +#define WERR_INVALID_PRIORITY W_ERROR(0x00000708) +#define WERR_INVALID_PRINTER_NAME W_ERROR(0x00000709) +#define WERR_PRINTER_ALREADY_EXISTS W_ERROR(0x0000070A) +#define WERR_INVALID_PRINTER_COMMAND W_ERROR(0x0000070B) +#define WERR_INVALID_DATATYPE W_ERROR(0x0000070C) +#define WERR_INVALID_ENVIRONMENT W_ERROR(0x0000070D) + +#define WERR_UNKNOWN_PRINT_MONITOR W_ERROR(0x00000BB8) +#define WERR_PRINTER_DRIVER_IN_USE W_ERROR(0x00000BB9) +#define WERR_SPOOL_FILE_NOT_FOUND W_ERROR(0x00000BBA) +#define WERR_SPL_NO_STARTDOC W_ERROR(0x00000BBB) +#define WERR_SPL_NO_ADDJOB W_ERROR(0x00000BBC) +#define WERR_PRINT_PROCESSOR_ALREADY_INSTALLED W_ERROR(0x00000BBD) +#define WERR_PRINT_MONITOR_ALREADY_INSTALLED W_ERROR(0x00000BBE) +#define WERR_INVALID_PRINT_MONITOR W_ERROR(0x00000BBF) +#define WERR_PRINT_MONITOR_IN_USE W_ERROR(0x00000BC0) +#define WERR_PRINTER_HAS_JOBS_QUEUED W_ERROR(0x00000BC1) + +#define WERR_NO_SHUTDOWN_IN_PROGRESS W_ERROR(0x0000045c) +#define WERR_SHUTDOWN_ALREADY_IN_PROGRESS W_ERROR(0x0000045b) + /* Configuration Manager Errors */ /* Basically Win32 errors meanings are specific to the \ntsvcs pipe */ - #define WERR_CM_INVALID_POINTER W_ERROR(3) #define WERR_CM_BUFFER_SMALL W_ERROR(26) #define WERR_CM_NO_MORE_HW_PROFILES W_ERROR(35) #define WERR_CM_NO_SUCH_VALUE W_ERROR(37) -#define WERR_DEVICE_NOT_SHARED W_ERROR(NERR_BASE+211) - /* DFS errors */ #ifndef NERR_BASE @@ -217,54 +208,95 @@ typedef uint32_t WERROR; #define MAX_NERR (NERR_BASE+899) #endif -#define WERR_BUF_TOO_SMALL W_ERROR(NERR_BASE+23) -#define WERR_JOB_NOT_FOUND W_ERROR(NERR_BASE+51) -#define WERR_DEST_NOT_FOUND W_ERROR(NERR_BASE+52) -#define WERR_GROUP_NOT_FOUND W_ERROR(NERR_BASE+120) -#define WERR_USER_NOT_FOUND W_ERROR(NERR_BASE+121) -#define WERR_USER_EXISTS W_ERROR(NERR_BASE+124) -#define WERR_NET_NAME_NOT_FOUND W_ERROR(NERR_BASE+210) -#define WERR_NOT_LOCAL_DOMAIN W_ERROR(NERR_BASE+220) -#define WERR_DC_NOT_FOUND W_ERROR(NERR_BASE+353) -#define WERR_DFS_NO_SUCH_VOL W_ERROR(NERR_BASE+562) -#define WERR_DFS_NO_SUCH_SHARE W_ERROR(NERR_BASE+565) -#define WERR_DFS_NO_SUCH_SERVER W_ERROR(NERR_BASE+573) -#define WERR_DFS_INTERNAL_ERROR W_ERROR(NERR_BASE+590) -#define WERR_DFS_CANT_CREATE_JUNCT W_ERROR(NERR_BASE+569) -#define WERR_SETUP_ALREADY_JOINED W_ERROR(NERR_BASE+591) -#define WERR_SETUP_NOT_JOINED W_ERROR(NERR_BASE+592) -#define WERR_SETUP_DOMAIN_CONTROLLER W_ERROR(NERR_BASE+593) -#define WERR_DEFAULT_JOIN_REQUIRED W_ERROR(NERR_BASE+594) +#define WERR_BUF_TOO_SMALL W_ERROR(0x0000084B) +#define WERR_ALREADY_SHARED W_ERROR(0x00000846) +#define WERR_JOB_NOT_FOUND W_ERROR(0x00000867) +#define WERR_DEST_NOT_FOUND W_ERROR(0x00000868) +#define WERR_GROUPNOTFOUND W_ERROR(0x000008AC) +#define WERR_USER_NOT_FOUND W_ERROR(0x000008AD) +#define WERR_USEREXISTS W_ERROR(0x000008B0) +#define WERR_NOT_CONNECTED W_ERROR(0x000008CA) +#define WERR_NAME_NOT_FOUND W_ERROR(0x000008E1) +#define WERR_NET_NAME_NOT_FOUND W_ERROR(0x00000906) +#define WERR_SESSION_NOT_FOUND W_ERROR(0x00000908) +#define WERR_DEVICE_NOT_SHARED W_ERROR(0x00000907) +#define WERR_FID_NOT_FOUND W_ERROR(0x0000090A) +#define WERR_NOT_LOCAL_DOMAIN W_ERROR(0x00000910) +#define WERR_DCNOTFOUND W_ERROR(0x00000995) +#define WERR_TIME_DIFF_AT_DC W_ERROR(0x00000999) +#define WERR_DFS_NO_SUCH_VOL W_ERROR(0x00000A66) +#define WERR_DFS_NO_SUCH_SHARE W_ERROR(0x00000A69) +#define WERR_DFS_NO_SUCH_SERVER W_ERROR(0x00000A71) +#define WERR_DFS_INTERNAL_ERROR W_ERROR(0x00000A82) +#define WERR_DFS_CANT_CREATE_JUNCT W_ERROR(0x00000A6D) +#define WERR_SETUP_ALREADY_JOINED W_ERROR(0x00000A83) +#define WERR_SETUP_NOT_JOINED W_ERROR(0x00000A84) +#define WERR_SETUP_DOMAIN_CONTROLLER W_ERROR(0x00000A85) +#define WERR_DEFAULT_JOIN_REQUIRED W_ERROR(0x00000A86) /* DS errors */ -#define WERR_DS_SERVICE_BUSY W_ERROR(0x0000200e) -#define WERR_DS_SERVICE_UNAVAILABLE W_ERROR(0x0000200f) +#define WERR_DS_NO_ATTRIBUTE_OR_VALUE W_ERROR(0x0000200A) +#define WERR_DS_INVALID_ATTRIBUTE_SYNTAX W_ERROR(0x0000200B) +#define WERR_DS_ATTRIBUTE_TYPE_UNDEFINED W_ERROR(0x0000200C) +#define WERR_DS_ATTRIBUTE_OR_VALUE_EXISTS W_ERROR(0x0000200D) +#define WERR_DS_BUSY W_ERROR(0x0000200E) +#define WERR_DS_UNAVAILABLE W_ERROR(0x0000200F) +#define WERR_DS_OBJ_CLASS_VIOLATION W_ERROR(0x00002014) +#define WERR_DS_CANT_ON_NON_LEAF W_ERROR(0x00002015) +#define WERR_DS_CANT_ON_RDN W_ERROR(0x00002016) +#define WERR_DS_CANT_MOD_OBJ_CLASS W_ERROR(0x00002017) +#define WERR_DS_OPERATIONS_ERROR W_ERROR(0x00002020) +#define WERR_DS_PROTOCOL_ERROR W_ERROR(0x00002021) +#define WERR_DS_TIMELIMIT_EXCEEDED W_ERROR(0x00002022) +#define WERR_DS_SIZE_LIMIT_EXCEEDED W_ERROR(0x00002023) +#define WERR_DS_ADMIN_LIMIT_EXCEEDED W_ERROR(0x00002024) +#define WERR_DS_COMPARE_FALSE W_ERROR(0x00002025) +#define WERR_DS_COMPARE_TRUE W_ERROR(0x00002026) +#define WERR_DS_AUTH_METHOD_NOT_SUPPORTED W_ERROR(0x00002027) +#define WERR_DS_STRONG_AUTH_REQUIRED W_ERROR(0x00002028) +#define WERR_DS_INAPPROPRIATE_AUTH W_ERROR(0x00002029) +#define WERR_DS_REFERRAL W_ERROR(0x0000202B) +#define WERR_DS_UNAVAILABLE_CRIT_EXTENSION W_ERROR(0x0000202C) +#define WERR_DS_CONFIDENTIALITY_REQUIRED W_ERROR(0x0000202D) +#define WERR_DS_INAPPROPRIATE_MATCHING W_ERROR(0x0000202E) +#define WERR_DS_CONSTRAINT_VIOLATION W_ERROR(0x0000202F) #define WERR_DS_NO_SUCH_OBJECT W_ERROR(0x00002030) -#define WERR_DS_OBJ_NOT_FOUND W_ERROR(0x0000208d) -#define WERR_DS_SCHEMA_NOT_LOADED W_ERROR(0x20de) -#define WERR_DS_SCHEMA_ALLOC_FAILED W_ERROR(0x20df) -#define WERR_DS_ATT_SCHEMA_REQ_SYNTAX W_ERROR(0x000020e0) -#define WERR_DS_DRA_SCHEMA_MISMATCH W_ERROR(0x000020e2) -#define WERR_DS_DRA_INVALID_PARAMETER W_ERROR(0x000020f5) -#define WERR_DS_DRA_BAD_DN W_ERROR(0x000020f7) -#define WERR_DS_DRA_BAD_NC W_ERROR(0x000020f8) -#define WERR_DS_DRA_INTERNAL_ERROR W_ERROR(0x000020fa) -#define WERR_DS_DRA_OUT_OF_MEM W_ERROR(0x000020fe) +#define WERR_DS_ALIAS_PROBLEM W_ERROR(0x00002031) +#define WERR_DS_INVALID_DN_SYNTAX W_ERROR(0x00002032) +#define WERR_DS_ALIAS_DEREF_PROBLEM W_ERROR(0x00002034) +#define WERR_DS_UNWILLING_TO_PERFORM W_ERROR(0x00002035) +#define WERR_DS_LOOP_DETECT W_ERROR(0x00002036) +#define WERR_DS_NAMING_VIOLATION W_ERROR(0x00002037) +#define WERR_DS_AFFECTS_MULTIPLE_DSAS W_ERROR(0x00002039) +#define WERR_DS_OBJ_STRING_NAME_EXISTS W_ERROR(0x00002071) +#define WERR_DS_OBJ_NOT_FOUND W_ERROR(0x0000208D) +#define WERR_DS_GENERIC_ERROR W_ERROR(0x00002095) +#define WERR_DS_INSUFF_ACCESS_RIGHTS W_ERROR(0x00002098) +#define WERR_DS_SCHEMA_NOT_LOADED W_ERROR(0x20DE) +#define WERR_DS_SCHEMA_ALLOC_FAILED W_ERROR(0x20DF) +#define WERR_DS_ATT_SCHEMA_REQ_SYNTAX W_ERROR(0x000020E0) +#define WERR_DS_DRA_SCHEMA_MISMATCH W_ERROR(0x000020E2) +#define WERR_DS_DRA_INVALID_PARAMETER W_ERROR(0x000020F5) +#define WERR_DS_DRA_BAD_DN W_ERROR(0x000020F7) +#define WERR_DS_DRA_BAD_NC W_ERROR(0x000020F8) +#define WERR_DS_DRA_INTERNAL_ERROR W_ERROR(0x000020FA) +#define WERR_DS_DRA_OUT_OF_MEM W_ERROR(0x000020FE) #define WERR_DS_SINGLE_VALUE_CONSTRAINT W_ERROR(0x00002081) #define WERR_DS_DRA_DB_ERROR W_ERROR(0x00002103) #define WERR_DS_DRA_NO_REPLICA W_ERROR(0x00002104) #define WERR_DS_DRA_ACCESS_DENIED W_ERROR(0x00002105) #define WERR_DS_DRA_SOURCE_DISABLED W_ERROR(0x00002108) -#define WERR_DS_DNS_LOOKUP_FAILURE W_ERROR(0x0000214c) +#define WERR_DS_DNS_LOOKUP_FAILURE W_ERROR(0x0000214C) #define WERR_DS_WRONG_LINKED_ATTRIBUTE_SYNTAX W_ERROR(0x00002150) #define WERR_DS_NO_MSDS_INTID W_ERROR(0x00002194) #define WERR_DS_DUP_MSDS_INTID W_ERROR(0x00002195) /* FRS errors */ -#define WERR_FRS_INSUFFICIENT_PRIV W_ERROR(FRS_ERR_BASE+7) -#define WERR_FRS_SYSVOL_IS_BUSY W_ERROR(FRS_ERR_BASE+15) -#define WERR_FRS_INVALID_SERVICE_PARAMETER W_ERROR(FRS_ERR_BASE+17) +#define WERR_FRS_INSUFFICIENT_PRIV W_ERROR(0x00001F47) +#define WERR_FRS_SYSVOL_IS_BUSY W_ERROR(0x00001F4F) +#define WERR_FRS_INVALID_SERVICE_PARAMETER W_ERROR(0x00001F51) +/* RPC/COM/OLE HRESULT error codes */ /* RPC errors */ #define WERR_RPC_E_INVALID_HEADER W_ERROR(0x80010111) #define WERR_RPC_E_REMOTE_DISABLED W_ERROR(0x8001011c) @@ -274,9 +306,2374 @@ typedef uint32_t WERROR; #define WERR_SEC_E_DECRYPT_FAILURE W_ERROR(0x80090330) #define WERR_SEC_E_ALGORITHM_MISMATCH W_ERROR(0x80090331) +/* COM REGDB error codes */ +#define WERR_CLASS_NOT_REGISTERED W_ERROR(0x80040154) /* REGDB_E_CLASSNOTREG */ + +/* Generic error code aliases */ #define WERR_FOOBAR WERR_GENERAL_FAILURE /***************************************************************************** + Auto-generated Win32 error from: + http://msdn.microsoft.com/en-us/library/cc231199%28PROT.10%29.aspx + *****************************************************************************/ +/* BEGIN GENERATED-WIN32-ERROR-CODES */ +#define WERR_NERR_SUCCESS W_ERROR(0x00000000) +#define WERR_INVALID_FUNCTION W_ERROR(0x00000001) +#define WERR_FILE_NOT_FOUND W_ERROR(0x00000002) +#define WERR_PATH_NOT_FOUND W_ERROR(0x00000003) +#define WERR_TOO_MANY_OPEN_FILES W_ERROR(0x00000004) +#define WERR_INVALID_HANDLE W_ERROR(0x00000006) +#define WERR_ARENA_TRASHED W_ERROR(0x00000007) +#define WERR_NOT_ENOUGH_MEMORY W_ERROR(0x00000008) +#define WERR_INVALID_BLOCK W_ERROR(0x00000009) +#define WERR_BAD_ENVIRONMENT W_ERROR(0x0000000A) +#define WERR_BAD_FORMAT W_ERROR(0x0000000B) +#define WERR_INVALID_ACCESS W_ERROR(0x0000000C) +#define WERR_INVALID_DATA W_ERROR(0x0000000D) +#define WERR_OUTOFMEMORY W_ERROR(0x0000000E) +#define WERR_INVALID_DRIVE W_ERROR(0x0000000F) +#define WERR_CURRENT_DIRECTORY W_ERROR(0x00000010) +#define WERR_NOT_SAME_DEVICE W_ERROR(0x00000011) +#define WERR_NO_MORE_FILES W_ERROR(0x00000012) +#define WERR_WRITE_PROTECT W_ERROR(0x00000013) +#define WERR_BAD_UNIT W_ERROR(0x00000014) +#define WERR_NOT_READY W_ERROR(0x00000015) +#define WERR_BAD_COMMAND W_ERROR(0x00000016) +#define WERR_CRC W_ERROR(0x00000017) +#define WERR_BAD_LENGTH W_ERROR(0x00000018) +#define WERR_SEEK W_ERROR(0x00000019) +#define WERR_NOT_DOS_DISK W_ERROR(0x0000001A) +#define WERR_SECTOR_NOT_FOUND W_ERROR(0x0000001B) +#define WERR_OUT_OF_PAPER W_ERROR(0x0000001C) +#define WERR_WRITE_FAULT W_ERROR(0x0000001D) +#define WERR_READ_FAULT W_ERROR(0x0000001E) +#define WERR_GEN_FAILURE W_ERROR(0x0000001F) +#define WERR_SHARING_VIOLATION W_ERROR(0x00000020) +#define WERR_LOCK_VIOLATION W_ERROR(0x00000021) +#define WERR_WRONG_DISK W_ERROR(0x00000022) +#define WERR_SHARING_BUFFER_EXCEEDED W_ERROR(0x00000024) +#define WERR_HANDLE_EOF W_ERROR(0x00000026) +#define WERR_HANDLE_DISK_FULL W_ERROR(0x00000027) +#define WERR_REM_NOT_LIST W_ERROR(0x00000033) +#define WERR_NETWORK_BUSY W_ERROR(0x00000036) +#define WERR_DEV_NOT_EXIST W_ERROR(0x00000037) +#define WERR_TOO_MANY_CMDS W_ERROR(0x00000038) +#define WERR_ADAP_HDW_ERR W_ERROR(0x00000039) +#define WERR_BAD_REM_ADAP W_ERROR(0x0000003C) +#define WERR_PRINT_CANCELLED W_ERROR(0x0000003F) +#define WERR_NETNAME_DELETED W_ERROR(0x00000040) +#define WERR_NETWORK_ACCESS_DENIED W_ERROR(0x00000041) +#define WERR_BAD_DEV_TYPE W_ERROR(0x00000042) +#define WERR_BAD_NET_NAME W_ERROR(0x00000043) +#define WERR_TOO_MANY_NAMES W_ERROR(0x00000044) +#define WERR_TOO_MANY_SESS W_ERROR(0x00000045) +#define WERR_SHARING_PAUSED W_ERROR(0x00000046) +#define WERR_REQ_NOT_ACCEP W_ERROR(0x00000047) +#define WERR_REDIR_PAUSED W_ERROR(0x00000048) +#define WERR_CANNOT_MAKE W_ERROR(0x00000052) +#define WERR_FAIL_I24 W_ERROR(0x00000053) +#define WERR_OUT_OF_STRUCTURES W_ERROR(0x00000054) +#define WERR_ALREADY_ASSIGNED W_ERROR(0x00000055) +#define WERR_INVALID_PASSWORD W_ERROR(0x00000056) +#define WERR_INVALID_PARAMETER W_ERROR(0x00000057) +#define WERR_NET_WRITE_FAULT W_ERROR(0x00000058) +#define WERR_NO_PROC_SLOTS W_ERROR(0x00000059) +#define WERR_TOO_MANY_SEMAPHORES W_ERROR(0x00000064) +#define WERR_EXCL_SEM_ALREADY_OWNED W_ERROR(0x00000065) +#define WERR_SEM_IS_SET W_ERROR(0x00000066) +#define WERR_TOO_MANY_SEM_REQUESTS W_ERROR(0x00000067) +#define WERR_INVALID_AT_INTERRUPT_TIME W_ERROR(0x00000068) +#define WERR_SEM_OWNER_DIED W_ERROR(0x00000069) +#define WERR_SEM_USER_LIMIT W_ERROR(0x0000006A) +#define WERR_DISK_CHANGE W_ERROR(0x0000006B) +#define WERR_DRIVE_LOCKED W_ERROR(0x0000006C) +#define WERR_BROKEN_PIPE W_ERROR(0x0000006D) +#define WERR_OPEN_FAILED W_ERROR(0x0000006E) +#define WERR_BUFFER_OVERFLOW W_ERROR(0x0000006F) +#define WERR_DISK_FULL W_ERROR(0x00000070) +#define WERR_NO_MORE_SEARCH_HANDLES W_ERROR(0x00000071) +#define WERR_INVALID_TARGET_HANDLE W_ERROR(0x00000072) +#define WERR_INVALID_CATEGORY W_ERROR(0x00000075) +#define WERR_INVALID_VERIFY_SWITCH W_ERROR(0x00000076) +#define WERR_BAD_DRIVER_LEVEL W_ERROR(0x00000077) +#define WERR_INVALID_LEVEL W_ERROR(0x0000007C) +#define WERR_NO_VOLUME_LABEL W_ERROR(0x0000007D) +#define WERR_MOD_NOT_FOUND W_ERROR(0x0000007E) +#define WERR_PROC_NOT_FOUND W_ERROR(0x0000007F) +#define WERR_WAIT_NO_CHILDREN W_ERROR(0x00000080) +#define WERR_CHILD_NOT_COMPLETE W_ERROR(0x00000081) +#define WERR_DIRECT_ACCESS_HANDLE W_ERROR(0x00000082) +#define WERR_NEGATIVE_SEEK W_ERROR(0x00000083) +#define WERR_SEEK_ON_DEVICE W_ERROR(0x00000084) +#define WERR_NOT_SUBSTED W_ERROR(0x00000089) +#define WERR_JOIN_TO_JOIN W_ERROR(0x0000008A) +#define WERR_SUBST_TO_SUBST W_ERROR(0x0000008B) +#define WERR_JOIN_TO_SUBST W_ERROR(0x0000008C) +#define WERR_SAME_DRIVE W_ERROR(0x0000008F) +#define WERR_DIR_NOT_ROOT W_ERROR(0x00000090) +#define WERR_DIR_NOT_EMPTY W_ERROR(0x00000091) +#define WERR_IS_SUBST_PATH W_ERROR(0x00000092) +#define WERR_IS_JOIN_PATH W_ERROR(0x00000093) +#define WERR_PATH_BUSY W_ERROR(0x00000094) +#define WERR_IS_SUBST_TARGET W_ERROR(0x00000095) +#define WERR_SYSTEM_TRACE W_ERROR(0x00000096) +#define WERR_INVALID_EVENT_COUNT W_ERROR(0x00000097) +#define WERR_TOO_MANY_MUXWAITERS W_ERROR(0x00000098) +#define WERR_INVALID_LIST_FORMAT W_ERROR(0x00000099) +#define WERR_LABEL_TOO_LONG W_ERROR(0x0000009A) +#define WERR_TOO_MANY_TCBS W_ERROR(0x0000009B) +#define WERR_SIGNAL_REFUSED W_ERROR(0x0000009C) +#define WERR_DISCARDED W_ERROR(0x0000009D) +#define WERR_NOT_LOCKED W_ERROR(0x0000009E) +#define WERR_BAD_THREADID_ADDR W_ERROR(0x0000009F) +#define WERR_BAD_ARGUMENTS W_ERROR(0x000000A0) +#define WERR_BAD_PATHNAME W_ERROR(0x000000A1) +#define WERR_SIGNAL_PENDING W_ERROR(0x000000A2) +#define WERR_MAX_THRDS_REACHED W_ERROR(0x000000A4) +#define WERR_LOCK_FAILED W_ERROR(0x000000A7) +#define WERR_BUSY W_ERROR(0x000000AA) +#define WERR_CANCEL_VIOLATION W_ERROR(0x000000AD) +#define WERR_ATOMIC_LOCKS_NOT_SUPPORTED W_ERROR(0x000000AE) +#define WERR_INVALID_SEGMENT_NUMBER W_ERROR(0x000000B4) +#define WERR_INVALID_ORDINAL W_ERROR(0x000000B6) +#define WERR_INVALID_FLAG_NUMBER W_ERROR(0x000000BA) +#define WERR_SEM_NOT_FOUND W_ERROR(0x000000BB) +#define WERR_INVALID_STARTING_CODESEG W_ERROR(0x000000BC) +#define WERR_INVALID_STACKSEG W_ERROR(0x000000BD) +#define WERR_INVALID_MODULETYPE W_ERROR(0x000000BE) +#define WERR_INVALID_EXE_SIGNATURE W_ERROR(0x000000BF) +#define WERR_EXE_MARKED_INVALID W_ERROR(0x000000C0) +#define WERR_BAD_EXE_FORMAT W_ERROR(0x000000C1) +#define WERR_ITERATED_DATA_EXCEEDS_64K W_ERROR(0x000000C2) +#define WERR_INVALID_MINALLOCSIZE W_ERROR(0x000000C3) +#define WERR_DYNLINK_FROM_INVALID_RING W_ERROR(0x000000C4) +#define WERR_IOPL_NOT_ENABLED W_ERROR(0x000000C5) +#define WERR_INVALID_SEGDPL W_ERROR(0x000000C6) +#define WERR_AUTODATASEG_EXCEEDS_64K W_ERROR(0x000000C7) +#define WERR_RING2SEG_MUST_BE_MOVABLE W_ERROR(0x000000C8) +#define WERR_RELOC_CHAIN_XEEDS_SEGLIM W_ERROR(0x000000C9) +#define WERR_INFLOOP_IN_RELOC_CHAIN W_ERROR(0x000000CA) +#define WERR_ENVVAR_NOT_FOUND W_ERROR(0x000000CB) +#define WERR_NO_SIGNAL_SENT W_ERROR(0x000000CD) +#define WERR_FILENAME_EXCED_RANGE W_ERROR(0x000000CE) +#define WERR_RING2_STACK_IN_USE W_ERROR(0x000000CF) +#define WERR_META_EXPANSION_TOO_LONG W_ERROR(0x000000D0) +#define WERR_INVALID_SIGNAL_NUMBER W_ERROR(0x000000D1) +#define WERR_THREAD_1_INACTIVE W_ERROR(0x000000D2) +#define WERR_LOCKED W_ERROR(0x000000D4) +#define WERR_TOO_MANY_MODULES W_ERROR(0x000000D6) +#define WERR_NESTING_NOT_ALLOWED W_ERROR(0x000000D7) +#define WERR_EXE_MACHINE_TYPE_MISMATCH W_ERROR(0x000000D8) +#define WERR_EXE_CANNOT_MODIFY_SIGNED_BINARY W_ERROR(0x000000D9) +#define WERR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY W_ERROR(0x000000DA) +#define WERR_FILE_CHECKED_OUT W_ERROR(0x000000DC) +#define WERR_CHECKOUT_REQUIRED W_ERROR(0x000000DD) +#define WERR_BAD_FILE_TYPE W_ERROR(0x000000DE) +#define WERR_FILE_TOO_LARGE W_ERROR(0x000000DF) +#define WERR_FORMS_AUTH_REQUIRED W_ERROR(0x000000E0) +#define WERR_VIRUS_INFECTED W_ERROR(0x000000E1) +#define WERR_VIRUS_DELETED W_ERROR(0x000000E2) +#define WERR_PIPE_LOCAL W_ERROR(0x000000E5) +#define WERR_BAD_PIPE W_ERROR(0x000000E6) +#define WERR_PIPE_BUSY W_ERROR(0x000000E7) +#define WERR_NO_DATA W_ERROR(0x000000E8) +#define WERR_PIPE_NOT_CONNECTED W_ERROR(0x000000E9) +#define WERR_VC_DISCONNECTED W_ERROR(0x000000F0) +#define WERR_INVALID_EA_NAME W_ERROR(0x000000FE) +#define WERR_EA_LIST_INCONSISTENT W_ERROR(0x000000FF) +#define WERR_WAIT_TIMEOUT W_ERROR(0x00000102) +#define WERR_CANNOT_COPY W_ERROR(0x0000010A) +#define WERR_DIRECTORY W_ERROR(0x0000010B) +#define WERR_EAS_DIDNT_FIT W_ERROR(0x00000113) +#define WERR_EA_FILE_CORRUPT W_ERROR(0x00000114) +#define WERR_EA_TABLE_FULL W_ERROR(0x00000115) +#define WERR_INVALID_EA_HANDLE W_ERROR(0x00000116) +#define WERR_EAS_NOT_SUPPORTED W_ERROR(0x0000011A) +#define WERR_NOT_OWNER W_ERROR(0x00000120) +#define WERR_TOO_MANY_POSTS W_ERROR(0x0000012A) +#define WERR_PARTIAL_COPY W_ERROR(0x0000012B) +#define WERR_OPLOCK_NOT_GRANTED W_ERROR(0x0000012C) +#define WERR_INVALID_OPLOCK_PROTOCOL W_ERROR(0x0000012D) +#define WERR_DISK_TOO_FRAGMENTED W_ERROR(0x0000012E) +#define WERR_DELETE_PENDING W_ERROR(0x0000012F) +#define WERR_MR_MID_NOT_FOUND W_ERROR(0x0000013D) +#define WERR_SCOPE_NOT_FOUND W_ERROR(0x0000013E) +#define WERR_FAIL_NOACTION_REBOOT W_ERROR(0x0000015E) +#define WERR_FAIL_SHUTDOWN W_ERROR(0x0000015F) +#define WERR_FAIL_RESTART W_ERROR(0x00000160) +#define WERR_MAX_SESSIONS_REACHED W_ERROR(0x00000161) +#define WERR_THREAD_MODE_ALREADY_BACKGROUND W_ERROR(0x00000190) +#define WERR_THREAD_MODE_NOT_BACKGROUND W_ERROR(0x00000191) +#define WERR_PROCESS_MODE_ALREADY_BACKGROUND W_ERROR(0x00000192) +#define WERR_PROCESS_MODE_NOT_BACKGROUND W_ERROR(0x00000193) +#define WERR_INVALID_ADDRESS W_ERROR(0x000001E7) +#define WERR_USER_PROFILE_LOAD W_ERROR(0x000001F4) +#define WERR_ARITHMETIC_OVERFLOW W_ERROR(0x00000216) +#define WERR_PIPE_CONNECTED W_ERROR(0x00000217) +#define WERR_PIPE_LISTENING W_ERROR(0x00000218) +#define WERR_VERIFIER_STOP W_ERROR(0x00000219) +#define WERR_ABIOS_ERROR W_ERROR(0x0000021A) +#define WERR_WX86_WARNING W_ERROR(0x0000021B) +#define WERR_WX86_ERROR W_ERROR(0x0000021C) +#define WERR_TIMER_NOT_CANCELED W_ERROR(0x0000021D) +#define WERR_UNWIND W_ERROR(0x0000021E) +#define WERR_BAD_STACK W_ERROR(0x0000021F) +#define WERR_INVALID_UNWIND_TARGET W_ERROR(0x00000220) +#define WERR_INVALID_PORT_ATTRIBUTES W_ERROR(0x00000221) +#define WERR_PORT_MESSAGE_TOO_LONG W_ERROR(0x00000222) +#define WERR_INVALID_QUOTA_LOWER W_ERROR(0x00000223) +#define WERR_DEVICE_ALREADY_ATTACHED W_ERROR(0x00000224) +#define WERR_INSTRUCTION_MISALIGNMENT W_ERROR(0x00000225) +#define WERR_PROFILING_NOT_STARTED W_ERROR(0x00000226) +#define WERR_PROFILING_NOT_STOPPED W_ERROR(0x00000227) +#define WERR_COULD_NOT_INTERPRET W_ERROR(0x00000228) +#define WERR_PROFILING_AT_LIMIT W_ERROR(0x00000229) +#define WERR_CANT_WAIT W_ERROR(0x0000022A) +#define WERR_CANT_TERMINATE_SELF W_ERROR(0x0000022B) +#define WERR_UNEXPECTED_MM_CREATE_ERR W_ERROR(0x0000022C) +#define WERR_UNEXPECTED_MM_MAP_ERROR W_ERROR(0x0000022D) +#define WERR_UNEXPECTED_MM_EXTEND_ERR W_ERROR(0x0000022E) +#define WERR_BAD_FUNCTION_TABLE W_ERROR(0x0000022F) +#define WERR_NO_GUID_TRANSLATION W_ERROR(0x00000230) +#define WERR_INVALID_LDT_SIZE W_ERROR(0x00000231) +#define WERR_INVALID_LDT_OFFSET W_ERROR(0x00000233) +#define WERR_INVALID_LDT_DESCRIPTOR W_ERROR(0x00000234) +#define WERR_TOO_MANY_THREADS W_ERROR(0x00000235) +#define WERR_THREAD_NOT_IN_PROCESS W_ERROR(0x00000236) +#define WERR_PAGEFILE_QUOTA_EXCEEDED W_ERROR(0x00000237) +#define WERR_LOGON_SERVER_CONFLICT W_ERROR(0x00000238) +#define WERR_SYNCHRONIZATION_REQUIRED W_ERROR(0x00000239) +#define WERR_NET_OPEN_FAILED W_ERROR(0x0000023A) +#define WERR_IO_PRIVILEGE_FAILED W_ERROR(0x0000023B) +#define WERR_CONTROL_C_EXIT W_ERROR(0x0000023C) +#define WERR_MISSING_SYSTEMFILE W_ERROR(0x0000023D) +#define WERR_UNHANDLED_EXCEPTION W_ERROR(0x0000023E) +#define WERR_APP_INIT_FAILURE W_ERROR(0x0000023F) +#define WERR_PAGEFILE_CREATE_FAILED W_ERROR(0x00000240) +#define WERR_INVALID_IMAGE_HASH W_ERROR(0x00000241) +#define WERR_NO_PAGEFILE W_ERROR(0x00000242) +#define WERR_ILLEGAL_FLOAT_CONTEXT W_ERROR(0x00000243) +#define WERR_NO_EVENT_PAIR W_ERROR(0x00000244) +#define WERR_DOMAIN_CTRLR_CONFIG_ERROR W_ERROR(0x00000245) +#define WERR_ILLEGAL_CHARACTER W_ERROR(0x00000246) +#define WERR_UNDEFINED_CHARACTER W_ERROR(0x00000247) +#define WERR_FLOPPY_VOLUME W_ERROR(0x00000248) +#define WERR_BIOS_FAILED_TO_CONNECT_INTERRUPT W_ERROR(0x00000249) +#define WERR_BACKUP_CONTROLLER W_ERROR(0x0000024A) +#define WERR_MUTANT_LIMIT_EXCEEDED W_ERROR(0x0000024B) +#define WERR_FS_DRIVER_REQUIRED W_ERROR(0x0000024C) +#define WERR_CANNOT_LOAD_REGISTRY_FILE W_ERROR(0x0000024D) +#define WERR_DEBUG_ATTACH_FAILED W_ERROR(0x0000024E) +#define WERR_SYSTEM_PROCESS_TERMINATED W_ERROR(0x0000024F) +#define WERR_DATA_NOT_ACCEPTED W_ERROR(0x00000250) +#define WERR_VDM_HARD_ERROR W_ERROR(0x00000251) +#define WERR_DRIVER_CANCEL_TIMEOUT W_ERROR(0x00000252) +#define WERR_REPLY_MESSAGE_MISMATCH W_ERROR(0x00000253) +#define WERR_LOST_WRITEBEHIND_DATA W_ERROR(0x00000254) +#define WERR_CLIENT_SERVER_PARAMETERS_INVALID W_ERROR(0x00000255) +#define WERR_NOT_TINY_STREAM W_ERROR(0x00000256) +#define WERR_STACK_OVERFLOW_READ W_ERROR(0x00000257) +#define WERR_CONVERT_TO_LARGE W_ERROR(0x00000258) +#define WERR_FOUND_OUT_OF_SCOPE W_ERROR(0x00000259) +#define WERR_ALLOCATE_BUCKET W_ERROR(0x0000025A) +#define WERR_MARSHALL_OVERFLOW W_ERROR(0x0000025B) +#define WERR_INVALID_VARIANT W_ERROR(0x0000025C) +#define WERR_BAD_COMPRESSION_BUFFER W_ERROR(0x0000025D) +#define WERR_AUDIT_FAILED W_ERROR(0x0000025E) +#define WERR_TIMER_RESOLUTION_NOT_SET W_ERROR(0x0000025F) +#define WERR_INSUFFICIENT_LOGON_INFO W_ERROR(0x00000260) +#define WERR_BAD_DLL_ENTRYPOINT W_ERROR(0x00000261) +#define WERR_BAD_SERVICE_ENTRYPOINT W_ERROR(0x00000262) +#define WERR_IP_ADDRESS_CONFLICT1 W_ERROR(0x00000263) +#define WERR_IP_ADDRESS_CONFLICT2 W_ERROR(0x00000264) +#define WERR_REGISTRY_QUOTA_LIMIT W_ERROR(0x00000265) +#define WERR_NO_CALLBACK_ACTIVE W_ERROR(0x00000266) +#define WERR_PWD_TOO_SHORT W_ERROR(0x00000267) +#define WERR_PWD_TOO_RECENT W_ERROR(0x00000268) +#define WERR_PWD_HISTORY_CONFLICT W_ERROR(0x00000269) +#define WERR_UNSUPPORTED_COMPRESSION W_ERROR(0x0000026A) +#define WERR_INVALID_HW_PROFILE W_ERROR(0x0000026B) +#define WERR_INVALID_PLUGPLAY_DEVICE_PATH W_ERROR(0x0000026C) +#define WERR_QUOTA_LIST_INCONSISTENT W_ERROR(0x0000026D) +#define WERR_EVALUATION_EXPIRATION W_ERROR(0x0000026E) +#define WERR_ILLEGAL_DLL_RELOCATION W_ERROR(0x0000026F) +#define WERR_DLL_INIT_FAILED_LOGOFF W_ERROR(0x00000270) +#define WERR_VALIDATE_CONTINUE W_ERROR(0x00000271) +#define WERR_NO_MORE_MATCHES W_ERROR(0x00000272) +#define WERR_RANGE_LIST_CONFLICT W_ERROR(0x00000273) +#define WERR_SERVER_SID_MISMATCH W_ERROR(0x00000274) +#define WERR_CANT_ENABLE_DENY_ONLY W_ERROR(0x00000275) +#define WERR_FLOAT_MULTIPLE_FAULTS W_ERROR(0x00000276) +#define WERR_FLOAT_MULTIPLE_TRAPS W_ERROR(0x00000277) +#define WERR_NOINTERFACE W_ERROR(0x00000278) +#define WERR_DRIVER_FAILED_SLEEP W_ERROR(0x00000279) +#define WERR_CORRUPT_SYSTEM_FILE W_ERROR(0x0000027A) +#define WERR_COMMITMENT_MINIMUM W_ERROR(0x0000027B) +#define WERR_PNP_RESTART_ENUMERATION W_ERROR(0x0000027C) +#define WERR_SYSTEM_IMAGE_BAD_SIGNATURE W_ERROR(0x0000027D) +#define WERR_PNP_REBOOT_REQUIRED W_ERROR(0x0000027E) +#define WERR_INSUFFICIENT_POWER W_ERROR(0x0000027F) +#define WERR_MULTIPLE_FAULT_VIOLATION W_ERROR(0x00000280) +#define WERR_SYSTEM_SHUTDOWN W_ERROR(0x00000281) +#define WERR_PORT_NOT_SET W_ERROR(0x00000282) +#define WERR_DS_VERSION_CHECK_FAILURE W_ERROR(0x00000283) +#define WERR_RANGE_NOT_FOUND W_ERROR(0x00000284) +#define WERR_NOT_SAFE_MODE_DRIVER W_ERROR(0x00000286) +#define WERR_FAILED_DRIVER_ENTRY W_ERROR(0x00000287) +#define WERR_DEVICE_ENUMERATION_ERROR W_ERROR(0x00000288) +#define WERR_MOUNT_POINT_NOT_RESOLVED W_ERROR(0x00000289) +#define WERR_INVALID_DEVICE_OBJECT_PARAMETER W_ERROR(0x0000028A) +#define WERR_MCA_OCCURED W_ERROR(0x0000028B) +#define WERR_DRIVER_DATABASE_ERROR W_ERROR(0x0000028C) +#define WERR_SYSTEM_HIVE_TOO_LARGE W_ERROR(0x0000028D) +#define WERR_DRIVER_FAILED_PRIOR_UNLOAD W_ERROR(0x0000028E) +#define WERR_VOLSNAP_PREPARE_HIBERNATE W_ERROR(0x0000028F) +#define WERR_HIBERNATION_FAILURE W_ERROR(0x00000290) +#define WERR_FILE_SYSTEM_LIMITATION W_ERROR(0x00000299) +#define WERR_ASSERTION_FAILURE W_ERROR(0x0000029C) +#define WERR_ACPI_ERROR W_ERROR(0x0000029D) +#define WERR_WOW_ASSERTION W_ERROR(0x0000029E) +#define WERR_PNP_BAD_MPS_TABLE W_ERROR(0x0000029F) +#define WERR_PNP_TRANSLATION_FAILED W_ERROR(0x000002A0) +#define WERR_PNP_IRQ_TRANSLATION_FAILED W_ERROR(0x000002A1) +#define WERR_PNP_INVALID_ID W_ERROR(0x000002A2) +#define WERR_WAKE_SYSTEM_DEBUGGER W_ERROR(0x000002A3) +#define WERR_HANDLES_CLOSED W_ERROR(0x000002A4) +#define WERR_EXTRANEOUS_INFORMATION W_ERROR(0x000002A5) +#define WERR_RXACT_COMMIT_NECESSARY W_ERROR(0x000002A6) +#define WERR_MEDIA_CHECK W_ERROR(0x000002A7) +#define WERR_GUID_SUBSTITUTION_MADE W_ERROR(0x000002A8) +#define WERR_STOPPED_ON_SYMLINK W_ERROR(0x000002A9) +#define WERR_LONGJUMP W_ERROR(0x000002AA) +#define WERR_PLUGPLAY_QUERY_VETOED W_ERROR(0x000002AB) +#define WERR_UNWIND_CONSOLIDATE W_ERROR(0x000002AC) +#define WERR_REGISTRY_HIVE_RECOVERED W_ERROR(0x000002AD) +#define WERR_DLL_MIGHT_BE_INSECURE W_ERROR(0x000002AE) +#define WERR_DLL_MIGHT_BE_INCOMPATIBLE W_ERROR(0x000002AF) +#define WERR_DBG_EXCEPTION_NOT_HANDLED W_ERROR(0x000002B0) +#define WERR_DBG_REPLY_LATER W_ERROR(0x000002B1) +#define WERR_DBG_UNABLE_TO_PROVIDE_HANDLE W_ERROR(0x000002B2) +#define WERR_DBG_TERMINATE_THREAD W_ERROR(0x000002B3) +#define WERR_DBG_TERMINATE_PROCESS W_ERROR(0x000002B4) +#define WERR_DBG_CONTROL_C W_ERROR(0x000002B5) +#define WERR_DBG_PRINTEXCEPTION_C W_ERROR(0x000002B6) +#define WERR_DBG_RIPEXCEPTION W_ERROR(0x000002B7) +#define WERR_DBG_CONTROL_BREAK W_ERROR(0x000002B8) +#define WERR_DBG_COMMAND_EXCEPTION W_ERROR(0x000002B9) +#define WERR_OBJECT_NAME_EXISTS W_ERROR(0x000002BA) +#define WERR_THREAD_WAS_SUSPENDED W_ERROR(0x000002BB) +#define WERR_IMAGE_NOT_AT_BASE W_ERROR(0x000002BC) +#define WERR_RXACT_STATE_CREATED W_ERROR(0x000002BD) +#define WERR_SEGMENT_NOTIFICATION W_ERROR(0x000002BE) +#define WERR_BAD_CURRENT_DIRECTORY W_ERROR(0x000002BF) +#define WERR_FT_READ_RECOVERY_FROM_BACKUP W_ERROR(0x000002C0) +#define WERR_FT_WRITE_RECOVERY W_ERROR(0x000002C1) +#define WERR_IMAGE_MACHINE_TYPE_MISMATCH W_ERROR(0x000002C2) +#define WERR_RECEIVE_PARTIAL W_ERROR(0x000002C3) +#define WERR_RECEIVE_EXPEDITED W_ERROR(0x000002C4) +#define WERR_RECEIVE_PARTIAL_EXPEDITED W_ERROR(0x000002C5) +#define WERR_EVENT_DONE W_ERROR(0x000002C6) +#define WERR_EVENT_PENDING W_ERROR(0x000002C7) +#define WERR_CHECKING_FILE_SYSTEM W_ERROR(0x000002C8) +#define WERR_FATAL_APP_EXIT W_ERROR(0x000002C9) +#define WERR_PREDEFINED_HANDLE W_ERROR(0x000002CA) +#define WERR_WAS_UNLOCKED W_ERROR(0x000002CB) +#define WERR_SERVICE_NOTIFICATION W_ERROR(0x000002CC) +#define WERR_WAS_LOCKED W_ERROR(0x000002CD) +#define WERR_LOG_HARD_ERROR W_ERROR(0x000002CE) +#define WERR_ALREADY_WIN32 W_ERROR(0x000002CF) +#define WERR_IMAGE_MACHINE_TYPE_MISMATCH_EXE W_ERROR(0x000002D0) +#define WERR_NO_YIELD_PERFORMED W_ERROR(0x000002D1) +#define WERR_TIMER_RESUME_IGNORED W_ERROR(0x000002D2) +#define WERR_ARBITRATION_UNHANDLED W_ERROR(0x000002D3) +#define WERR_CARDBUS_NOT_SUPPORTED W_ERROR(0x000002D4) +#define WERR_MP_PROCESSOR_MISMATCH W_ERROR(0x000002D5) +#define WERR_HIBERNATED W_ERROR(0x000002D6) +#define WERR_RESUME_HIBERNATION W_ERROR(0x000002D7) +#define WERR_FIRMWARE_UPDATED W_ERROR(0x000002D8) +#define WERR_DRIVERS_LEAKING_LOCKED_PAGES W_ERROR(0x000002D9) +#define WERR_WAKE_SYSTEM W_ERROR(0x000002DA) +#define WERR_WAIT_1 W_ERROR(0x000002DB) +#define WERR_WAIT_2 W_ERROR(0x000002DC) +#define WERR_WAIT_3 W_ERROR(0x000002DD) +#define WERR_WAIT_63 W_ERROR(0x000002DE) +#define WERR_ABANDONED_WAIT_0 W_ERROR(0x000002DF) +#define WERR_ABANDONED_WAIT_63 W_ERROR(0x000002E0) +#define WERR_USER_APC W_ERROR(0x000002E1) +#define WERR_KERNEL_APC W_ERROR(0x000002E2) +#define WERR_ALERTED W_ERROR(0x000002E3) +#define WERR_ELEVATION_REQUIRED W_ERROR(0x000002E4) +#define WERR_REPARSE W_ERROR(0x000002E5) +#define WERR_OPLOCK_BREAK_IN_PROGRESS W_ERROR(0x000002E6) +#define WERR_VOLUME_MOUNTED W_ERROR(0x000002E7) +#define WERR_RXACT_COMMITTED W_ERROR(0x000002E8) +#define WERR_NOTIFY_CLEANUP W_ERROR(0x000002E9) +#define WERR_PRIMARY_TRANSPORT_CONNECT_FAILED W_ERROR(0x000002EA) +#define WERR_PAGE_FAULT_TRANSITION W_ERROR(0x000002EB) +#define WERR_PAGE_FAULT_DEMAND_ZERO W_ERROR(0x000002EC) +#define WERR_PAGE_FAULT_COPY_ON_WRITE W_ERROR(0x000002ED) +#define WERR_PAGE_FAULT_GUARD_PAGE W_ERROR(0x000002EE) +#define WERR_PAGE_FAULT_PAGING_FILE W_ERROR(0x000002EF) +#define WERR_CACHE_PAGE_LOCKED W_ERROR(0x000002F0) +#define WERR_CRASH_DUMP W_ERROR(0x000002F1) +#define WERR_BUFFER_ALL_ZEROS W_ERROR(0x000002F2) +#define WERR_REPARSE_OBJECT W_ERROR(0x000002F3) +#define WERR_RESOURCE_REQUIREMENTS_CHANGED W_ERROR(0x000002F4) +#define WERR_TRANSLATION_COMPLETE W_ERROR(0x000002F5) +#define WERR_NOTHING_TO_TERMINATE W_ERROR(0x000002F6) +#define WERR_PROCESS_NOT_IN_JOB W_ERROR(0x000002F7) +#define WERR_PROCESS_IN_JOB W_ERROR(0x000002F8) +#define WERR_VOLSNAP_HIBERNATE_READY W_ERROR(0x000002F9) +#define WERR_FSFILTER_OP_COMPLETED_SUCCESSFULLY W_ERROR(0x000002FA) +#define WERR_INTERRUPT_VECTOR_ALREADY_CONNECTED W_ERROR(0x000002FB) +#define WERR_INTERRUPT_STILL_CONNECTED W_ERROR(0x000002FC) +#define WERR_WAIT_FOR_OPLOCK W_ERROR(0x000002FD) +#define WERR_DBG_EXCEPTION_HANDLED W_ERROR(0x000002FE) +#define WERR_DBG_CONTINUE W_ERROR(0x000002FF) +#define WERR_CALLBACK_POP_STACK W_ERROR(0x00000300) +#define WERR_COMPRESSION_DISABLED W_ERROR(0x00000301) +#define WERR_CANTFETCHBACKWARDS W_ERROR(0x00000302) +#define WERR_CANTSCROLLBACKWARDS W_ERROR(0x00000303) +#define WERR_ROWSNOTRELEASED W_ERROR(0x00000304) +#define WERR_BAD_ACCESSOR_FLAGS W_ERROR(0x00000305) +#define WERR_ERRORS_ENCOUNTERED W_ERROR(0x00000306) +#define WERR_NOT_CAPABLE W_ERROR(0x00000307) +#define WERR_REQUEST_OUT_OF_SEQUENCE W_ERROR(0x00000308) +#define WERR_VERSION_PARSE_ERROR W_ERROR(0x00000309) +#define WERR_BADSTARTPOSITION W_ERROR(0x0000030A) +#define WERR_MEMORY_HARDWARE W_ERROR(0x0000030B) +#define WERR_DISK_REPAIR_DISABLED W_ERROR(0x0000030C) +#define WERR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE W_ERROR(0x0000030D) +#define WERR_SYSTEM_POWERSTATE_TRANSITION W_ERROR(0x0000030E) +#define WERR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION W_ERROR(0x0000030F) +#define WERR_MCA_EXCEPTION W_ERROR(0x00000310) +#define WERR_ACCESS_AUDIT_BY_POLICY W_ERROR(0x00000311) +#define WERR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY W_ERROR(0x00000312) +#define WERR_ABANDON_HIBERFILE W_ERROR(0x00000313) +#define WERR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED W_ERROR(0x00000314) +#define WERR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR W_ERROR(0x00000315) +#define WERR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR W_ERROR(0x00000316) +#define WERR_EA_ACCESS_DENIED W_ERROR(0x000003E2) +#define WERR_OPERATION_ABORTED W_ERROR(0x000003E3) +#define WERR_IO_INCOMPLETE W_ERROR(0x000003E4) +#define WERR_NOACCESS W_ERROR(0x000003E6) +#define WERR_SWAPERROR W_ERROR(0x000003E7) +#define WERR_STACK_OVERFLOW W_ERROR(0x000003E9) +#define WERR_INVALID_MESSAGE W_ERROR(0x000003EA) +#define WERR_UNRECOGNIZED_VOLUME W_ERROR(0x000003ED) +#define WERR_FILE_INVALID W_ERROR(0x000003EE) +#define WERR_FULLSCREEN_MODE W_ERROR(0x000003EF) +#define WERR_NO_TOKEN W_ERROR(0x000003F0) +#define WERR_BADDB W_ERROR(0x000003F1) +#define WERR_BADKEY W_ERROR(0x000003F2) +#define WERR_CANTOPEN W_ERROR(0x000003F3) +#define WERR_CANTREAD W_ERROR(0x000003F4) +#define WERR_CANTWRITE W_ERROR(0x000003F5) +#define WERR_REGISTRY_RECOVERED W_ERROR(0x000003F6) +#define WERR_REGISTRY_CORRUPT W_ERROR(0x000003F7) +#define WERR_REGISTRY_IO_FAILED W_ERROR(0x000003F8) +#define WERR_NOT_REGISTRY_FILE W_ERROR(0x000003F9) +#define WERR_KEY_DELETED W_ERROR(0x000003FA) +#define WERR_NO_LOG_SPACE W_ERROR(0x000003FB) +#define WERR_KEY_HAS_CHILDREN W_ERROR(0x000003FC) +#define WERR_CHILD_MUST_BE_VOLATILE W_ERROR(0x000003FD) +#define WERR_NOTIFY_ENUM_DIR W_ERROR(0x000003FE) +#define WERR_DEPENDENT_SERVICES_RUNNING W_ERROR(0x0000041B) +#define WERR_SERVICE_REQUEST_TIMEOUT W_ERROR(0x0000041D) +#define WERR_SERVICE_NO_THREAD W_ERROR(0x0000041E) +#define WERR_SERVICE_DATABASE_LOCKED W_ERROR(0x0000041F) +#define WERR_INVALID_SERVICE_ACCOUNT W_ERROR(0x00000421) +#define WERR_CIRCULAR_DEPENDENCY W_ERROR(0x00000423) +#define WERR_SERVICE_DOES_NOT_EXIST W_ERROR(0x00000424) +#define WERR_SERVICE_CANNOT_ACCEPT_CTRL W_ERROR(0x00000425) +#define WERR_SERVICE_NOT_ACTIVE W_ERROR(0x00000426) +#define WERR_FAILED_SERVICE_CONTROLLER_CONNECT W_ERROR(0x00000427) +#define WERR_EXCEPTION_IN_SERVICE W_ERROR(0x00000428) +#define WERR_DATABASE_DOES_NOT_EXIST W_ERROR(0x00000429) +#define WERR_SERVICE_SPECIFIC_ERROR W_ERROR(0x0000042A) +#define WERR_PROCESS_ABORTED W_ERROR(0x0000042B) +#define WERR_SERVICE_DEPENDENCY_FAIL W_ERROR(0x0000042C) +#define WERR_SERVICE_LOGON_FAILED W_ERROR(0x0000042D) +#define WERR_SERVICE_START_HANG W_ERROR(0x0000042E) +#define WERR_INVALID_SERVICE_LOCK W_ERROR(0x0000042F) +#define WERR_ALREADY_RUNNING_LKG W_ERROR(0x00000432) +#define WERR_SERVICE_DEPENDENCY_DELETED W_ERROR(0x00000433) +#define WERR_BOOT_ALREADY_ACCEPTED W_ERROR(0x00000434) +#define WERR_DIFFERENT_SERVICE_ACCOUNT W_ERROR(0x00000437) +#define WERR_CANNOT_DETECT_DRIVER_FAILURE W_ERROR(0x00000438) +#define WERR_CANNOT_DETECT_PROCESS_ABORT W_ERROR(0x00000439) +#define WERR_NO_RECOVERY_PROGRAM W_ERROR(0x0000043A) +#define WERR_SERVICE_NOT_IN_EXE W_ERROR(0x0000043B) +#define WERR_NOT_SAFEBOOT_SERVICE W_ERROR(0x0000043C) +#define WERR_END_OF_MEDIA W_ERROR(0x0000044C) +#define WERR_FILEMARK_DETECTED W_ERROR(0x0000044D) +#define WERR_BEGINNING_OF_MEDIA W_ERROR(0x0000044E) +#define WERR_SETMARK_DETECTED W_ERROR(0x0000044F) +#define WERR_NO_DATA_DETECTED W_ERROR(0x00000450) +#define WERR_PARTITION_FAILURE W_ERROR(0x00000451) +#define WERR_INVALID_BLOCK_LENGTH W_ERROR(0x00000452) +#define WERR_DEVICE_NOT_PARTITIONED W_ERROR(0x00000453) +#define WERR_UNABLE_TO_LOCK_MEDIA W_ERROR(0x00000454) +#define WERR_UNABLE_TO_UNLOAD_MEDIA W_ERROR(0x00000455) +#define WERR_MEDIA_CHANGED W_ERROR(0x00000456) +#define WERR_BUS_RESET W_ERROR(0x00000457) +#define WERR_NO_MEDIA_IN_DRIVE W_ERROR(0x00000458) +#define WERR_NO_UNICODE_TRANSLATION W_ERROR(0x00000459) +#define WERR_DLL_INIT_FAILED W_ERROR(0x0000045A) +#define WERR_SHUTDOWN_IN_PROGRESS W_ERROR(0x0000045B) +#define WERR_IO_DEVICE W_ERROR(0x0000045D) +#define WERR_SERIAL_NO_DEVICE W_ERROR(0x0000045E) +#define WERR_IRQ_BUSY W_ERROR(0x0000045F) +#define WERR_MORE_WRITES W_ERROR(0x00000460) +#define WERR_COUNTER_TIMEOUT W_ERROR(0x00000461) +#define WERR_FLOPPY_ID_MARK_NOT_FOUND W_ERROR(0x00000462) +#define WERR_FLOPPY_WRONG_CYLINDER W_ERROR(0x00000463) +#define WERR_FLOPPY_UNKNOWN_ERROR W_ERROR(0x00000464) +#define WERR_FLOPPY_BAD_REGISTERS W_ERROR(0x00000465) +#define WERR_DISK_RECALIBRATE_FAILED W_ERROR(0x00000466) +#define WERR_DISK_OPERATION_FAILED W_ERROR(0x00000467) +#define WERR_DISK_RESET_FAILED W_ERROR(0x00000468) +#define WERR_EOM_OVERFLOW W_ERROR(0x00000469) +#define WERR_NOT_ENOUGH_SERVER_MEMORY W_ERROR(0x0000046A) +#define WERR_POSSIBLE_DEADLOCK W_ERROR(0x0000046B) +#define WERR_MAPPED_ALIGNMENT W_ERROR(0x0000046C) +#define WERR_SET_POWER_STATE_VETOED W_ERROR(0x00000474) +#define WERR_SET_POWER_STATE_FAILED W_ERROR(0x00000475) +#define WERR_TOO_MANY_LINKS W_ERROR(0x00000476) +#define WERR_OLD_WIN_VERSION W_ERROR(0x0000047E) +#define WERR_APP_WRONG_OS W_ERROR(0x0000047F) +#define WERR_SINGLE_INSTANCE_APP W_ERROR(0x00000480) +#define WERR_RMODE_APP W_ERROR(0x00000481) +#define WERR_INVALID_DLL W_ERROR(0x00000482) +#define WERR_NO_ASSOCIATION W_ERROR(0x00000483) +#define WERR_DDE_FAIL W_ERROR(0x00000484) +#define WERR_DLL_NOT_FOUND W_ERROR(0x00000485) +#define WERR_NO_MORE_USER_HANDLES W_ERROR(0x00000486) +#define WERR_MESSAGE_SYNC_ONLY W_ERROR(0x00000487) +#define WERR_SOURCE_ELEMENT_EMPTY W_ERROR(0x00000488) +#define WERR_DESTINATION_ELEMENT_FULL W_ERROR(0x00000489) +#define WERR_ILLEGAL_ELEMENT_ADDRESS W_ERROR(0x0000048A) +#define WERR_MAGAZINE_NOT_PRESENT W_ERROR(0x0000048B) +#define WERR_DEVICE_REINITIALIZATION_NEEDED W_ERROR(0x0000048C) +#define WERR_DEVICE_REQUIRES_CLEANING W_ERROR(0x0000048D) +#define WERR_DEVICE_DOOR_OPEN W_ERROR(0x0000048E) +#define WERR_NO_MATCH W_ERROR(0x00000491) +#define WERR_SET_NOT_FOUND W_ERROR(0x00000492) +#define WERR_POINT_NOT_FOUND W_ERROR(0x00000493) +#define WERR_NO_TRACKING_SERVICE W_ERROR(0x00000494) +#define WERR_NO_VOLUME_ID W_ERROR(0x00000495) +#define WERR_UNABLE_TO_REMOVE_REPLACED W_ERROR(0x00000497) +#define WERR_UNABLE_TO_MOVE_REPLACEMENT W_ERROR(0x00000498) +#define WERR_UNABLE_TO_MOVE_REPLACEMENT_2 W_ERROR(0x00000499) +#define WERR_JOURNAL_DELETE_IN_PROGRESS W_ERROR(0x0000049A) +#define WERR_JOURNAL_NOT_ACTIVE W_ERROR(0x0000049B) +#define WERR_POTENTIAL_FILE_FOUND W_ERROR(0x0000049C) +#define WERR_JOURNAL_ENTRY_DELETED W_ERROR(0x0000049D) +#define WERR_SHUTDOWN_IS_SCHEDULED W_ERROR(0x000004A6) +#define WERR_SHUTDOWN_USERS_LOGGED_ON W_ERROR(0x000004A7) +#define WERR_BAD_DEVICE W_ERROR(0x000004B0) +#define WERR_CONNECTION_UNAVAIL W_ERROR(0x000004B1) +#define WERR_DEVICE_ALREADY_REMEMBERED W_ERROR(0x000004B2) +#define WERR_NO_NET_OR_BAD_PATH W_ERROR(0x000004B3) +#define WERR_BAD_PROVIDER W_ERROR(0x000004B4) +#define WERR_CANNOT_OPEN_PROFILE W_ERROR(0x000004B5) +#define WERR_BAD_PROFILE W_ERROR(0x000004B6) +#define WERR_NOT_CONTAINER W_ERROR(0x000004B7) +#define WERR_EXTENDED_ERROR W_ERROR(0x000004B8) +#define WERR_INVALID_GROUPNAME W_ERROR(0x000004B9) +#define WERR_INVALID_EVENTNAME W_ERROR(0x000004BB) +#define WERR_INVALID_SERVICENAME W_ERROR(0x000004BD) +#define WERR_INVALID_NETNAME W_ERROR(0x000004BE) +#define WERR_INVALID_SHARENAME W_ERROR(0x000004BF) +#define WERR_INVALID_PASSWORDNAME W_ERROR(0x000004C0) +#define WERR_INVALID_MESSAGENAME W_ERROR(0x000004C1) +#define WERR_INVALID_MESSAGEDEST W_ERROR(0x000004C2) +#define WERR_SESSION_CREDENTIAL_CONFLICT W_ERROR(0x000004C3) +#define WERR_REMOTE_SESSION_LIMIT_EXCEEDED W_ERROR(0x000004C4) +#define WERR_DUP_DOMAINNAME W_ERROR(0x000004C5) +#define WERR_NO_NETWORK W_ERROR(0x000004C6) +#define WERR_CANCELLED W_ERROR(0x000004C7) +#define WERR_USER_MAPPED_FILE W_ERROR(0x000004C8) +#define WERR_CONNECTION_REFUSED W_ERROR(0x000004C9) +#define WERR_GRACEFUL_DISCONNECT W_ERROR(0x000004CA) +#define WERR_ADDRESS_ALREADY_ASSOCIATED W_ERROR(0x000004CB) +#define WERR_ADDRESS_NOT_ASSOCIATED W_ERROR(0x000004CC) +#define WERR_CONNECTION_INVALID W_ERROR(0x000004CD) +#define WERR_CONNECTION_ACTIVE W_ERROR(0x000004CE) +#define WERR_NETWORK_UNREACHABLE W_ERROR(0x000004CF) +#define WERR_HOST_UNREACHABLE W_ERROR(0x000004D0) +#define WERR_PROTOCOL_UNREACHABLE W_ERROR(0x000004D1) +#define WERR_PORT_UNREACHABLE W_ERROR(0x000004D2) +#define WERR_REQUEST_ABORTED W_ERROR(0x000004D3) +#define WERR_CONNECTION_ABORTED W_ERROR(0x000004D4) +#define WERR_RETRY W_ERROR(0x000004D5) +#define WERR_CONNECTION_COUNT_LIMIT W_ERROR(0x000004D6) +#define WERR_LOGIN_TIME_RESTRICTION W_ERROR(0x000004D7) +#define WERR_LOGIN_WKSTA_RESTRICTION W_ERROR(0x000004D8) +#define WERR_INCORRECT_ADDRESS W_ERROR(0x000004D9) +#define WERR_ALREADY_REGISTERED W_ERROR(0x000004DA) +#define WERR_SERVICE_NOT_FOUND W_ERROR(0x000004DB) +#define WERR_NOT_LOGGED_ON W_ERROR(0x000004DD) +#define WERR_CONTINUE W_ERROR(0x000004DE) +#define WERR_ALREADY_INITIALIZED W_ERROR(0x000004DF) +#define WERR_NO_MORE_DEVICES W_ERROR(0x000004E0) +#define WERR_NO_SUCH_SITE W_ERROR(0x000004E1) +#define WERR_DOMAIN_CONTROLLER_EXISTS W_ERROR(0x000004E2) +#define WERR_ONLY_IF_CONNECTED W_ERROR(0x000004E3) +#define WERR_OVERRIDE_NOCHANGES W_ERROR(0x000004E4) +#define WERR_BAD_USER_PROFILE W_ERROR(0x000004E5) +#define WERR_NOT_SUPPORTED_ON_SBS W_ERROR(0x000004E6) +#define WERR_SERVER_SHUTDOWN_IN_PROGRESS W_ERROR(0x000004E7) +#define WERR_HOST_DOWN W_ERROR(0x000004E8) +#define WERR_NON_ACCOUNT_SID W_ERROR(0x000004E9) +#define WERR_NON_DOMAIN_SID W_ERROR(0x000004EA) +#define WERR_APPHELP_BLOCK W_ERROR(0x000004EB) +#define WERR_ACCESS_DISABLED_BY_POLICY W_ERROR(0x000004EC) +#define WERR_REG_NAT_CONSUMPTION W_ERROR(0x000004ED) +#define WERR_CSCSHARE_OFFLINE W_ERROR(0x000004EE) +#define WERR_PKINIT_FAILURE W_ERROR(0x000004EF) +#define WERR_SMARTCARD_SUBSYSTEM_FAILURE W_ERROR(0x000004F0) +#define WERR_DOWNGRADE_DETECTED W_ERROR(0x000004F1) +#define WERR_CALLBACK_SUPPLIED_INVALID_DATA W_ERROR(0x000004F9) +#define WERR_SYNC_FOREGROUND_REFRESH_REQUIRED W_ERROR(0x000004FA) +#define WERR_DRIVER_BLOCKED W_ERROR(0x000004FB) +#define WERR_INVALID_IMPORT_OF_NON_DLL W_ERROR(0x000004FC) +#define WERR_ACCESS_DISABLED_WEBBLADE W_ERROR(0x000004FD) +#define WERR_ACCESS_DISABLED_WEBBLADE_TAMPER W_ERROR(0x000004FE) +#define WERR_RECOVERY_FAILURE W_ERROR(0x000004FF) +#define WERR_ALREADY_FIBER W_ERROR(0x00000500) +#define WERR_ALREADY_THREAD W_ERROR(0x00000501) +#define WERR_STACK_BUFFER_OVERRUN W_ERROR(0x00000502) +#define WERR_PARAMETER_QUOTA_EXCEEDED W_ERROR(0x00000503) +#define WERR_DEBUGGER_INACTIVE W_ERROR(0x00000504) +#define WERR_DELAY_LOAD_FAILED W_ERROR(0x00000505) +#define WERR_VDM_DISALLOWED W_ERROR(0x00000506) +#define WERR_UNIDENTIFIED_ERROR W_ERROR(0x00000507) +#define WERR_BEYOND_VDL W_ERROR(0x00000509) +#define WERR_INCOMPATIBLE_SERVICE_SID_TYPE W_ERROR(0x0000050A) +#define WERR_DRIVER_PROCESS_TERMINATED W_ERROR(0x0000050B) +#define WERR_IMPLEMENTATION_LIMIT W_ERROR(0x0000050C) +#define WERR_PROCESS_IS_PROTECTED W_ERROR(0x0000050D) +#define WERR_SERVICE_NOTIFY_CLIENT_LAGGING W_ERROR(0x0000050E) +#define WERR_DISK_QUOTA_EXCEEDED W_ERROR(0x0000050F) +#define WERR_CONTENT_BLOCKED W_ERROR(0x00000510) +#define WERR_INCOMPATIBLE_SERVICE_PRIVILEGE W_ERROR(0x00000511) +#define WERR_INVALID_LABEL W_ERROR(0x00000513) +#define WERR_NOT_ALL_ASSIGNED W_ERROR(0x00000514) +#define WERR_SOME_NOT_MAPPED W_ERROR(0x00000515) +#define WERR_NO_QUOTAS_FOR_ACCOUNT W_ERROR(0x00000516) +#define WERR_LOCAL_USER_SESSION_KEY W_ERROR(0x00000517) +#define WERR_NULL_LM_PASSWORD W_ERROR(0x00000518) +#define WERR_NO_IMPERSONATION_TOKEN W_ERROR(0x0000051D) +#define WERR_CANT_DISABLE_MANDATORY W_ERROR(0x0000051E) +#define WERR_INVALID_ACCOUNT_NAME W_ERROR(0x00000523) +#define WERR_USER_EXISTS W_ERROR(0x00000524) +#define WERR_MEMBER_NOT_IN_GROUP W_ERROR(0x00000529) +#define WERR_LAST_ADMIN W_ERROR(0x0000052A) +#define WERR_ILL_FORMED_PASSWORD W_ERROR(0x0000052C) +#define WERR_ACCOUNT_RESTRICTION W_ERROR(0x0000052F) +#define WERR_INVALID_LOGON_HOURS W_ERROR(0x00000530) +#define WERR_INVALID_WORKSTATION W_ERROR(0x00000531) +#define WERR_PASSWORD_EXPIRED W_ERROR(0x00000532) +#define WERR_ACCOUNT_DISABLED W_ERROR(0x00000533) +#define WERR_TOO_MANY_LUIDS_REQUESTED W_ERROR(0x00000535) +#define WERR_LUIDS_EXHAUSTED W_ERROR(0x00000536) +#define WERR_INVALID_SUB_AUTHORITY W_ERROR(0x00000537) +#define WERR_INVALID_ACL W_ERROR(0x00000538) +#define WERR_INVALID_SID W_ERROR(0x00000539) +#define WERR_INVALID_SECURITY_DESCR W_ERROR(0x0000053A) +#define WERR_BAD_INHERITANCE_ACL W_ERROR(0x0000053C) +#define WERR_SERVER_DISABLED W_ERROR(0x0000053D) +#define WERR_SERVER_NOT_DISABLED W_ERROR(0x0000053E) +#define WERR_INVALID_ID_AUTHORITY W_ERROR(0x0000053F) +#define WERR_ALLOTTED_SPACE_EXCEEDED W_ERROR(0x00000540) +#define WERR_INVALID_GROUP_ATTRIBUTES W_ERROR(0x00000541) +#define WERR_BAD_IMPERSONATION_LEVEL W_ERROR(0x00000542) +#define WERR_CANT_OPEN_ANONYMOUS W_ERROR(0x00000543) +#define WERR_BAD_VALIDATION_CLASS W_ERROR(0x00000544) +#define WERR_BAD_TOKEN_TYPE W_ERROR(0x00000545) +#define WERR_NO_SECURITY_ON_OBJECT W_ERROR(0x00000546) +#define WERR_CANT_ACCESS_DOMAIN_INFO W_ERROR(0x00000547) +#define WERR_INVALID_SERVER_STATE W_ERROR(0x00000548) +#define WERR_DOMAIN_EXISTS W_ERROR(0x0000054C) +#define WERR_DOMAIN_LIMIT_EXCEEDED W_ERROR(0x0000054D) +#define WERR_INTERNAL_DB_CORRUPTION W_ERROR(0x0000054E) +#define WERR_INTERNAL_ERROR W_ERROR(0x0000054F) +#define WERR_GENERIC_NOT_MAPPED W_ERROR(0x00000550) +#define WERR_BAD_DESCRIPTOR_FORMAT W_ERROR(0x00000551) +#define WERR_NOT_LOGON_PROCESS W_ERROR(0x00000552) +#define WERR_LOGON_SESSION_EXISTS W_ERROR(0x00000553) +#define WERR_NO_SUCH_PACKAGE W_ERROR(0x00000554) +#define WERR_BAD_LOGON_SESSION_STATE W_ERROR(0x00000555) +#define WERR_LOGON_SESSION_COLLISION W_ERROR(0x00000556) +#define WERR_INVALID_LOGON_TYPE W_ERROR(0x00000557) +#define WERR_CANNOT_IMPERSONATE W_ERROR(0x00000558) +#define WERR_RXACT_INVALID_STATE W_ERROR(0x00000559) +#define WERR_RXACT_COMMIT_FAILURE W_ERROR(0x0000055A) +#define WERR_SPECIAL_GROUP W_ERROR(0x0000055C) +#define WERR_SPECIAL_USER W_ERROR(0x0000055D) +#define WERR_MEMBERS_PRIMARY_GROUP W_ERROR(0x0000055E) +#define WERR_TOKEN_ALREADY_IN_USE W_ERROR(0x0000055F) +#define WERR_MEMBER_NOT_IN_ALIAS W_ERROR(0x00000561) +#define WERR_LOGON_NOT_GRANTED W_ERROR(0x00000564) +#define WERR_TOO_MANY_SECRETS W_ERROR(0x00000565) +#define WERR_SECRET_TOO_LONG W_ERROR(0x00000566) +#define WERR_INTERNAL_DB_ERROR W_ERROR(0x00000567) +#define WERR_TOO_MANY_CONTEXT_IDS W_ERROR(0x00000568) +#define WERR_LOGON_TYPE_NOT_GRANTED W_ERROR(0x00000569) +#define WERR_NT_CROSS_ENCRYPTION_REQUIRED W_ERROR(0x0000056A) +#define WERR_NO_SUCH_MEMBER W_ERROR(0x0000056B) +#define WERR_INVALID_MEMBER W_ERROR(0x0000056C) +#define WERR_TOO_MANY_SIDS W_ERROR(0x0000056D) +#define WERR_LM_CROSS_ENCRYPTION_REQUIRED W_ERROR(0x0000056E) +#define WERR_NO_INHERITANCE W_ERROR(0x0000056F) +#define WERR_FILE_CORRUPT W_ERROR(0x00000570) +#define WERR_DISK_CORRUPT W_ERROR(0x00000571) +#define WERR_NO_USER_SESSION_KEY W_ERROR(0x00000572) +#define WERR_LICENSE_QUOTA_EXCEEDED W_ERROR(0x00000573) +#define WERR_WRONG_TARGET_NAME W_ERROR(0x00000574) +#define WERR_MUTUAL_AUTH_FAILED W_ERROR(0x00000575) +#define WERR_CURRENT_DOMAIN_NOT_ALLOWED W_ERROR(0x00000577) +#define WERR_INVALID_WINDOW_HANDLE W_ERROR(0x00000578) +#define WERR_INVALID_MENU_HANDLE W_ERROR(0x00000579) +#define WERR_INVALID_CURSOR_HANDLE W_ERROR(0x0000057A) +#define WERR_INVALID_ACCEL_HANDLE W_ERROR(0x0000057B) +#define WERR_INVALID_HOOK_HANDLE W_ERROR(0x0000057C) +#define WERR_INVALID_DWP_HANDLE W_ERROR(0x0000057D) +#define WERR_TLW_WITH_WSCHILD W_ERROR(0x0000057E) +#define WERR_CANNOT_FIND_WND_CLASS W_ERROR(0x0000057F) +#define WERR_WINDOW_OF_OTHER_THREAD W_ERROR(0x00000580) +#define WERR_HOTKEY_ALREADY_REGISTERED W_ERROR(0x00000581) +#define WERR_CLASS_ALREADY_EXISTS W_ERROR(0x00000582) +#define WERR_CLASS_DOES_NOT_EXIST W_ERROR(0x00000583) +#define WERR_CLASS_HAS_WINDOWS W_ERROR(0x00000584) +#define WERR_INVALID_INDEX W_ERROR(0x00000585) +#define WERR_INVALID_ICON_HANDLE W_ERROR(0x00000586) +#define WERR_PRIVATE_DIALOG_INDEX W_ERROR(0x00000587) +#define WERR_LISTBOX_ID_NOT_FOUND W_ERROR(0x00000588) +#define WERR_NO_WILDCARD_CHARACTERS W_ERROR(0x00000589) +#define WERR_CLIPBOARD_NOT_OPEN W_ERROR(0x0000058A) +#define WERR_HOTKEY_NOT_REGISTERED W_ERROR(0x0000058B) +#define WERR_WINDOW_NOT_DIALOG W_ERROR(0x0000058C) +#define WERR_CONTROL_ID_NOT_FOUND W_ERROR(0x0000058D) +#define WERR_INVALID_COMBOBOX_MESSAGE W_ERROR(0x0000058E) +#define WERR_WINDOW_NOT_COMBOBOX W_ERROR(0x0000058F) +#define WERR_INVALID_EDIT_HEIGHT W_ERROR(0x00000590) +#define WERR_DC_NOT_FOUND W_ERROR(0x00000591) +#define WERR_INVALID_HOOK_FILTER W_ERROR(0x00000592) +#define WERR_INVALID_FILTER_PROC W_ERROR(0x00000593) +#define WERR_HOOK_NEEDS_HMOD W_ERROR(0x00000594) +#define WERR_GLOBAL_ONLY_HOOK W_ERROR(0x00000595) +#define WERR_JOURNAL_HOOK_SET W_ERROR(0x00000596) +#define WERR_HOOK_NOT_INSTALLED W_ERROR(0x00000597) +#define WERR_INVALID_LB_MESSAGE W_ERROR(0x00000598) +#define WERR_SETCOUNT_ON_BAD_LB W_ERROR(0x00000599) +#define WERR_LB_WITHOUT_TABSTOPS W_ERROR(0x0000059A) +#define WERR_DESTROY_OBJECT_OF_OTHER_THREAD W_ERROR(0x0000059B) +#define WERR_CHILD_WINDOW_MENU W_ERROR(0x0000059C) +#define WERR_NO_SYSTEM_MENU W_ERROR(0x0000059D) +#define WERR_INVALID_MSGBOX_STYLE W_ERROR(0x0000059E) +#define WERR_INVALID_SPI_VALUE W_ERROR(0x0000059F) +#define WERR_SCREEN_ALREADY_LOCKED W_ERROR(0x000005A0) +#define WERR_HWNDS_HAVE_DIFF_PARENT W_ERROR(0x000005A1) +#define WERR_NOT_CHILD_WINDOW W_ERROR(0x000005A2) +#define WERR_INVALID_GW_COMMAND W_ERROR(0x000005A3) +#define WERR_INVALID_THREAD_ID W_ERROR(0x000005A4) +#define WERR_NON_MDICHILD_WINDOW W_ERROR(0x000005A5) +#define WERR_POPUP_ALREADY_ACTIVE W_ERROR(0x000005A6) +#define WERR_NO_SCROLLBARS W_ERROR(0x000005A7) +#define WERR_INVALID_SCROLLBAR_RANGE W_ERROR(0x000005A8) +#define WERR_INVALID_SHOWWIN_COMMAND W_ERROR(0x000005A9) +#define WERR_NONPAGED_SYSTEM_RESOURCES W_ERROR(0x000005AB) +#define WERR_PAGED_SYSTEM_RESOURCES W_ERROR(0x000005AC) +#define WERR_WORKING_SET_QUOTA W_ERROR(0x000005AD) +#define WERR_PAGEFILE_QUOTA W_ERROR(0x000005AE) +#define WERR_COMMITMENT_LIMIT W_ERROR(0x000005AF) +#define WERR_MENU_ITEM_NOT_FOUND W_ERROR(0x000005B0) +#define WERR_INVALID_KEYBOARD_HANDLE W_ERROR(0x000005B1) +#define WERR_HOOK_TYPE_NOT_ALLOWED W_ERROR(0x000005B2) +#define WERR_REQUIRES_INTERACTIVE_WINDOWSTATION W_ERROR(0x000005B3) +#define WERR_TIMEOUT W_ERROR(0x000005B4) +#define WERR_INVALID_MONITOR_HANDLE W_ERROR(0x000005B5) +#define WERR_INCORRECT_SIZE W_ERROR(0x000005B6) +#define WERR_SYMLINK_CLASS_DISABLED W_ERROR(0x000005B7) +#define WERR_SYMLINK_NOT_SUPPORTED W_ERROR(0x000005B8) +#define WERR_EVENTLOG_CANT_START W_ERROR(0x000005DD) +#define WERR_LOG_FILE_FULL W_ERROR(0x000005DE) +#define WERR_EVENTLOG_FILE_CHANGED W_ERROR(0x000005DF) +#define WERR_INVALID_TASK_NAME W_ERROR(0x0000060E) +#define WERR_INVALID_TASK_INDEX W_ERROR(0x0000060F) +#define WERR_THREAD_ALREADY_IN_TASK W_ERROR(0x00000610) +#define WERR_INSTALL_SERVICE_FAILURE W_ERROR(0x00000641) +#define WERR_INSTALL_USEREXIT W_ERROR(0x00000642) +#define WERR_INSTALL_FAILURE W_ERROR(0x00000643) +#define WERR_INSTALL_SUSPEND W_ERROR(0x00000644) +#define WERR_UNKNOWN_PRODUCT W_ERROR(0x00000645) +#define WERR_UNKNOWN_FEATURE W_ERROR(0x00000646) +#define WERR_UNKNOWN_COMPONENT W_ERROR(0x00000647) +#define WERR_UNKNOWN_PROPERTY W_ERROR(0x00000648) +#define WERR_INVALID_HANDLE_STATE W_ERROR(0x00000649) +#define WERR_BAD_CONFIGURATION W_ERROR(0x0000064A) +#define WERR_INDEX_ABSENT W_ERROR(0x0000064B) +#define WERR_INSTALL_SOURCE_ABSENT W_ERROR(0x0000064C) +#define WERR_INSTALL_PACKAGE_VERSION W_ERROR(0x0000064D) +#define WERR_PRODUCT_UNINSTALLED W_ERROR(0x0000064E) +#define WERR_BAD_QUERY_SYNTAX W_ERROR(0x0000064F) +#define WERR_INVALID_FIELD W_ERROR(0x00000650) +#define WERR_DEVICE_REMOVED W_ERROR(0x00000651) +#define WERR_INSTALL_ALREADY_RUNNING W_ERROR(0x00000652) +#define WERR_INSTALL_PACKAGE_OPEN_FAILED W_ERROR(0x00000653) +#define WERR_INSTALL_PACKAGE_INVALID W_ERROR(0x00000654) +#define WERR_INSTALL_UI_FAILURE W_ERROR(0x00000655) +#define WERR_INSTALL_LOG_FAILURE W_ERROR(0x00000656) +#define WERR_INSTALL_LANGUAGE_UNSUPPORTED W_ERROR(0x00000657) +#define WERR_INSTALL_TRANSFORM_FAILURE W_ERROR(0x00000658) +#define WERR_INSTALL_PACKAGE_REJECTED W_ERROR(0x00000659) +#define WERR_FUNCTION_NOT_CALLED W_ERROR(0x0000065A) +#define WERR_FUNCTION_FAILED W_ERROR(0x0000065B) +#define WERR_INVALID_TABLE W_ERROR(0x0000065C) +#define WERR_DATATYPE_MISMATCH W_ERROR(0x0000065D) +#define WERR_UNSUPPORTED_TYPE W_ERROR(0x0000065E) +#define WERR_CREATE_FAILED W_ERROR(0x0000065F) +#define WERR_INSTALL_TEMP_UNWRITABLE W_ERROR(0x00000660) +#define WERR_INSTALL_PLATFORM_UNSUPPORTED W_ERROR(0x00000661) +#define WERR_INSTALL_NOTUSED W_ERROR(0x00000662) +#define WERR_PATCH_PACKAGE_OPEN_FAILED W_ERROR(0x00000663) +#define WERR_PATCH_PACKAGE_INVALID W_ERROR(0x00000664) +#define WERR_PATCH_PACKAGE_UNSUPPORTED W_ERROR(0x00000665) +#define WERR_PRODUCT_VERSION W_ERROR(0x00000666) +#define WERR_INVALID_COMMAND_LINE W_ERROR(0x00000667) +#define WERR_INSTALL_REMOTE_DISALLOWED W_ERROR(0x00000668) +#define WERR_SUCCESS_REBOOT_INITIATED W_ERROR(0x00000669) +#define WERR_PATCH_TARGET_NOT_FOUND W_ERROR(0x0000066A) +#define WERR_PATCH_PACKAGE_REJECTED W_ERROR(0x0000066B) +#define WERR_INSTALL_TRANSFORM_REJECTED W_ERROR(0x0000066C) +#define WERR_INSTALL_REMOTE_PROHIBITED W_ERROR(0x0000066D) +#define WERR_PATCH_REMOVAL_UNSUPPORTED W_ERROR(0x0000066E) +#define WERR_UNKNOWN_PATCH W_ERROR(0x0000066F) +#define WERR_PATCH_NO_SEQUENCE W_ERROR(0x00000670) +#define WERR_PATCH_REMOVAL_DISALLOWED W_ERROR(0x00000671) +#define WERR_INVALID_PATCH_XML W_ERROR(0x00000672) +#define WERR_PATCH_MANAGED_ADVERTISED_PRODUCT W_ERROR(0x00000673) +#define WERR_INSTALL_SERVICE_SAFEBOOT W_ERROR(0x00000674) +#define WERR_RPC_S_INVALID_STRING_BINDING W_ERROR(0x000006A4) +#define WERR_RPC_S_WRONG_KIND_OF_BINDING W_ERROR(0x000006A5) +#define WERR_RPC_S_INVALID_BINDING W_ERROR(0x000006A6) +#define WERR_RPC_S_PROTSEQ_NOT_SUPPORTED W_ERROR(0x000006A7) +#define WERR_RPC_S_INVALID_RPC_PROTSEQ W_ERROR(0x000006A8) +#define WERR_RPC_S_INVALID_STRING_UUID W_ERROR(0x000006A9) +#define WERR_RPC_S_INVALID_ENDPOINT_FORMAT W_ERROR(0x000006AA) +#define WERR_RPC_S_INVALID_NET_ADDR W_ERROR(0x000006AB) +#define WERR_RPC_S_NO_ENDPOINT_FOUND W_ERROR(0x000006AC) +#define WERR_RPC_S_INVALID_TIMEOUT W_ERROR(0x000006AD) +#define WERR_RPC_S_OBJECT_NOT_FOUND W_ERROR(0x000006AE) +#define WERR_RPC_S_ALREADY_REGISTERED W_ERROR(0x000006AF) +#define WERR_RPC_S_TYPE_ALREADY_REGISTERED W_ERROR(0x000006B0) +#define WERR_RPC_S_ALREADY_LISTENING W_ERROR(0x000006B1) +#define WERR_RPC_S_NO_PROTSEQS_REGISTERED W_ERROR(0x000006B2) +#define WERR_RPC_S_NOT_LISTENING W_ERROR(0x000006B3) +#define WERR_RPC_S_UNKNOWN_MGR_TYPE W_ERROR(0x000006B4) +#define WERR_RPC_S_UNKNOWN_IF W_ERROR(0x000006B5) +#define WERR_RPC_S_NO_BINDINGS W_ERROR(0x000006B6) +#define WERR_RPC_S_NO_PROTSEQS W_ERROR(0x000006B7) +#define WERR_RPC_S_CANT_CREATE_ENDPOINT W_ERROR(0x000006B8) +#define WERR_RPC_S_OUT_OF_RESOURCES W_ERROR(0x000006B9) +#define WERR_RPC_S_SERVER_UNAVAILABLE W_ERROR(0x000006BA) +#define WERR_RPC_S_SERVER_TOO_BUSY W_ERROR(0x000006BB) +#define WERR_RPC_S_INVALID_NETWORK_OPTIONS W_ERROR(0x000006BC) +#define WERR_RPC_S_NO_CALL_ACTIVE W_ERROR(0x000006BD) +#define WERR_RPC_S_CALL_FAILED W_ERROR(0x000006BE) +#define WERR_RPC_S_CALL_FAILED_DNE W_ERROR(0x000006BF) +#define WERR_RPC_S_PROTOCOL_ERROR W_ERROR(0x000006C0) +#define WERR_RPC_S_PROXY_ACCESS_DENIED W_ERROR(0x000006C1) +#define WERR_RPC_S_UNSUPPORTED_TRANS_SYN W_ERROR(0x000006C2) +#define WERR_RPC_S_UNSUPPORTED_TYPE W_ERROR(0x000006C4) +#define WERR_RPC_S_INVALID_TAG W_ERROR(0x000006C5) +#define WERR_RPC_S_INVALID_BOUND W_ERROR(0x000006C6) +#define WERR_RPC_S_NO_ENTRY_NAME W_ERROR(0x000006C7) +#define WERR_RPC_S_INVALID_NAME_SYNTAX W_ERROR(0x000006C8) +#define WERR_RPC_S_UNSUPPORTED_NAME_SYNTAX W_ERROR(0x000006C9) +#define WERR_RPC_S_UUID_NO_ADDRESS W_ERROR(0x000006CB) +#define WERR_RPC_S_DUPLICATE_ENDPOINT W_ERROR(0x000006CC) +#define WERR_RPC_S_UNKNOWN_AUTHN_TYPE W_ERROR(0x000006CD) +#define WERR_RPC_S_MAX_CALLS_TOO_SMALL W_ERROR(0x000006CE) +#define WERR_RPC_S_STRING_TOO_LONG W_ERROR(0x000006CF) +#define WERR_RPC_S_PROTSEQ_NOT_FOUND W_ERROR(0x000006D0) +#define WERR_RPC_S_PROCNUM_OUT_OF_RANGE W_ERROR(0x000006D1) +#define WERR_RPC_S_BINDING_HAS_NO_AUTH W_ERROR(0x000006D2) +#define WERR_RPC_S_UNKNOWN_AUTHN_SERVICE W_ERROR(0x000006D3) +#define WERR_RPC_S_UNKNOWN_AUTHN_LEVEL W_ERROR(0x000006D4) +#define WERR_RPC_S_INVALID_AUTH_IDENTITY W_ERROR(0x000006D5) +#define WERR_RPC_S_UNKNOWN_AUTHZ_SERVICE W_ERROR(0x000006D6) +#define WERR_EPT_S_INVALID_ENTRY W_ERROR(0x000006D7) +#define WERR_EPT_S_CANT_PERFORM_OP W_ERROR(0x000006D8) +#define WERR_EPT_S_NOT_REGISTERED W_ERROR(0x000006D9) +#define WERR_RPC_S_NOTHING_TO_EXPORT W_ERROR(0x000006DA) +#define WERR_RPC_S_INCOMPLETE_NAME W_ERROR(0x000006DB) +#define WERR_RPC_S_INVALID_VERS_OPTION W_ERROR(0x000006DC) +#define WERR_RPC_S_NO_MORE_MEMBERS W_ERROR(0x000006DD) +#define WERR_RPC_S_NOT_ALL_OBJS_UNEXPORTED W_ERROR(0x000006DE) +#define WERR_RPC_S_INTERFACE_NOT_FOUND W_ERROR(0x000006DF) +#define WERR_RPC_S_ENTRY_ALREADY_EXISTS W_ERROR(0x000006E0) +#define WERR_RPC_S_ENTRY_NOT_FOUND W_ERROR(0x000006E1) +#define WERR_RPC_S_NAME_SERVICE_UNAVAILABLE W_ERROR(0x000006E2) +#define WERR_RPC_S_INVALID_NAF_ID W_ERROR(0x000006E3) +#define WERR_RPC_S_CANNOT_SUPPORT W_ERROR(0x000006E4) +#define WERR_RPC_S_NO_CONTEXT_AVAILABLE W_ERROR(0x000006E5) +#define WERR_RPC_S_INTERNAL_ERROR W_ERROR(0x000006E6) +#define WERR_RPC_S_ZERO_DIVIDE W_ERROR(0x000006E7) +#define WERR_RPC_S_ADDRESS_ERROR W_ERROR(0x000006E8) +#define WERR_RPC_S_FP_DIV_ZERO W_ERROR(0x000006E9) +#define WERR_RPC_S_FP_UNDERFLOW W_ERROR(0x000006EA) +#define WERR_RPC_S_FP_OVERFLOW W_ERROR(0x000006EB) +#define WERR_RPC_X_NO_MORE_ENTRIES W_ERROR(0x000006EC) +#define WERR_RPC_X_SS_CHAR_TRANS_OPEN_FAIL W_ERROR(0x000006ED) +#define WERR_RPC_X_SS_CHAR_TRANS_SHORT_FILE W_ERROR(0x000006EE) +#define WERR_RPC_X_SS_IN_NULL_CONTEXT W_ERROR(0x000006EF) +#define WERR_RPC_X_SS_CONTEXT_DAMAGED W_ERROR(0x000006F1) +#define WERR_RPC_X_SS_HANDLES_MISMATCH W_ERROR(0x000006F2) +#define WERR_RPC_X_SS_CANNOT_GET_CALL_HANDLE W_ERROR(0x000006F3) +#define WERR_RPC_X_NULL_REF_POINTER W_ERROR(0x000006F4) +#define WERR_RPC_X_ENUM_VALUE_OUT_OF_RANGE W_ERROR(0x000006F5) +#define WERR_RPC_X_BYTE_COUNT_TOO_SMALL W_ERROR(0x000006F6) +#define WERR_RPC_X_BAD_STUB_DATA W_ERROR(0x000006F7) +#define WERR_UNRECOGNIZED_MEDIA W_ERROR(0x000006F9) +#define WERR_NO_TRUST_LSA_SECRET W_ERROR(0x000006FA) +#define WERR_TRUSTED_DOMAIN_FAILURE W_ERROR(0x000006FC) +#define WERR_TRUSTED_RELATIONSHIP_FAILURE W_ERROR(0x000006FD) +#define WERR_TRUST_FAILURE W_ERROR(0x000006FE) +#define WERR_RPC_S_CALL_IN_PROGRESS W_ERROR(0x000006FF) +#define WERR_NETLOGON_NOT_STARTED W_ERROR(0x00000700) +#define WERR_ACCOUNT_EXPIRED W_ERROR(0x00000701) +#define WERR_REDIRECTOR_HAS_OPEN_HANDLES W_ERROR(0x00000702) +#define WERR_RPC_S_NO_MORE_BINDINGS W_ERROR(0x0000070E) +#define WERR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT W_ERROR(0x0000070F) +#define WERR_NOLOGON_WORKSTATION_TRUST_ACCOUNT W_ERROR(0x00000710) +#define WERR_NOLOGON_SERVER_TRUST_ACCOUNT W_ERROR(0x00000711) +#define WERR_DOMAIN_TRUST_INCONSISTENT W_ERROR(0x00000712) +#define WERR_SERVER_HAS_OPEN_HANDLES W_ERROR(0x00000713) +#define WERR_RESOURCE_DATA_NOT_FOUND W_ERROR(0x00000714) +#define WERR_RESOURCE_TYPE_NOT_FOUND W_ERROR(0x00000715) +#define WERR_RESOURCE_NAME_NOT_FOUND W_ERROR(0x00000716) +#define WERR_RESOURCE_LANG_NOT_FOUND W_ERROR(0x00000717) +#define WERR_NOT_ENOUGH_QUOTA W_ERROR(0x00000718) +#define WERR_RPC_S_NO_INTERFACES W_ERROR(0x00000719) +#define WERR_RPC_S_CALL_CANCELLED W_ERROR(0x0000071A) +#define WERR_RPC_S_BINDING_INCOMPLETE W_ERROR(0x0000071B) +#define WERR_RPC_S_COMM_FAILURE W_ERROR(0x0000071C) +#define WERR_RPC_S_UNSUPPORTED_AUTHN_LEVEL W_ERROR(0x0000071D) +#define WERR_RPC_S_NO_PRINC_NAME W_ERROR(0x0000071E) +#define WERR_RPC_S_NOT_RPC_ERROR W_ERROR(0x0000071F) +#define WERR_RPC_S_UUID_LOCAL_ONLY W_ERROR(0x00000720) +#define WERR_RPC_S_SEC_PKG_ERROR W_ERROR(0x00000721) +#define WERR_RPC_S_NOT_CANCELLED W_ERROR(0x00000722) +#define WERR_RPC_X_INVALID_ES_ACTION W_ERROR(0x00000723) +#define WERR_RPC_X_WRONG_ES_VERSION W_ERROR(0x00000724) +#define WERR_RPC_X_WRONG_STUB_VERSION W_ERROR(0x00000725) +#define WERR_RPC_X_INVALID_PIPE_OBJECT W_ERROR(0x00000726) +#define WERR_RPC_X_WRONG_PIPE_ORDER W_ERROR(0x00000727) +#define WERR_RPC_X_WRONG_PIPE_VERSION W_ERROR(0x00000728) +#define WERR_RPC_S_GROUP_MEMBER_NOT_FOUND W_ERROR(0x0000076A) +#define WERR_EPT_S_CANT_CREATE W_ERROR(0x0000076B) +#define WERR_RPC_S_INVALID_OBJECT W_ERROR(0x0000076C) +#define WERR_INVALID_TIME W_ERROR(0x0000076D) +#define WERR_ALREADY_WAITING W_ERROR(0x00000770) +#define WERR_PRINTER_DELETED W_ERROR(0x00000771) +#define WERR_INVALID_PRINTER_STATE W_ERROR(0x00000772) +#define WERR_OR_INVALID_OXID W_ERROR(0x00000776) +#define WERR_OR_INVALID_OID W_ERROR(0x00000777) +#define WERR_OR_INVALID_SET W_ERROR(0x00000778) +#define WERR_RPC_S_SEND_INCOMPLETE W_ERROR(0x00000779) +#define WERR_RPC_S_INVALID_ASYNC_HANDLE W_ERROR(0x0000077A) +#define WERR_RPC_S_INVALID_ASYNC_CALL W_ERROR(0x0000077B) +#define WERR_RPC_X_PIPE_CLOSED W_ERROR(0x0000077C) +#define WERR_RPC_X_PIPE_DISCIPLINE_ERROR W_ERROR(0x0000077D) +#define WERR_RPC_X_PIPE_EMPTY W_ERROR(0x0000077E) +#define WERR_NO_SITENAME W_ERROR(0x0000077F) +#define WERR_CANT_ACCESS_FILE W_ERROR(0x00000780) +#define WERR_CANT_RESOLVE_FILENAME W_ERROR(0x00000781) +#define WERR_RPC_S_ENTRY_TYPE_MISMATCH W_ERROR(0x00000782) +#define WERR_RPC_S_NOT_ALL_OBJS_EXPORTED W_ERROR(0x00000783) +#define WERR_RPC_S_INTERFACE_NOT_EXPORTED W_ERROR(0x00000784) +#define WERR_RPC_S_PROFILE_NOT_ADDED W_ERROR(0x00000785) +#define WERR_RPC_S_PRF_ELT_NOT_ADDED W_ERROR(0x00000786) +#define WERR_RPC_S_PRF_ELT_NOT_REMOVED W_ERROR(0x00000787) +#define WERR_RPC_S_GRP_ELT_NOT_ADDED W_ERROR(0x00000788) +#define WERR_RPC_S_GRP_ELT_NOT_REMOVED W_ERROR(0x00000789) +#define WERR_KM_DRIVER_BLOCKED W_ERROR(0x0000078A) +#define WERR_CONTEXT_EXPIRED W_ERROR(0x0000078B) +#define WERR_PER_USER_TRUST_QUOTA_EXCEEDED W_ERROR(0x0000078C) +#define WERR_ALL_USER_TRUST_QUOTA_EXCEEDED W_ERROR(0x0000078D) +#define WERR_USER_DELETE_TRUST_QUOTA_EXCEEDED W_ERROR(0x0000078E) +#define WERR_AUTHENTICATION_FIREWALL_FAILED W_ERROR(0x0000078F) +#define WERR_REMOTE_PRINT_CONNECTIONS_BLOCKED W_ERROR(0x00000790) +#define WERR_INVALID_PIXEL_FORMAT W_ERROR(0x000007D0) +#define WERR_BAD_DRIVER W_ERROR(0x000007D1) +#define WERR_INVALID_WINDOW_STYLE W_ERROR(0x000007D2) +#define WERR_METAFILE_NOT_SUPPORTED W_ERROR(0x000007D3) +#define WERR_TRANSFORM_NOT_SUPPORTED W_ERROR(0x000007D4) +#define WERR_CLIPPING_NOT_SUPPORTED W_ERROR(0x000007D5) +#define WERR_INVALID_CMM W_ERROR(0x000007DA) +#define WERR_INVALID_PROFILE W_ERROR(0x000007DB) +#define WERR_TAG_NOT_FOUND W_ERROR(0x000007DC) +#define WERR_TAG_NOT_PRESENT W_ERROR(0x000007DD) +#define WERR_DUPLICATE_TAG W_ERROR(0x000007DE) +#define WERR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE W_ERROR(0x000007DF) +#define WERR_PROFILE_NOT_FOUND W_ERROR(0x000007E0) +#define WERR_INVALID_COLORSPACE W_ERROR(0x000007E1) +#define WERR_ICM_NOT_ENABLED W_ERROR(0x000007E2) +#define WERR_DELETING_ICM_XFORM W_ERROR(0x000007E3) +#define WERR_INVALID_TRANSFORM W_ERROR(0x000007E4) +#define WERR_COLORSPACE_MISMATCH W_ERROR(0x000007E5) +#define WERR_INVALID_COLORINDEX W_ERROR(0x000007E6) +#define WERR_PROFILE_DOES_NOT_MATCH_DEVICE W_ERROR(0x000007E7) +#define WERR_NERR_NETNOTSTARTED W_ERROR(0x00000836) +#define WERR_NERR_UNKNOWNSERVER W_ERROR(0x00000837) +#define WERR_NERR_SHAREMEM W_ERROR(0x00000838) +#define WERR_NERR_NONETWORKRESOURCE W_ERROR(0x00000839) +#define WERR_NERR_REMOTEONLY W_ERROR(0x0000083A) +#define WERR_NERR_DEVNOTREDIRECTED W_ERROR(0x0000083B) +#define WERR_CONNECTED_OTHER_PASSWORD W_ERROR(0x0000083C) +#define WERR_CONNECTED_OTHER_PASSWORD_DEFAULT W_ERROR(0x0000083D) +#define WERR_NERR_SERVERNOTSTARTED W_ERROR(0x00000842) +#define WERR_NERR_ITEMNOTFOUND W_ERROR(0x00000843) +#define WERR_NERR_UNKNOWNDEVDIR W_ERROR(0x00000844) +#define WERR_NERR_REDIRECTEDPATH W_ERROR(0x00000845) +#define WERR_NERR_DUPLICATESHARE W_ERROR(0x00000846) +#define WERR_NERR_NOROOM W_ERROR(0x00000847) +#define WERR_NERR_TOOMANYITEMS W_ERROR(0x00000849) +#define WERR_NERR_INVALIDMAXUSERS W_ERROR(0x0000084A) +#define WERR_NERR_BUFTOOSMALL W_ERROR(0x0000084B) +#define WERR_NERR_REMOTEERR W_ERROR(0x0000084F) +#define WERR_NERR_LANMANINIERROR W_ERROR(0x00000853) +#define WERR_NERR_NETWORKERROR W_ERROR(0x00000858) +#define WERR_NERR_WKSTAINCONSISTENTSTATE W_ERROR(0x00000859) +#define WERR_NERR_WKSTANOTSTARTED W_ERROR(0x0000085A) +#define WERR_NERR_BROWSERNOTSTARTED W_ERROR(0x0000085B) +#define WERR_NERR_INTERNALERROR W_ERROR(0x0000085C) +#define WERR_NERR_BADTRANSACTCONFIG W_ERROR(0x0000085D) +#define WERR_NERR_INVALIDAPI W_ERROR(0x0000085E) +#define WERR_NERR_BADEVENTNAME W_ERROR(0x0000085F) +#define WERR_NERR_DUPNAMEREBOOT W_ERROR(0x00000860) +#define WERR_NERR_CFGCOMPNOTFOUND W_ERROR(0x00000862) +#define WERR_NERR_CFGPARAMNOTFOUND W_ERROR(0x00000863) +#define WERR_NERR_LINETOOLONG W_ERROR(0x00000865) +#define WERR_NERR_QNOTFOUND W_ERROR(0x00000866) +#define WERR_NERR_JOBNOTFOUND W_ERROR(0x00000867) +#define WERR_NERR_DESTNOTFOUND W_ERROR(0x00000868) +#define WERR_NERR_DESTEXISTS W_ERROR(0x00000869) +#define WERR_NERR_QEXISTS W_ERROR(0x0000086A) +#define WERR_NERR_QNOROOM W_ERROR(0x0000086B) +#define WERR_NERR_JOBNOROOM W_ERROR(0x0000086C) +#define WERR_NERR_DESTNOROOM W_ERROR(0x0000086D) +#define WERR_NERR_DESTIDLE W_ERROR(0x0000086E) +#define WERR_NERR_DESTINVALIDOP W_ERROR(0x0000086F) +#define WERR_NERR_PROCNORESPOND W_ERROR(0x00000870) +#define WERR_NERR_SPOOLERNOTLOADED W_ERROR(0x00000871) +#define WERR_NERR_DESTINVALIDSTATE W_ERROR(0x00000872) +#define WERR_NERR_QINVALIDSTATE W_ERROR(0x00000873) +#define WERR_NERR_JOBINVALIDSTATE W_ERROR(0x00000874) +#define WERR_NERR_SPOOLNOMEMORY W_ERROR(0x00000875) +#define WERR_NERR_DRIVERNOTFOUND W_ERROR(0x00000876) +#define WERR_NERR_DATATYPEINVALID W_ERROR(0x00000877) +#define WERR_NERR_PROCNOTFOUND W_ERROR(0x00000878) +#define WERR_NERR_SERVICETABLELOCKED W_ERROR(0x00000884) +#define WERR_NERR_SERVICETABLEFULL W_ERROR(0x00000885) +#define WERR_NERR_SERVICEINSTALLED W_ERROR(0x00000886) +#define WERR_NERR_SERVICEENTRYLOCKED W_ERROR(0x00000887) +#define WERR_NERR_SERVICENOTINSTALLED W_ERROR(0x00000888) +#define WERR_NERR_BADSERVICENAME W_ERROR(0x00000889) +#define WERR_NERR_SERVICECTLTIMEOUT W_ERROR(0x0000088A) +#define WERR_NERR_SERVICECTLBUSY W_ERROR(0x0000088B) +#define WERR_NERR_BADSERVICEPROGNAME W_ERROR(0x0000088C) +#define WERR_NERR_SERVICENOTCTRL W_ERROR(0x0000088D) +#define WERR_NERR_SERVICEKILLPROC W_ERROR(0x0000088E) +#define WERR_NERR_SERVICECTLNOTVALID W_ERROR(0x0000088F) +#define WERR_NERR_NOTINDISPATCHTBL W_ERROR(0x00000890) +#define WERR_NERR_BADCONTROLRECV W_ERROR(0x00000891) +#define WERR_NERR_SERVICENOTSTARTING W_ERROR(0x00000892) +#define WERR_NERR_ALREADYLOGGEDON W_ERROR(0x00000898) +#define WERR_NERR_NOTLOGGEDON W_ERROR(0x00000899) +#define WERR_NERR_BADUSERNAME W_ERROR(0x0000089A) +#define WERR_NERR_BADPASSWORD W_ERROR(0x0000089B) +#define WERR_NERR_UNABLETOADDNAME_W W_ERROR(0x0000089C) +#define WERR_NERR_UNABLETOADDNAME_F W_ERROR(0x0000089D) +#define WERR_NERR_UNABLETODELNAME_W W_ERROR(0x0000089E) +#define WERR_NERR_UNABLETODELNAME_F W_ERROR(0x0000089F) +#define WERR_NERR_LOGONSPAUSED W_ERROR(0x000008A1) +#define WERR_NERR_LOGONSERVERCONFLICT W_ERROR(0x000008A2) +#define WERR_NERR_LOGONNOUSERPATH W_ERROR(0x000008A3) +#define WERR_NERR_LOGONSCRIPTERROR W_ERROR(0x000008A4) +#define WERR_NERR_STANDALONELOGON W_ERROR(0x000008A6) +#define WERR_NERR_LOGONSERVERNOTFOUND W_ERROR(0x000008A7) +#define WERR_NERR_LOGONDOMAINEXISTS W_ERROR(0x000008A8) +#define WERR_NERR_NONVALIDATEDLOGON W_ERROR(0x000008A9) +#define WERR_NERR_ACFNOTFOUND W_ERROR(0x000008AB) +#define WERR_NERR_GROUPNOTFOUND W_ERROR(0x000008AC) +#define WERR_NERR_USERNOTFOUND W_ERROR(0x000008AD) +#define WERR_NERR_RESOURCENOTFOUND W_ERROR(0x000008AE) +#define WERR_NERR_GROUPEXISTS W_ERROR(0x000008AF) +#define WERR_NERR_USEREXISTS W_ERROR(0x000008B0) +#define WERR_NERR_RESOURCEEXISTS W_ERROR(0x000008B1) +#define WERR_NERR_NOTPRIMARY W_ERROR(0x000008B2) +#define WERR_NERR_ACFNOTLOADED W_ERROR(0x000008B3) +#define WERR_NERR_ACFNOROOM W_ERROR(0x000008B4) +#define WERR_NERR_ACFFILEIOFAIL W_ERROR(0x000008B5) +#define WERR_NERR_ACFTOOMANYLISTS W_ERROR(0x000008B6) +#define WERR_NERR_USERLOGON W_ERROR(0x000008B7) +#define WERR_NERR_ACFNOPARENT W_ERROR(0x000008B8) +#define WERR_NERR_CANNOTGROWSEGMENT W_ERROR(0x000008B9) +#define WERR_NERR_SPEGROUPOP W_ERROR(0x000008BA) +#define WERR_NERR_NOTINCACHE W_ERROR(0x000008BB) +#define WERR_NERR_USERINGROUP W_ERROR(0x000008BC) +#define WERR_NERR_USERNOTINGROUP W_ERROR(0x000008BD) +#define WERR_NERR_ACCOUNTUNDEFINED W_ERROR(0x000008BE) +#define WERR_NERR_ACCOUNTEXPIRED W_ERROR(0x000008BF) +#define WERR_NERR_INVALIDWORKSTATION W_ERROR(0x000008C0) +#define WERR_NERR_INVALIDLOGONHOURS W_ERROR(0x000008C1) +#define WERR_NERR_PASSWORDEXPIRED W_ERROR(0x000008C2) +#define WERR_NERR_PASSWORDCANTCHANGE W_ERROR(0x000008C3) +#define WERR_NERR_PASSWORDHISTCONFLICT W_ERROR(0x000008C4) +#define WERR_NERR_PASSWORDTOOSHORT W_ERROR(0x000008C5) +#define WERR_NERR_PASSWORDTOORECENT W_ERROR(0x000008C6) +#define WERR_NERR_INVALIDDATABASE W_ERROR(0x000008C7) +#define WERR_NERR_DATABASEUPTODATE W_ERROR(0x000008C8) +#define WERR_NERR_SYNCREQUIRED W_ERROR(0x000008C9) +#define WERR_NERR_USENOTFOUND W_ERROR(0x000008CA) +#define WERR_NERR_BADASGTYPE W_ERROR(0x000008CB) +#define WERR_NERR_DEVICEISSHARED W_ERROR(0x000008CC) +#define WERR_NERR_NOCOMPUTERNAME W_ERROR(0x000008DE) +#define WERR_NERR_MSGALREADYSTARTED W_ERROR(0x000008DF) +#define WERR_NERR_MSGINITFAILED W_ERROR(0x000008E0) +#define WERR_NERR_NAMENOTFOUND W_ERROR(0x000008E1) +#define WERR_NERR_ALREADYFORWARDED W_ERROR(0x000008E2) +#define WERR_NERR_ADDFORWARDED W_ERROR(0x000008E3) +#define WERR_NERR_ALREADYEXISTS W_ERROR(0x000008E4) +#define WERR_NERR_TOOMANYNAMES W_ERROR(0x000008E5) +#define WERR_NERR_DELCOMPUTERNAME W_ERROR(0x000008E6) +#define WERR_NERR_LOCALFORWARD W_ERROR(0x000008E7) +#define WERR_NERR_GRPMSGPROCESSOR W_ERROR(0x000008E8) +#define WERR_NERR_PAUSEDREMOTE W_ERROR(0x000008E9) +#define WERR_NERR_BADRECEIVE W_ERROR(0x000008EA) +#define WERR_NERR_NAMEINUSE W_ERROR(0x000008EB) +#define WERR_NERR_MSGNOTSTARTED W_ERROR(0x000008EC) +#define WERR_NERR_NOTLOCALNAME W_ERROR(0x000008ED) +#define WERR_NERR_NOFORWARDNAME W_ERROR(0x000008EE) +#define WERR_NERR_REMOTEFULL W_ERROR(0x000008EF) +#define WERR_NERR_NAMENOTFORWARDED W_ERROR(0x000008F0) +#define WERR_NERR_TRUNCATEDBROADCAST W_ERROR(0x000008F1) +#define WERR_NERR_INVALIDDEVICE W_ERROR(0x000008F6) +#define WERR_NERR_WRITEFAULT W_ERROR(0x000008F7) +#define WERR_NERR_DUPLICATENAME W_ERROR(0x000008F9) +#define WERR_NERR_DELETELATER W_ERROR(0x000008FA) +#define WERR_NERR_INCOMPLETEDEL W_ERROR(0x000008FB) +#define WERR_NERR_MULTIPLENETS W_ERROR(0x000008FC) +#define WERR_NERR_NETNAMENOTFOUND W_ERROR(0x00000906) +#define WERR_NERR_DEVICENOTSHARED W_ERROR(0x00000907) +#define WERR_NERR_CLIENTNAMENOTFOUND W_ERROR(0x00000908) +#define WERR_NERR_FILEIDNOTFOUND W_ERROR(0x0000090A) +#define WERR_NERR_EXECFAILURE W_ERROR(0x0000090B) +#define WERR_NERR_TMPFILE W_ERROR(0x0000090C) +#define WERR_NERR_TOOMUCHDATA W_ERROR(0x0000090D) +#define WERR_NERR_DEVICESHARECONFLICT W_ERROR(0x0000090E) +#define WERR_NERR_BROWSERTABLEINCOMPLETE W_ERROR(0x0000090F) +#define WERR_NERR_NOTLOCALDOMAIN W_ERROR(0x00000910) +#define WERR_NERR_ISDFSSHARE W_ERROR(0x00000911) +#define WERR_NERR_DEVINVALIDOPCODE W_ERROR(0x0000091B) +#define WERR_NERR_DEVNOTFOUND W_ERROR(0x0000091C) +#define WERR_NERR_DEVNOTOPEN W_ERROR(0x0000091D) +#define WERR_NERR_BADQUEUEDEVSTRING W_ERROR(0x0000091E) +#define WERR_NERR_BADQUEUEPRIORITY W_ERROR(0x0000091F) +#define WERR_NERR_NOCOMMDEVS W_ERROR(0x00000921) +#define WERR_NERR_QUEUENOTFOUND W_ERROR(0x00000922) +#define WERR_NERR_BADDEVSTRING W_ERROR(0x00000924) +#define WERR_NERR_BADDEV W_ERROR(0x00000925) +#define WERR_NERR_INUSEBYSPOOLER W_ERROR(0x00000926) +#define WERR_NERR_COMMDEVINUSE W_ERROR(0x00000927) +#define WERR_NERR_INVALIDCOMPUTER W_ERROR(0x0000092F) +#define WERR_NERR_MAXLENEXCEEDED W_ERROR(0x00000932) +#define WERR_NERR_BADCOMPONENT W_ERROR(0x00000934) +#define WERR_NERR_CANTTYPE W_ERROR(0x00000935) +#define WERR_NERR_TOOMANYENTRIES W_ERROR(0x0000093A) +#define WERR_NERR_PROFILEFILETOOBIG W_ERROR(0x00000942) +#define WERR_NERR_PROFILEOFFSET W_ERROR(0x00000943) +#define WERR_NERR_PROFILECLEANUP W_ERROR(0x00000944) +#define WERR_NERR_PROFILEUNKNOWNCMD W_ERROR(0x00000945) +#define WERR_NERR_PROFILELOADERR W_ERROR(0x00000946) +#define WERR_NERR_PROFILESAVEERR W_ERROR(0x00000947) +#define WERR_NERR_LOGOVERFLOW W_ERROR(0x00000949) +#define WERR_NERR_LOGFILECHANGED W_ERROR(0x0000094A) +#define WERR_NERR_LOGFILECORRUPT W_ERROR(0x0000094B) +#define WERR_NERR_SOURCEISDIR W_ERROR(0x0000094C) +#define WERR_NERR_BADSOURCE W_ERROR(0x0000094D) +#define WERR_NERR_BADDEST W_ERROR(0x0000094E) +#define WERR_NERR_DIFFERENTSERVERS W_ERROR(0x0000094F) +#define WERR_NERR_RUNSRVPAUSED W_ERROR(0x00000951) +#define WERR_NERR_ERRCOMMRUNSRV W_ERROR(0x00000955) +#define WERR_NERR_ERROREXECINGGHOST W_ERROR(0x00000957) +#define WERR_NERR_SHARENOTFOUND W_ERROR(0x00000958) +#define WERR_NERR_INVALIDLANA W_ERROR(0x00000960) +#define WERR_NERR_OPENFILES W_ERROR(0x00000961) +#define WERR_NERR_ACTIVECONNS W_ERROR(0x00000962) +#define WERR_NERR_BADPASSWORDCORE W_ERROR(0x00000963) +#define WERR_NERR_DEVINUSE W_ERROR(0x00000964) +#define WERR_NERR_LOCALDRIVE W_ERROR(0x00000965) +#define WERR_NERR_ALERTEXISTS W_ERROR(0x0000097E) +#define WERR_NERR_TOOMANYALERTS W_ERROR(0x0000097F) +#define WERR_NERR_NOSUCHALERT W_ERROR(0x00000980) +#define WERR_NERR_BADRECIPIENT W_ERROR(0x00000981) +#define WERR_NERR_ACCTLIMITEXCEEDED W_ERROR(0x00000982) +#define WERR_NERR_INVALIDLOGSEEK W_ERROR(0x00000988) +#define WERR_NERR_BADUASCONFIG W_ERROR(0x00000992) +#define WERR_NERR_INVALIDUASOP W_ERROR(0x00000993) +#define WERR_NERR_LASTADMIN W_ERROR(0x00000994) +#define WERR_NERR_DCNOTFOUND W_ERROR(0x00000995) +#define WERR_NERR_LOGONTRACKINGERROR W_ERROR(0x00000996) +#define WERR_NERR_NETLOGONNOTSTARTED W_ERROR(0x00000997) +#define WERR_NERR_CANNOTGROWUASFILE W_ERROR(0x00000998) +#define WERR_NERR_TIMEDIFFATDC W_ERROR(0x00000999) +#define WERR_NERR_PASSWORDMISMATCH W_ERROR(0x0000099A) +#define WERR_NERR_NOSUCHSERVER W_ERROR(0x0000099C) +#define WERR_NERR_NOSUCHSESSION W_ERROR(0x0000099D) +#define WERR_NERR_NOSUCHCONNECTION W_ERROR(0x0000099E) +#define WERR_NERR_TOOMANYSERVERS W_ERROR(0x0000099F) +#define WERR_NERR_TOOMANYSESSIONS W_ERROR(0x000009A0) +#define WERR_NERR_TOOMANYCONNECTIONS W_ERROR(0x000009A1) +#define WERR_NERR_TOOMANYFILES W_ERROR(0x000009A2) +#define WERR_NERR_NOALTERNATESERVERS W_ERROR(0x000009A3) +#define WERR_NERR_TRYDOWNLEVEL W_ERROR(0x000009A6) +#define WERR_NERR_UPSDRIVERNOTSTARTED W_ERROR(0x000009B0) +#define WERR_NERR_UPSINVALIDCONFIG W_ERROR(0x000009B1) +#define WERR_NERR_UPSINVALIDCOMMPORT W_ERROR(0x000009B2) +#define WERR_NERR_UPSSIGNALASSERTED W_ERROR(0x000009B3) +#define WERR_NERR_UPSSHUTDOWNFAILED W_ERROR(0x000009B4) +#define WERR_NERR_BADDOSRETCODE W_ERROR(0x000009C4) +#define WERR_NERR_PROGNEEDSEXTRAMEM W_ERROR(0x000009C5) +#define WERR_NERR_BADDOSFUNCTION W_ERROR(0x000009C6) +#define WERR_NERR_REMOTEBOOTFAILED W_ERROR(0x000009C7) +#define WERR_NERR_BADFILECHECKSUM W_ERROR(0x000009C8) +#define WERR_NERR_NORPLBOOTSYSTEM W_ERROR(0x000009C9) +#define WERR_NERR_RPLLOADRNETBIOSERR W_ERROR(0x000009CA) +#define WERR_NERR_RPLLOADRDISKERR W_ERROR(0x000009CB) +#define WERR_NERR_IMAGEPARAMERR W_ERROR(0x000009CC) +#define WERR_NERR_TOOMANYIMAGEPARAMS W_ERROR(0x000009CD) +#define WERR_NERR_NONDOSFLOPPYUSED W_ERROR(0x000009CE) +#define WERR_NERR_RPLBOOTRESTART W_ERROR(0x000009CF) +#define WERR_NERR_RPLSRVRCALLFAILED W_ERROR(0x000009D0) +#define WERR_NERR_CANTCONNECTRPLSRVR W_ERROR(0x000009D1) +#define WERR_NERR_CANTOPENIMAGEFILE W_ERROR(0x000009D2) +#define WERR_NERR_CALLINGRPLSRVR W_ERROR(0x000009D3) +#define WERR_NERR_STARTINGRPLBOOT W_ERROR(0x000009D4) +#define WERR_NERR_RPLBOOTSERVICETERM W_ERROR(0x000009D5) +#define WERR_NERR_RPLBOOTSTARTFAILED W_ERROR(0x000009D6) +#define WERR_NERR_RPL_CONNECTED W_ERROR(0x000009D7) +#define WERR_NERR_BROWSERCONFIGUREDTONOTRUN W_ERROR(0x000009F6) +#define WERR_NERR_RPLNOADAPTERSSTARTED W_ERROR(0x00000A32) +#define WERR_NERR_RPLBADREGISTRY W_ERROR(0x00000A33) +#define WERR_NERR_RPLBADDATABASE W_ERROR(0x00000A34) +#define WERR_NERR_RPLRPLFILESSHARE W_ERROR(0x00000A35) +#define WERR_NERR_RPLNOTRPLSERVER W_ERROR(0x00000A36) +#define WERR_NERR_RPLCANNOTENUM W_ERROR(0x00000A37) +#define WERR_NERR_RPLWKSTAINFOCORRUPTED W_ERROR(0x00000A38) +#define WERR_NERR_RPLWKSTANOTFOUND W_ERROR(0x00000A39) +#define WERR_NERR_RPLWKSTANAMEUNAVAILABLE W_ERROR(0x00000A3A) +#define WERR_NERR_RPLPROFILEINFOCORRUPTED W_ERROR(0x00000A3B) +#define WERR_NERR_RPLPROFILENOTFOUND W_ERROR(0x00000A3C) +#define WERR_NERR_RPLPROFILENAMEUNAVAILABLE W_ERROR(0x00000A3D) +#define WERR_NERR_RPLPROFILENOTEMPTY W_ERROR(0x00000A3E) +#define WERR_NERR_RPLCONFIGINFOCORRUPTED W_ERROR(0x00000A3F) +#define WERR_NERR_RPLCONFIGNOTFOUND W_ERROR(0x00000A40) +#define WERR_NERR_RPLADAPTERINFOCORRUPTED W_ERROR(0x00000A41) +#define WERR_NERR_RPLINTERNAL W_ERROR(0x00000A42) +#define WERR_NERR_RPLVENDORINFOCORRUPTED W_ERROR(0x00000A43) +#define WERR_NERR_RPLBOOTINFOCORRUPTED W_ERROR(0x00000A44) +#define WERR_NERR_RPLWKSTANEEDSUSERACCT W_ERROR(0x00000A45) +#define WERR_NERR_RPLNEEDSRPLUSERACCT W_ERROR(0x00000A46) +#define WERR_NERR_RPLBOOTNOTFOUND W_ERROR(0x00000A47) +#define WERR_NERR_RPLINCOMPATIBLEPROFILE W_ERROR(0x00000A48) +#define WERR_NERR_RPLADAPTERNAMEUNAVAILABLE W_ERROR(0x00000A49) +#define WERR_NERR_RPLCONFIGNOTEMPTY W_ERROR(0x00000A4A) +#define WERR_NERR_RPLBOOTINUSE W_ERROR(0x00000A4B) +#define WERR_NERR_RPLBACKUPDATABASE W_ERROR(0x00000A4C) +#define WERR_NERR_RPLADAPTERNOTFOUND W_ERROR(0x00000A4D) +#define WERR_NERR_RPLVENDORNOTFOUND W_ERROR(0x00000A4E) +#define WERR_NERR_RPLVENDORNAMEUNAVAILABLE W_ERROR(0x00000A4F) +#define WERR_NERR_RPLBOOTNAMEUNAVAILABLE W_ERROR(0x00000A50) +#define WERR_NERR_RPLCONFIGNAMEUNAVAILABLE W_ERROR(0x00000A51) +#define WERR_NERR_DFSINTERNALCORRUPTION W_ERROR(0x00000A64) +#define WERR_NERR_DFSVOLUMEDATACORRUPT W_ERROR(0x00000A65) +#define WERR_NERR_DFSNOSUCHVOLUME W_ERROR(0x00000A66) +#define WERR_NERR_DFSVOLUMEALREADYEXISTS W_ERROR(0x00000A67) +#define WERR_NERR_DFSALREADYSHARED W_ERROR(0x00000A68) +#define WERR_NERR_DFSNOSUCHSHARE W_ERROR(0x00000A69) +#define WERR_NERR_DFSNOTALEAFVOLUME W_ERROR(0x00000A6A) +#define WERR_NERR_DFSLEAFVOLUME W_ERROR(0x00000A6B) +#define WERR_NERR_DFSVOLUMEHASMULTIPLESERVERS W_ERROR(0x00000A6C) +#define WERR_NERR_DFSCANTCREATEJUNCTIONPOINT W_ERROR(0x00000A6D) +#define WERR_NERR_DFSSERVERNOTDFSAWARE W_ERROR(0x00000A6E) +#define WERR_NERR_DFSBADRENAMEPATH W_ERROR(0x00000A6F) +#define WERR_NERR_DFSVOLUMEISOFFLINE W_ERROR(0x00000A70) +#define WERR_NERR_DFSNOSUCHSERVER W_ERROR(0x00000A71) +#define WERR_NERR_DFSCYCLICALNAME W_ERROR(0x00000A72) +#define WERR_NERR_DFSNOTSUPPORTEDINSERVERDFS W_ERROR(0x00000A73) +#define WERR_NERR_DFSDUPLICATESERVICE W_ERROR(0x00000A74) +#define WERR_NERR_DFSCANTREMOVELASTSERVERSHARE W_ERROR(0x00000A75) +#define WERR_NERR_DFSVOLUMEISINTERDFS W_ERROR(0x00000A76) +#define WERR_NERR_DFSINCONSISTENT W_ERROR(0x00000A77) +#define WERR_NERR_DFSSERVERUPGRADED W_ERROR(0x00000A78) +#define WERR_NERR_DFSDATAISIDENTICAL W_ERROR(0x00000A79) +#define WERR_NERR_DFSCANTREMOVEDFSROOT W_ERROR(0x00000A7A) +#define WERR_NERR_DFSCHILDORPARENTINDFS W_ERROR(0x00000A7B) +#define WERR_NERR_DFSINTERNALERROR W_ERROR(0x00000A82) +#define WERR_NERR_SETUPALREADYJOINED W_ERROR(0x00000A83) +#define WERR_NERR_SETUPNOTJOINED W_ERROR(0x00000A84) +#define WERR_NERR_SETUPDOMAINCONTROLLER W_ERROR(0x00000A85) +#define WERR_NERR_DEFAULTJOINREQUIRED W_ERROR(0x00000A86) +#define WERR_NERR_INVALIDWORKGROUPNAME W_ERROR(0x00000A87) +#define WERR_NERR_NAMEUSESINCOMPATIBLECODEPAGE W_ERROR(0x00000A88) +#define WERR_NERR_COMPUTERACCOUNTNOTFOUND W_ERROR(0x00000A89) +#define WERR_NERR_PERSONALSKU W_ERROR(0x00000A8A) +#define WERR_NERR_PASSWORDMUSTCHANGE W_ERROR(0x00000A8D) +#define WERR_NERR_ACCOUNTLOCKEDOUT W_ERROR(0x00000A8E) +#define WERR_NERR_PASSWORDTOOLONG W_ERROR(0x00000A8F) +#define WERR_NERR_PASSWORDNOTCOMPLEXENOUGH W_ERROR(0x00000A90) +#define WERR_NERR_PASSWORDFILTERERROR W_ERROR(0x00000A91) +#define WERR_SUCCESS_REBOOT_REQUIRED W_ERROR(0x00000BC2) +#define WERR_SUCCESS_RESTART_REQUIRED W_ERROR(0x00000BC3) +#define WERR_PRINTER_NOT_FOUND W_ERROR(0x00000BC4) +#define WERR_PRINTER_DRIVER_WARNED W_ERROR(0x00000BC5) +#define WERR_PRINTER_DRIVER_BLOCKED W_ERROR(0x00000BC6) +#define WERR_PRINTER_DRIVER_PACKAGE_IN_USE W_ERROR(0x00000BC7) +#define WERR_CORE_DRIVER_PACKAGE_NOT_FOUND W_ERROR(0x00000BC8) +#define WERR_FAIL_REBOOT_REQUIRED W_ERROR(0x00000BC9) +#define WERR_FAIL_REBOOT_INITIATED W_ERROR(0x00000BCA) +#define WERR_IO_REISSUE_AS_CACHED W_ERROR(0x00000F6E) +#define WERR_WINS_INTERNAL W_ERROR(0x00000FA0) +#define WERR_CAN_NOT_DEL_LOCAL_WINS W_ERROR(0x00000FA1) +#define WERR_STATIC_INIT W_ERROR(0x00000FA2) +#define WERR_INC_BACKUP W_ERROR(0x00000FA3) +#define WERR_FULL_BACKUP W_ERROR(0x00000FA4) +#define WERR_REC_NON_EXISTENT W_ERROR(0x00000FA5) +#define WERR_RPL_NOT_ALLOWED W_ERROR(0x00000FA6) +#define WERR_DHCP_ADDRESS_CONFLICT W_ERROR(0x00001004) +#define WERR_WMI_GUID_NOT_FOUND W_ERROR(0x00001068) +#define WERR_WMI_INSTANCE_NOT_FOUND W_ERROR(0x00001069) +#define WERR_WMI_ITEMID_NOT_FOUND W_ERROR(0x0000106A) +#define WERR_WMI_TRY_AGAIN W_ERROR(0x0000106B) +#define WERR_WMI_DP_NOT_FOUND W_ERROR(0x0000106C) +#define WERR_WMI_UNRESOLVED_INSTANCE_REF W_ERROR(0x0000106D) +#define WERR_WMI_ALREADY_ENABLED W_ERROR(0x0000106E) +#define WERR_WMI_GUID_DISCONNECTED W_ERROR(0x0000106F) +#define WERR_WMI_SERVER_UNAVAILABLE W_ERROR(0x00001070) +#define WERR_WMI_DP_FAILED W_ERROR(0x00001071) +#define WERR_WMI_INVALID_MOF W_ERROR(0x00001072) +#define WERR_WMI_INVALID_REGINFO W_ERROR(0x00001073) +#define WERR_WMI_ALREADY_DISABLED W_ERROR(0x00001074) +#define WERR_WMI_READ_ONLY W_ERROR(0x00001075) +#define WERR_WMI_SET_FAILURE W_ERROR(0x00001076) +#define WERR_INVALID_MEDIA W_ERROR(0x000010CC) +#define WERR_INVALID_LIBRARY W_ERROR(0x000010CD) +#define WERR_INVALID_MEDIA_POOL W_ERROR(0x000010CE) +#define WERR_DRIVE_MEDIA_MISMATCH W_ERROR(0x000010CF) +#define WERR_MEDIA_OFFLINE W_ERROR(0x000010D0) +#define WERR_LIBRARY_OFFLINE W_ERROR(0x000010D1) +#define WERR_EMPTY W_ERROR(0x000010D2) +#define WERR_NOT_EMPTY W_ERROR(0x000010D3) +#define WERR_MEDIA_UNAVAILABLE W_ERROR(0x000010D4) +#define WERR_RESOURCE_DISABLED W_ERROR(0x000010D5) +#define WERR_INVALID_CLEANER W_ERROR(0x000010D6) +#define WERR_UNABLE_TO_CLEAN W_ERROR(0x000010D7) +#define WERR_OBJECT_NOT_FOUND W_ERROR(0x000010D8) +#define WERR_DATABASE_FAILURE W_ERROR(0x000010D9) +#define WERR_DATABASE_FULL W_ERROR(0x000010DA) +#define WERR_MEDIA_INCOMPATIBLE W_ERROR(0x000010DB) +#define WERR_RESOURCE_NOT_PRESENT W_ERROR(0x000010DC) +#define WERR_INVALID_OPERATION W_ERROR(0x000010DD) +#define WERR_MEDIA_NOT_AVAILABLE W_ERROR(0x000010DE) +#define WERR_REQUEST_REFUSED W_ERROR(0x000010E0) +#define WERR_INVALID_DRIVE_OBJECT W_ERROR(0x000010E1) +#define WERR_LIBRARY_FULL W_ERROR(0x000010E2) +#define WERR_MEDIUM_NOT_ACCESSIBLE W_ERROR(0x000010E3) +#define WERR_UNABLE_TO_LOAD_MEDIUM W_ERROR(0x000010E4) +#define WERR_UNABLE_TO_INVENTORY_DRIVE W_ERROR(0x000010E5) +#define WERR_UNABLE_TO_INVENTORY_SLOT W_ERROR(0x000010E6) +#define WERR_UNABLE_TO_INVENTORY_TRANSPORT W_ERROR(0x000010E7) +#define WERR_TRANSPORT_FULL W_ERROR(0x000010E8) +#define WERR_CONTROLLING_IEPORT W_ERROR(0x000010E9) +#define WERR_UNABLE_TO_EJECT_MOUNTED_MEDIA W_ERROR(0x000010EA) +#define WERR_CLEANER_SLOT_SET W_ERROR(0x000010EB) +#define WERR_CLEANER_SLOT_NOT_SET W_ERROR(0x000010EC) +#define WERR_CLEANER_CARTRIDGE_SPENT W_ERROR(0x000010ED) +#define WERR_UNEXPECTED_OMID W_ERROR(0x000010EE) +#define WERR_CANT_DELETE_LAST_ITEM W_ERROR(0x000010EF) +#define WERR_MESSAGE_EXCEEDS_MAX_SIZE W_ERROR(0x000010F0) +#define WERR_VOLUME_CONTAINS_SYS_FILES W_ERROR(0x000010F1) +#define WERR_INDIGENOUS_TYPE W_ERROR(0x000010F2) +#define WERR_NO_SUPPORTING_DRIVES W_ERROR(0x000010F3) +#define WERR_CLEANER_CARTRIDGE_INSTALLED W_ERROR(0x000010F4) +#define WERR_IEPORT_FULL W_ERROR(0x000010F5) +#define WERR_FILE_OFFLINE W_ERROR(0x000010FE) +#define WERR_REMOTE_STORAGE_NOT_ACTIVE W_ERROR(0x000010FF) +#define WERR_REMOTE_STORAGE_MEDIA_ERROR W_ERROR(0x00001100) +#define WERR_NOT_A_REPARSE_POINT W_ERROR(0x00001126) +#define WERR_REPARSE_ATTRIBUTE_CONFLICT W_ERROR(0x00001127) +#define WERR_INVALID_REPARSE_DATA W_ERROR(0x00001128) +#define WERR_REPARSE_TAG_INVALID W_ERROR(0x00001129) +#define WERR_REPARSE_TAG_MISMATCH W_ERROR(0x0000112A) +#define WERR_VOLUME_NOT_SIS_ENABLED W_ERROR(0x00001194) +#define WERR_DEPENDENT_RESOURCE_EXISTS W_ERROR(0x00001389) +#define WERR_DEPENDENCY_NOT_FOUND W_ERROR(0x0000138A) +#define WERR_DEPENDENCY_ALREADY_EXISTS W_ERROR(0x0000138B) +#define WERR_RESOURCE_NOT_ONLINE W_ERROR(0x0000138C) +#define WERR_HOST_NODE_NOT_AVAILABLE W_ERROR(0x0000138D) +#define WERR_RESOURCE_NOT_AVAILABLE W_ERROR(0x0000138E) +#define WERR_RESOURCE_NOT_FOUND W_ERROR(0x0000138F) +#define WERR_SHUTDOWN_CLUSTER W_ERROR(0x00001390) +#define WERR_CANT_EVICT_ACTIVE_NODE W_ERROR(0x00001391) +#define WERR_OBJECT_ALREADY_EXISTS W_ERROR(0x00001392) +#define WERR_OBJECT_IN_LIST W_ERROR(0x00001393) +#define WERR_GROUP_NOT_AVAILABLE W_ERROR(0x00001394) +#define WERR_GROUP_NOT_FOUND W_ERROR(0x00001395) +#define WERR_GROUP_NOT_ONLINE W_ERROR(0x00001396) +#define WERR_HOST_NODE_NOT_RESOURCE_OWNER W_ERROR(0x00001397) +#define WERR_HOST_NODE_NOT_GROUP_OWNER W_ERROR(0x00001398) +#define WERR_RESMON_CREATE_FAILED W_ERROR(0x00001399) +#define WERR_RESMON_ONLINE_FAILED W_ERROR(0x0000139A) +#define WERR_RESOURCE_ONLINE W_ERROR(0x0000139B) +#define WERR_QUORUM_RESOURCE W_ERROR(0x0000139C) +#define WERR_NOT_QUORUM_CAPABLE W_ERROR(0x0000139D) +#define WERR_CLUSTER_SHUTTING_DOWN W_ERROR(0x0000139E) +#define WERR_INVALID_STATE W_ERROR(0x0000139F) +#define WERR_RESOURCE_PROPERTIES_STORED W_ERROR(0x000013A0) +#define WERR_NOT_QUORUM_CLASS W_ERROR(0x000013A1) +#define WERR_CORE_RESOURCE W_ERROR(0x000013A2) +#define WERR_QUORUM_RESOURCE_ONLINE_FAILED W_ERROR(0x000013A3) +#define WERR_QUORUMLOG_OPEN_FAILED W_ERROR(0x000013A4) +#define WERR_CLUSTERLOG_CORRUPT W_ERROR(0x000013A5) +#define WERR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE W_ERROR(0x000013A6) +#define WERR_CLUSTERLOG_EXCEEDS_MAXSIZE W_ERROR(0x000013A7) +#define WERR_CLUSTERLOG_CHKPOINT_NOT_FOUND W_ERROR(0x000013A8) +#define WERR_CLUSTERLOG_NOT_ENOUGH_SPACE W_ERROR(0x000013A9) +#define WERR_QUORUM_OWNER_ALIVE W_ERROR(0x000013AA) +#define WERR_NETWORK_NOT_AVAILABLE W_ERROR(0x000013AB) +#define WERR_NODE_NOT_AVAILABLE W_ERROR(0x000013AC) +#define WERR_ALL_NODES_NOT_AVAILABLE W_ERROR(0x000013AD) +#define WERR_RESOURCE_FAILED W_ERROR(0x000013AE) +#define WERR_CLUSTER_INVALID_NODE W_ERROR(0x000013AF) +#define WERR_CLUSTER_NODE_EXISTS W_ERROR(0x000013B0) +#define WERR_CLUSTER_JOIN_IN_PROGRESS W_ERROR(0x000013B1) +#define WERR_CLUSTER_NODE_NOT_FOUND W_ERROR(0x000013B2) +#define WERR_CLUSTER_LOCAL_NODE_NOT_FOUND W_ERROR(0x000013B3) +#define WERR_CLUSTER_NETWORK_EXISTS W_ERROR(0x000013B4) +#define WERR_CLUSTER_NETWORK_NOT_FOUND W_ERROR(0x000013B5) +#define WERR_CLUSTER_NETINTERFACE_EXISTS W_ERROR(0x000013B6) +#define WERR_CLUSTER_NETINTERFACE_NOT_FOUND W_ERROR(0x000013B7) +#define WERR_CLUSTER_INVALID_REQUEST W_ERROR(0x000013B8) +#define WERR_CLUSTER_INVALID_NETWORK_PROVIDER W_ERROR(0x000013B9) +#define WERR_CLUSTER_NODE_DOWN W_ERROR(0x000013BA) +#define WERR_CLUSTER_NODE_UNREACHABLE W_ERROR(0x000013BB) +#define WERR_CLUSTER_NODE_NOT_MEMBER W_ERROR(0x000013BC) +#define WERR_CLUSTER_JOIN_NOT_IN_PROGRESS W_ERROR(0x000013BD) +#define WERR_CLUSTER_INVALID_NETWORK W_ERROR(0x000013BE) +#define WERR_CLUSTER_NODE_UP W_ERROR(0x000013C0) +#define WERR_CLUSTER_IPADDR_IN_USE W_ERROR(0x000013C1) +#define WERR_CLUSTER_NODE_NOT_PAUSED W_ERROR(0x000013C2) +#define WERR_CLUSTER_NO_SECURITY_CONTEXT W_ERROR(0x000013C3) +#define WERR_CLUSTER_NETWORK_NOT_INTERNAL W_ERROR(0x000013C4) +#define WERR_CLUSTER_NODE_ALREADY_UP W_ERROR(0x000013C5) +#define WERR_CLUSTER_NODE_ALREADY_DOWN W_ERROR(0x000013C6) +#define WERR_CLUSTER_NETWORK_ALREADY_ONLINE W_ERROR(0x000013C7) +#define WERR_CLUSTER_NETWORK_ALREADY_OFFLINE W_ERROR(0x000013C8) +#define WERR_CLUSTER_NODE_ALREADY_MEMBER W_ERROR(0x000013C9) +#define WERR_CLUSTER_LAST_INTERNAL_NETWORK W_ERROR(0x000013CA) +#define WERR_CLUSTER_NETWORK_HAS_DEPENDENTS W_ERROR(0x000013CB) +#define WERR_INVALID_OPERATION_ON_QUORUM W_ERROR(0x000013CC) +#define WERR_DEPENDENCY_NOT_ALLOWED W_ERROR(0x000013CD) +#define WERR_CLUSTER_NODE_PAUSED W_ERROR(0x000013CE) +#define WERR_NODE_CANT_HOST_RESOURCE W_ERROR(0x000013CF) +#define WERR_CLUSTER_NODE_NOT_READY W_ERROR(0x000013D0) +#define WERR_CLUSTER_NODE_SHUTTING_DOWN W_ERROR(0x000013D1) +#define WERR_CLUSTER_JOIN_ABORTED W_ERROR(0x000013D2) +#define WERR_CLUSTER_INCOMPATIBLE_VERSIONS W_ERROR(0x000013D3) +#define WERR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED W_ERROR(0x000013D4) +#define WERR_CLUSTER_SYSTEM_CONFIG_CHANGED W_ERROR(0x000013D5) +#define WERR_CLUSTER_RESOURCE_TYPE_NOT_FOUND W_ERROR(0x000013D6) +#define WERR_CLUSTER_RESTYPE_NOT_SUPPORTED W_ERROR(0x000013D7) +#define WERR_CLUSTER_RESNAME_NOT_FOUND W_ERROR(0x000013D8) +#define WERR_CLUSTER_NO_RPC_PACKAGES_REGISTERED W_ERROR(0x000013D9) +#define WERR_CLUSTER_OWNER_NOT_IN_PREFLIST W_ERROR(0x000013DA) +#define WERR_CLUSTER_DATABASE_SEQMISMATCH W_ERROR(0x000013DB) +#define WERR_RESMON_INVALID_STATE W_ERROR(0x000013DC) +#define WERR_CLUSTER_GUM_NOT_LOCKER W_ERROR(0x000013DD) +#define WERR_QUORUM_DISK_NOT_FOUND W_ERROR(0x000013DE) +#define WERR_DATABASE_BACKUP_CORRUPT W_ERROR(0x000013DF) +#define WERR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT W_ERROR(0x000013E0) +#define WERR_RESOURCE_PROPERTY_UNCHANGEABLE W_ERROR(0x000013E1) +#define WERR_CLUSTER_MEMBERSHIP_INVALID_STATE W_ERROR(0x00001702) +#define WERR_CLUSTER_QUORUMLOG_NOT_FOUND W_ERROR(0x00001703) +#define WERR_CLUSTER_MEMBERSHIP_HALT W_ERROR(0x00001704) +#define WERR_CLUSTER_INSTANCE_ID_MISMATCH W_ERROR(0x00001705) +#define WERR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP W_ERROR(0x00001706) +#define WERR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH W_ERROR(0x00001707) +#define WERR_CLUSTER_EVICT_WITHOUT_CLEANUP W_ERROR(0x00001708) +#define WERR_CLUSTER_PARAMETER_MISMATCH W_ERROR(0x00001709) +#define WERR_NODE_CANNOT_BE_CLUSTERED W_ERROR(0x0000170A) +#define WERR_CLUSTER_WRONG_OS_VERSION W_ERROR(0x0000170B) +#define WERR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME W_ERROR(0x0000170C) +#define WERR_CLUSCFG_ALREADY_COMMITTED W_ERROR(0x0000170D) +#define WERR_CLUSCFG_ROLLBACK_FAILED W_ERROR(0x0000170E) +#define WERR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT W_ERROR(0x0000170F) +#define WERR_CLUSTER_OLD_VERSION W_ERROR(0x00001710) +#define WERR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME W_ERROR(0x00001711) +#define WERR_CLUSTER_NO_NET_ADAPTERS W_ERROR(0x00001712) +#define WERR_CLUSTER_POISONED W_ERROR(0x00001713) +#define WERR_CLUSTER_GROUP_MOVING W_ERROR(0x00001714) +#define WERR_CLUSTER_RESOURCE_TYPE_BUSY W_ERROR(0x00001715) +#define WERR_RESOURCE_CALL_TIMED_OUT W_ERROR(0x00001716) +#define WERR_INVALID_CLUSTER_IPV6_ADDRESS W_ERROR(0x00001717) +#define WERR_CLUSTER_INTERNAL_INVALID_FUNCTION W_ERROR(0x00001718) +#define WERR_CLUSTER_PARAMETER_OUT_OF_BOUNDS W_ERROR(0x00001719) +#define WERR_CLUSTER_PARTIAL_SEND W_ERROR(0x0000171A) +#define WERR_CLUSTER_REGISTRY_INVALID_FUNCTION W_ERROR(0x0000171B) +#define WERR_CLUSTER_INVALID_STRING_TERMINATION W_ERROR(0x0000171C) +#define WERR_CLUSTER_INVALID_STRING_FORMAT W_ERROR(0x0000171D) +#define WERR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS W_ERROR(0x0000171E) +#define WERR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS W_ERROR(0x0000171F) +#define WERR_CLUSTER_NULL_DATA W_ERROR(0x00001720) +#define WERR_CLUSTER_PARTIAL_READ W_ERROR(0x00001721) +#define WERR_CLUSTER_PARTIAL_WRITE W_ERROR(0x00001722) +#define WERR_CLUSTER_CANT_DESERIALIZE_DATA W_ERROR(0x00001723) +#define WERR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT W_ERROR(0x00001724) +#define WERR_CLUSTER_NO_QUORUM W_ERROR(0x00001725) +#define WERR_CLUSTER_INVALID_IPV6_NETWORK W_ERROR(0x00001726) +#define WERR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK W_ERROR(0x00001727) +#define WERR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP W_ERROR(0x00001728) +#define WERR_ENCRYPTION_FAILED W_ERROR(0x00001770) +#define WERR_DECRYPTION_FAILED W_ERROR(0x00001771) +#define WERR_FILE_ENCRYPTED W_ERROR(0x00001772) +#define WERR_NO_RECOVERY_POLICY W_ERROR(0x00001773) +#define WERR_NO_EFS W_ERROR(0x00001774) +#define WERR_WRONG_EFS W_ERROR(0x00001775) +#define WERR_NO_USER_KEYS W_ERROR(0x00001776) +#define WERR_FILE_NOT_ENCRYPTED W_ERROR(0x00001777) +#define WERR_NOT_EXPORT_FORMAT W_ERROR(0x00001778) +#define WERR_FILE_READ_ONLY W_ERROR(0x00001779) +#define WERR_DIR_EFS_DISALLOWED W_ERROR(0x0000177A) +#define WERR_EFS_SERVER_NOT_TRUSTED W_ERROR(0x0000177B) +#define WERR_BAD_RECOVERY_POLICY W_ERROR(0x0000177C) +#define WERR_EFS_ALG_BLOB_TOO_BIG W_ERROR(0x0000177D) +#define WERR_VOLUME_NOT_SUPPORT_EFS W_ERROR(0x0000177E) +#define WERR_EFS_DISABLED W_ERROR(0x0000177F) +#define WERR_EFS_VERSION_NOT_SUPPORT W_ERROR(0x00001780) +#define WERR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE W_ERROR(0x00001781) +#define WERR_CS_ENCRYPTION_UNSUPPORTED_SERVER W_ERROR(0x00001782) +#define WERR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE W_ERROR(0x00001783) +#define WERR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE W_ERROR(0x00001784) +#define WERR_CS_ENCRYPTION_FILE_NOT_CSE W_ERROR(0x00001785) +#define WERR_NO_BROWSER_SERVERS_FOUND W_ERROR(0x000017E6) +#define WERR_LOG_SECTOR_INVALID W_ERROR(0x000019C8) +#define WERR_LOG_SECTOR_PARITY_INVALID W_ERROR(0x000019C9) +#define WERR_LOG_SECTOR_REMAPPED W_ERROR(0x000019CA) +#define WERR_LOG_BLOCK_INCOMPLETE W_ERROR(0x000019CB) +#define WERR_LOG_INVALID_RANGE W_ERROR(0x000019CC) +#define WERR_LOG_BLOCKS_EXHAUSTED W_ERROR(0x000019CD) +#define WERR_LOG_READ_CONTEXT_INVALID W_ERROR(0x000019CE) +#define WERR_LOG_RESTART_INVALID W_ERROR(0x000019CF) +#define WERR_LOG_BLOCK_VERSION W_ERROR(0x000019D0) +#define WERR_LOG_BLOCK_INVALID W_ERROR(0x000019D1) +#define WERR_LOG_READ_MODE_INVALID W_ERROR(0x000019D2) +#define WERR_LOG_NO_RESTART W_ERROR(0x000019D3) +#define WERR_LOG_METADATA_CORRUPT W_ERROR(0x000019D4) +#define WERR_LOG_METADATA_INVALID W_ERROR(0x000019D5) +#define WERR_LOG_METADATA_INCONSISTENT W_ERROR(0x000019D6) +#define WERR_LOG_RESERVATION_INVALID W_ERROR(0x000019D7) +#define WERR_LOG_CANT_DELETE W_ERROR(0x000019D8) +#define WERR_LOG_CONTAINER_LIMIT_EXCEEDED W_ERROR(0x000019D9) +#define WERR_LOG_START_OF_LOG W_ERROR(0x000019DA) +#define WERR_LOG_POLICY_ALREADY_INSTALLED W_ERROR(0x000019DB) +#define WERR_LOG_POLICY_NOT_INSTALLED W_ERROR(0x000019DC) +#define WERR_LOG_POLICY_INVALID W_ERROR(0x000019DD) +#define WERR_LOG_POLICY_CONFLICT W_ERROR(0x000019DE) +#define WERR_LOG_PINNED_ARCHIVE_TAIL W_ERROR(0x000019DF) +#define WERR_LOG_RECORD_NONEXISTENT W_ERROR(0x000019E0) +#define WERR_LOG_RECORDS_RESERVED_INVALID W_ERROR(0x000019E1) +#define WERR_LOG_SPACE_RESERVED_INVALID W_ERROR(0x000019E2) +#define WERR_LOG_TAIL_INVALID W_ERROR(0x000019E3) +#define WERR_LOG_FULL W_ERROR(0x000019E4) +#define WERR_COULD_NOT_RESIZE_LOG W_ERROR(0x000019E5) +#define WERR_LOG_MULTIPLEXED W_ERROR(0x000019E6) +#define WERR_LOG_DEDICATED W_ERROR(0x000019E7) +#define WERR_LOG_ARCHIVE_NOT_IN_PROGRESS W_ERROR(0x000019E8) +#define WERR_LOG_ARCHIVE_IN_PROGRESS W_ERROR(0x000019E9) +#define WERR_LOG_EPHEMERAL W_ERROR(0x000019EA) +#define WERR_LOG_NOT_ENOUGH_CONTAINERS W_ERROR(0x000019EB) +#define WERR_LOG_CLIENT_ALREADY_REGISTERED W_ERROR(0x000019EC) +#define WERR_LOG_CLIENT_NOT_REGISTERED W_ERROR(0x000019ED) +#define WERR_LOG_FULL_HANDLER_IN_PROGRESS W_ERROR(0x000019EE) +#define WERR_LOG_CONTAINER_READ_FAILED W_ERROR(0x000019EF) +#define WERR_LOG_CONTAINER_WRITE_FAILED W_ERROR(0x000019F0) +#define WERR_LOG_CONTAINER_OPEN_FAILED W_ERROR(0x000019F1) +#define WERR_LOG_CONTAINER_STATE_INVALID W_ERROR(0x000019F2) +#define WERR_LOG_STATE_INVALID W_ERROR(0x000019F3) +#define WERR_LOG_PINNED W_ERROR(0x000019F4) +#define WERR_LOG_METADATA_FLUSH_FAILED W_ERROR(0x000019F5) +#define WERR_LOG_INCONSISTENT_SECURITY W_ERROR(0x000019F6) +#define WERR_LOG_APPENDED_FLUSH_FAILED W_ERROR(0x000019F7) +#define WERR_LOG_PINNED_RESERVATION W_ERROR(0x000019F8) +#define WERR_INVALID_TRANSACTION W_ERROR(0x00001A2C) +#define WERR_TRANSACTION_NOT_ACTIVE W_ERROR(0x00001A2D) +#define WERR_TRANSACTION_REQUEST_NOT_VALID W_ERROR(0x00001A2E) +#define WERR_TRANSACTION_NOT_REQUESTED W_ERROR(0x00001A2F) +#define WERR_TRANSACTION_ALREADY_ABORTED W_ERROR(0x00001A30) +#define WERR_TRANSACTION_ALREADY_COMMITTED W_ERROR(0x00001A31) +#define WERR_TM_INITIALIZATION_FAILED W_ERROR(0x00001A32) +#define WERR_RESOURCEMANAGER_READ_ONLY W_ERROR(0x00001A33) +#define WERR_TRANSACTION_NOT_JOINED W_ERROR(0x00001A34) +#define WERR_TRANSACTION_SUPERIOR_EXISTS W_ERROR(0x00001A35) +#define WERR_CRM_PROTOCOL_ALREADY_EXISTS W_ERROR(0x00001A36) +#define WERR_TRANSACTION_PROPAGATION_FAILED W_ERROR(0x00001A37) +#define WERR_CRM_PROTOCOL_NOT_FOUND W_ERROR(0x00001A38) +#define WERR_TRANSACTION_INVALID_MARSHALL_BUFFER W_ERROR(0x00001A39) +#define WERR_CURRENT_TRANSACTION_NOT_VALID W_ERROR(0x00001A3A) +#define WERR_TRANSACTION_NOT_FOUND W_ERROR(0x00001A3B) +#define WERR_RESOURCEMANAGER_NOT_FOUND W_ERROR(0x00001A3C) +#define WERR_ENLISTMENT_NOT_FOUND W_ERROR(0x00001A3D) +#define WERR_TRANSACTIONMANAGER_NOT_FOUND W_ERROR(0x00001A3E) +#define WERR_TRANSACTIONMANAGER_NOT_ONLINE W_ERROR(0x00001A3F) +#define WERR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION W_ERROR(0x00001A40) +#define WERR_TRANSACTIONAL_CONFLICT W_ERROR(0x00001A90) +#define WERR_RM_NOT_ACTIVE W_ERROR(0x00001A91) +#define WERR_RM_METADATA_CORRUPT W_ERROR(0x00001A92) +#define WERR_DIRECTORY_NOT_RM W_ERROR(0x00001A93) +#define WERR_TRANSACTIONS_UNSUPPORTED_REMOTE W_ERROR(0x00001A95) +#define WERR_LOG_RESIZE_INVALID_SIZE W_ERROR(0x00001A96) +#define WERR_OBJECT_NO_LONGER_EXISTS W_ERROR(0x00001A97) +#define WERR_STREAM_MINIVERSION_NOT_FOUND W_ERROR(0x00001A98) +#define WERR_STREAM_MINIVERSION_NOT_VALID W_ERROR(0x00001A99) +#define WERR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION W_ERROR(0x00001A9A) +#define WERR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT W_ERROR(0x00001A9B) +#define WERR_CANT_CREATE_MORE_STREAM_MINIVERSIONS W_ERROR(0x00001A9C) +#define WERR_REMOTE_FILE_VERSION_MISMATCH W_ERROR(0x00001A9E) +#define WERR_HANDLE_NO_LONGER_VALID W_ERROR(0x00001A9F) +#define WERR_NO_TXF_METADATA W_ERROR(0x00001AA0) +#define WERR_LOG_CORRUPTION_DETECTED W_ERROR(0x00001AA1) +#define WERR_CANT_RECOVER_WITH_HANDLE_OPEN W_ERROR(0x00001AA2) +#define WERR_RM_DISCONNECTED W_ERROR(0x00001AA3) +#define WERR_ENLISTMENT_NOT_SUPERIOR W_ERROR(0x00001AA4) +#define WERR_RECOVERY_NOT_NEEDED W_ERROR(0x00001AA5) +#define WERR_RM_ALREADY_STARTED W_ERROR(0x00001AA6) +#define WERR_FILE_IDENTITY_NOT_PERSISTENT W_ERROR(0x00001AA7) +#define WERR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY W_ERROR(0x00001AA8) +#define WERR_CANT_CROSS_RM_BOUNDARY W_ERROR(0x00001AA9) +#define WERR_TXF_DIR_NOT_EMPTY W_ERROR(0x00001AAA) +#define WERR_INDOUBT_TRANSACTIONS_EXIST W_ERROR(0x00001AAB) +#define WERR_TM_VOLATILE W_ERROR(0x00001AAC) +#define WERR_ROLLBACK_TIMER_EXPIRED W_ERROR(0x00001AAD) +#define WERR_TXF_ATTRIBUTE_CORRUPT W_ERROR(0x00001AAE) +#define WERR_EFS_NOT_ALLOWED_IN_TRANSACTION W_ERROR(0x00001AAF) +#define WERR_TRANSACTIONAL_OPEN_NOT_ALLOWED W_ERROR(0x00001AB0) +#define WERR_LOG_GROWTH_FAILED W_ERROR(0x00001AB1) +#define WERR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE W_ERROR(0x00001AB2) +#define WERR_TXF_METADATA_ALREADY_PRESENT W_ERROR(0x00001AB3) +#define WERR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET W_ERROR(0x00001AB4) +#define WERR_TRANSACTION_REQUIRED_PROMOTION W_ERROR(0x00001AB5) +#define WERR_CANNOT_EXECUTE_FILE_IN_TRANSACTION W_ERROR(0x00001AB6) +#define WERR_TRANSACTIONS_NOT_FROZEN W_ERROR(0x00001AB7) +#define WERR_TRANSACTION_FREEZE_IN_PROGRESS W_ERROR(0x00001AB8) +#define WERR_NOT_SNAPSHOT_VOLUME W_ERROR(0x00001AB9) +#define WERR_NO_SAVEPOINT_WITH_OPEN_FILES W_ERROR(0x00001ABA) +#define WERR_DATA_LOST_REPAIR W_ERROR(0x00001ABB) +#define WERR_SPARSE_NOT_ALLOWED_IN_TRANSACTION W_ERROR(0x00001ABC) +#define WERR_TM_IDENTITY_MISMATCH W_ERROR(0x00001ABD) +#define WERR_FLOATED_SECTION W_ERROR(0x00001ABE) +#define WERR_CANNOT_ACCEPT_TRANSACTED_WORK W_ERROR(0x00001ABF) +#define WERR_CANNOT_ABORT_TRANSACTIONS W_ERROR(0x00001AC0) +#define WERR_CTX_WINSTATION_NAME_INVALID W_ERROR(0x00001B59) +#define WERR_CTX_INVALID_PD W_ERROR(0x00001B5A) +#define WERR_CTX_PD_NOT_FOUND W_ERROR(0x00001B5B) +#define WERR_CTX_WD_NOT_FOUND W_ERROR(0x00001B5C) +#define WERR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY W_ERROR(0x00001B5D) +#define WERR_CTX_SERVICE_NAME_COLLISION W_ERROR(0x00001B5E) +#define WERR_CTX_CLOSE_PENDING W_ERROR(0x00001B5F) +#define WERR_CTX_NO_OUTBUF W_ERROR(0x00001B60) +#define WERR_CTX_MODEM_INF_NOT_FOUND W_ERROR(0x00001B61) +#define WERR_CTX_INVALID_MODEMNAME W_ERROR(0x00001B62) +#define WERR_CTX_MODEM_RESPONSE_ERROR W_ERROR(0x00001B63) +#define WERR_CTX_MODEM_RESPONSE_TIMEOUT W_ERROR(0x00001B64) +#define WERR_CTX_MODEM_RESPONSE_NO_CARRIER W_ERROR(0x00001B65) +#define WERR_CTX_MODEM_RESPONSE_NO_DIALTONE W_ERROR(0x00001B66) +#define WERR_CTX_MODEM_RESPONSE_BUSY W_ERROR(0x00001B67) +#define WERR_CTX_MODEM_RESPONSE_VOICE W_ERROR(0x00001B68) +#define WERR_CTX_TD_ERROR W_ERROR(0x00001B69) +#define WERR_CTX_WINSTATION_NOT_FOUND W_ERROR(0x00001B6E) +#define WERR_CTX_WINSTATION_ALREADY_EXISTS W_ERROR(0x00001B6F) +#define WERR_CTX_WINSTATION_BUSY W_ERROR(0x00001B70) +#define WERR_CTX_BAD_VIDEO_MODE W_ERROR(0x00001B71) +#define WERR_CTX_GRAPHICS_INVALID W_ERROR(0x00001B7B) +#define WERR_CTX_LOGON_DISABLED W_ERROR(0x00001B7D) +#define WERR_CTX_NOT_CONSOLE W_ERROR(0x00001B7E) +#define WERR_CTX_CLIENT_QUERY_TIMEOUT W_ERROR(0x00001B80) +#define WERR_CTX_CONSOLE_DISCONNECT W_ERROR(0x00001B81) +#define WERR_CTX_CONSOLE_CONNECT W_ERROR(0x00001B82) +#define WERR_CTX_SHADOW_DENIED W_ERROR(0x00001B84) +#define WERR_CTX_WINSTATION_ACCESS_DENIED W_ERROR(0x00001B85) +#define WERR_CTX_INVALID_WD W_ERROR(0x00001B89) +#define WERR_CTX_SHADOW_INVALID W_ERROR(0x00001B8A) +#define WERR_CTX_SHADOW_DISABLED W_ERROR(0x00001B8B) +#define WERR_CTX_CLIENT_LICENSE_IN_USE W_ERROR(0x00001B8C) +#define WERR_CTX_CLIENT_LICENSE_NOT_SET W_ERROR(0x00001B8D) +#define WERR_CTX_LICENSE_NOT_AVAILABLE W_ERROR(0x00001B8E) +#define WERR_CTX_LICENSE_CLIENT_INVALID W_ERROR(0x00001B8F) +#define WERR_CTX_LICENSE_EXPIRED W_ERROR(0x00001B90) +#define WERR_CTX_SHADOW_NOT_RUNNING W_ERROR(0x00001B91) +#define WERR_CTX_SHADOW_ENDED_BY_MODE_CHANGE W_ERROR(0x00001B92) +#define WERR_ACTIVATION_COUNT_EXCEEDED W_ERROR(0x00001B93) +#define WERR_CTX_WINSTATIONS_DISABLED W_ERROR(0x00001B94) +#define WERR_CTX_ENCRYPTION_LEVEL_REQUIRED W_ERROR(0x00001B95) +#define WERR_CTX_SESSION_IN_USE W_ERROR(0x00001B96) +#define WERR_CTX_NO_FORCE_LOGOFF W_ERROR(0x00001B97) +#define WERR_CTX_ACCOUNT_RESTRICTION W_ERROR(0x00001B98) +#define WERR_RDP_PROTOCOL_ERROR W_ERROR(0x00001B99) +#define WERR_CTX_CDM_CONNECT W_ERROR(0x00001B9A) +#define WERR_CTX_CDM_DISCONNECT W_ERROR(0x00001B9B) +#define WERR_CTX_SECURITY_LAYER_ERROR W_ERROR(0x00001B9C) +#define WERR_TS_INCOMPATIBLE_SESSIONS W_ERROR(0x00001B9D) +#define WERR_FRS_ERR_INVALID_API_SEQUENCE W_ERROR(0x00001F41) +#define WERR_FRS_ERR_STARTING_SERVICE W_ERROR(0x00001F42) +#define WERR_FRS_ERR_STOPPING_SERVICE W_ERROR(0x00001F43) +#define WERR_FRS_ERR_INTERNAL_API W_ERROR(0x00001F44) +#define WERR_FRS_ERR_INTERNAL W_ERROR(0x00001F45) +#define WERR_FRS_ERR_SERVICE_COMM W_ERROR(0x00001F46) +#define WERR_FRS_ERR_INSUFFICIENT_PRIV W_ERROR(0x00001F47) +#define WERR_FRS_ERR_AUTHENTICATION W_ERROR(0x00001F48) +#define WERR_FRS_ERR_PARENT_INSUFFICIENT_PRIV W_ERROR(0x00001F49) +#define WERR_FRS_ERR_PARENT_AUTHENTICATION W_ERROR(0x00001F4A) +#define WERR_FRS_ERR_CHILD_TO_PARENT_COMM W_ERROR(0x00001F4B) +#define WERR_FRS_ERR_PARENT_TO_CHILD_COMM W_ERROR(0x00001F4C) +#define WERR_FRS_ERR_SYSVOL_POPULATE W_ERROR(0x00001F4D) +#define WERR_FRS_ERR_SYSVOL_POPULATE_TIMEOUT W_ERROR(0x00001F4E) +#define WERR_FRS_ERR_SYSVOL_IS_BUSY W_ERROR(0x00001F4F) +#define WERR_FRS_ERR_SYSVOL_DEMOTE W_ERROR(0x00001F50) +#define WERR_FRS_ERR_INVALID_SERVICE_PARAMETER W_ERROR(0x00001F51) +#define WERR_DS_NOT_INSTALLED W_ERROR(0x00002008) +#define WERR_DS_MEMBERSHIP_EVALUATED_LOCALLY W_ERROR(0x00002009) +#define WERR_DS_INVALID_ATTRIBUTE_YNTAX W_ERROR(0x0000200B) +#define WERR_DS_NO_RIDS_ALLOCATED W_ERROR(0x00002010) +#define WERR_DS_NO_MORE_RIDS W_ERROR(0x00002011) +#define WERR_DS_INCORRECT_ROLE_OWNER W_ERROR(0x00002012) +#define WERR_DS_RIDMGR_INIT_ERROR W_ERROR(0x00002013) +#define WERR_DS_CROSS_DOM_MOVE_ERROR W_ERROR(0x00002018) +#define WERR_DS_GC_NOT_AVAILABLE W_ERROR(0x00002019) +#define WERR_SHARED_POLICY W_ERROR(0x0000201A) +#define WERR_POLICY_OBJECT_NOT_FOUND W_ERROR(0x0000201B) +#define WERR_POLICY_ONLY_IN_DS W_ERROR(0x0000201C) +#define WERR_PROMOTION_ACTIVE W_ERROR(0x0000201D) +#define WERR_NO_PROMOTION_ACTIVE W_ERROR(0x0000201E) +#define WERR_DS_SIZELIMIT_EXCEEDED W_ERROR(0x00002023) +#define WERR_DS_AUTH_UNKNOWN W_ERROR(0x0000202A) +#define WERR_DS_IS_LEAF W_ERROR(0x00002033) +#define WERR_DS_OBJECT_RESULTS_TOO_LARGE W_ERROR(0x00002038) +#define WERR_DS_SERVER_DOWN W_ERROR(0x0000203A) +#define WERR_DS_LOCAL_ERROR W_ERROR(0x0000203B) +#define WERR_DS_ENCODING_ERROR W_ERROR(0x0000203C) +#define WERR_DS_DECODING_ERROR W_ERROR(0x0000203D) +#define WERR_DS_FILTER_UNKNOWN W_ERROR(0x0000203E) +#define WERR_DS_PARAM_ERROR W_ERROR(0x0000203F) +#define WERR_DS_NOT_SUPPORTED W_ERROR(0x00002040) +#define WERR_DS_NO_RESULTS_RETURNED W_ERROR(0x00002041) +#define WERR_DS_CONTROL_NOT_FOUND W_ERROR(0x00002042) +#define WERR_DS_CLIENT_LOOP W_ERROR(0x00002043) +#define WERR_DS_REFERRAL_LIMIT_EXCEEDED W_ERROR(0x00002044) +#define WERR_DS_SORT_CONTROL_MISSING W_ERROR(0x00002045) +#define WERR_DS_OFFSET_RANGE_ERROR W_ERROR(0x00002046) +#define WERR_DS_ROOT_MUST_BE_NC W_ERROR(0x0000206D) +#define WERR_DS_ADD_REPLICA_INHIBITED W_ERROR(0x0000206E) +#define WERR_DS_ATT_NOT_DEF_IN_SCHEMA W_ERROR(0x0000206F) +#define WERR_DS_MAX_OBJ_SIZE_EXCEEDED W_ERROR(0x00002070) +#define WERR_DS_NO_RDN_DEFINED_IN_SCHEMA W_ERROR(0x00002072) +#define WERR_DS_RDN_DOESNT_MATCH_SCHEMA W_ERROR(0x00002073) +#define WERR_DS_NO_REQUESTED_ATTS_FOUND W_ERROR(0x00002074) +#define WERR_DS_USER_BUFFER_TO_SMALL W_ERROR(0x00002075) +#define WERR_DS_ATT_IS_NOT_ON_OBJ W_ERROR(0x00002076) +#define WERR_DS_ILLEGAL_MOD_OPERATION W_ERROR(0x00002077) +#define WERR_DS_OBJ_TOO_LARGE W_ERROR(0x00002078) +#define WERR_DS_BAD_INSTANCE_TYPE W_ERROR(0x00002079) +#define WERR_DS_MASTERDSA_REQUIRED W_ERROR(0x0000207A) +#define WERR_DS_OBJECT_CLASS_REQUIRED W_ERROR(0x0000207B) +#define WERR_DS_MISSING_REQUIRED_ATT W_ERROR(0x0000207C) +#define WERR_DS_ATT_NOT_DEF_FOR_CLASS W_ERROR(0x0000207D) +#define WERR_DS_ATT_ALREADY_EXISTS W_ERROR(0x0000207E) +#define WERR_DS_CANT_ADD_ATT_VALUES W_ERROR(0x00002080) +#define WERR_DS_RANGE_CONSTRAINT W_ERROR(0x00002082) +#define WERR_DS_ATT_VAL_ALREADY_EXISTS W_ERROR(0x00002083) +#define WERR_DS_CANT_REM_MISSING_ATT W_ERROR(0x00002084) +#define WERR_DS_CANT_REM_MISSING_ATT_VAL W_ERROR(0x00002085) +#define WERR_DS_ROOT_CANT_BE_SUBREF W_ERROR(0x00002086) +#define WERR_DS_NO_CHAINING W_ERROR(0x00002087) +#define WERR_DS_NO_CHAINED_EVAL W_ERROR(0x00002088) +#define WERR_DS_NO_PARENT_OBJECT W_ERROR(0x00002089) +#define WERR_DS_PARENT_IS_AN_ALIAS W_ERROR(0x0000208A) +#define WERR_DS_CANT_MIX_MASTER_AND_REPS W_ERROR(0x0000208B) +#define WERR_DS_CHILDREN_EXIST W_ERROR(0x0000208C) +#define WERR_DS_ALIASED_OBJ_MISSING W_ERROR(0x0000208E) +#define WERR_DS_BAD_NAME_SYNTAX W_ERROR(0x0000208F) +#define WERR_DS_ALIAS_POINTS_TO_ALIAS W_ERROR(0x00002090) +#define WERR_DS_CANT_DEREF_ALIAS W_ERROR(0x00002091) +#define WERR_DS_OUT_OF_SCOPE W_ERROR(0x00002092) +#define WERR_DS_OBJECT_BEING_REMOVED W_ERROR(0x00002093) +#define WERR_DS_CANT_DELETE_DSA_OBJ W_ERROR(0x00002094) +#define WERR_DS_DSA_MUST_BE_INT_MASTER W_ERROR(0x00002096) +#define WERR_DS_CLASS_NOT_DSA W_ERROR(0x00002097) +#define WERR_DS_ILLEGAL_SUPERIOR W_ERROR(0x00002099) +#define WERR_DS_ATTRIBUTE_OWNED_BY_SAM W_ERROR(0x0000209A) +#define WERR_DS_NAME_TOO_MANY_PARTS W_ERROR(0x0000209B) +#define WERR_DS_NAME_TOO_LONG W_ERROR(0x0000209C) +#define WERR_DS_NAME_VALUE_TOO_LONG W_ERROR(0x0000209D) +#define WERR_DS_NAME_UNPARSEABLE W_ERROR(0x0000209E) +#define WERR_DS_NAME_TYPE_UNKNOWN W_ERROR(0x0000209F) +#define WERR_DS_NOT_AN_OBJECT W_ERROR(0x000020A0) +#define WERR_DS_SEC_DESC_TOO_SHORT W_ERROR(0x000020A1) +#define WERR_DS_SEC_DESC_INVALID W_ERROR(0x000020A2) +#define WERR_DS_NO_DELETED_NAME W_ERROR(0x000020A3) +#define WERR_DS_SUBREF_MUST_HAVE_PARENT W_ERROR(0x000020A4) +#define WERR_DS_NCNAME_MUST_BE_NC W_ERROR(0x000020A5) +#define WERR_DS_CANT_ADD_SYSTEM_ONLY W_ERROR(0x000020A6) +#define WERR_DS_CLASS_MUST_BE_CONCRETE W_ERROR(0x000020A7) +#define WERR_DS_INVALID_DMD W_ERROR(0x000020A8) +#define WERR_DS_OBJ_GUID_EXISTS W_ERROR(0x000020A9) +#define WERR_DS_NOT_ON_BACKLINK W_ERROR(0x000020AA) +#define WERR_DS_NO_CROSSREF_FOR_NC W_ERROR(0x000020AB) +#define WERR_DS_SHUTTING_DOWN W_ERROR(0x000020AC) +#define WERR_DS_UNKNOWN_OPERATION W_ERROR(0x000020AD) +#define WERR_DS_INVALID_ROLE_OWNER W_ERROR(0x000020AE) +#define WERR_DS_COULDNT_CONTACT_FSMO W_ERROR(0x000020AF) +#define WERR_DS_CROSS_NC_DN_RENAME W_ERROR(0x000020B0) +#define WERR_DS_CANT_MOD_SYSTEM_ONLY W_ERROR(0x000020B1) +#define WERR_DS_REPLICATOR_ONLY W_ERROR(0x000020B2) +#define WERR_DS_OBJ_CLASS_NOT_DEFINED W_ERROR(0x000020B3) +#define WERR_DS_OBJ_CLASS_NOT_SUBCLASS W_ERROR(0x000020B4) +#define WERR_DS_NAME_REFERENCE_INVALID W_ERROR(0x000020B5) +#define WERR_DS_CROSS_REF_EXISTS W_ERROR(0x000020B6) +#define WERR_DS_CANT_DEL_MASTER_CROSSREF W_ERROR(0x000020B7) +#define WERR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD W_ERROR(0x000020B8) +#define WERR_DS_NOTIFY_FILTER_TOO_COMPLEX W_ERROR(0x000020B9) +#define WERR_DS_DUP_RDN W_ERROR(0x000020BA) +#define WERR_DS_DUP_OID W_ERROR(0x000020BB) +#define WERR_DS_DUP_MAPI_ID W_ERROR(0x000020BC) +#define WERR_DS_DUP_SCHEMA_ID_GUID W_ERROR(0x000020BD) +#define WERR_DS_DUP_LDAP_DISPLAY_NAME W_ERROR(0x000020BE) +#define WERR_DS_SEMANTIC_ATT_TEST W_ERROR(0x000020BF) +#define WERR_DS_SYNTAX_MISMATCH W_ERROR(0x000020C0) +#define WERR_DS_EXISTS_IN_MUST_HAVE W_ERROR(0x000020C1) +#define WERR_DS_EXISTS_IN_MAY_HAVE W_ERROR(0x000020C2) +#define WERR_DS_NONEXISTENT_MAY_HAVE W_ERROR(0x000020C3) +#define WERR_DS_NONEXISTENT_MUST_HAVE W_ERROR(0x000020C4) +#define WERR_DS_AUX_CLS_TEST_FAIL W_ERROR(0x000020C5) +#define WERR_DS_NONEXISTENT_POSS_SUP W_ERROR(0x000020C6) +#define WERR_DS_SUB_CLS_TEST_FAIL W_ERROR(0x000020C7) +#define WERR_DS_BAD_RDN_ATT_ID_SYNTAX W_ERROR(0x000020C8) +#define WERR_DS_EXISTS_IN_AUX_CLS W_ERROR(0x000020C9) +#define WERR_DS_EXISTS_IN_SUB_CLS W_ERROR(0x000020CA) +#define WERR_DS_EXISTS_IN_POSS_SUP W_ERROR(0x000020CB) +#define WERR_DS_RECALCSCHEMA_FAILED W_ERROR(0x000020CC) +#define WERR_DS_TREE_DELETE_NOT_FINISHED W_ERROR(0x000020CD) +#define WERR_DS_CANT_DELETE W_ERROR(0x000020CE) +#define WERR_DS_ATT_SCHEMA_REQ_ID W_ERROR(0x000020CF) +#define WERR_DS_BAD_ATT_SCHEMA_SYNTAX W_ERROR(0x000020D0) +#define WERR_DS_CANT_CACHE_ATT W_ERROR(0x000020D1) +#define WERR_DS_CANT_CACHE_CLASS W_ERROR(0x000020D2) +#define WERR_DS_CANT_REMOVE_ATT_CACHE W_ERROR(0x000020D3) +#define WERR_DS_CANT_REMOVE_CLASS_CACHE W_ERROR(0x000020D4) +#define WERR_DS_CANT_RETRIEVE_DN W_ERROR(0x000020D5) +#define WERR_DS_MISSING_SUPREF W_ERROR(0x000020D6) +#define WERR_DS_CANT_RETRIEVE_INSTANCE W_ERROR(0x000020D7) +#define WERR_DS_CODE_INCONSISTENCY W_ERROR(0x000020D8) +#define WERR_DS_DATABASE_ERROR W_ERROR(0x000020D9) +#define WERR_DS_MISSING_EXPECTED_ATT W_ERROR(0x000020DB) +#define WERR_DS_NCNAME_MISSING_CR_REF W_ERROR(0x000020DC) +#define WERR_DS_SECURITY_CHECKING_ERROR W_ERROR(0x000020DD) +#define WERR_DS_GCVERIFY_ERROR W_ERROR(0x000020E1) +#define WERR_DS_CANT_FIND_DSA_OBJ W_ERROR(0x000020E3) +#define WERR_DS_CANT_FIND_EXPECTED_NC W_ERROR(0x000020E4) +#define WERR_DS_CANT_FIND_NC_IN_CACHE W_ERROR(0x000020E5) +#define WERR_DS_CANT_RETRIEVE_CHILD W_ERROR(0x000020E6) +#define WERR_DS_SECURITY_ILLEGAL_MODIFY W_ERROR(0x000020E7) +#define WERR_DS_CANT_REPLACE_HIDDEN_REC W_ERROR(0x000020E8) +#define WERR_DS_BAD_HIERARCHY_FILE W_ERROR(0x000020E9) +#define WERR_DS_BUILD_HIERARCHY_TABLE_FAILED W_ERROR(0x000020EA) +#define WERR_DS_CONFIG_PARAM_MISSING W_ERROR(0x000020EB) +#define WERR_DS_COUNTING_AB_INDICES_FAILED W_ERROR(0x000020EC) +#define WERR_DS_HIERARCHY_TABLE_MALLOC_FAILED W_ERROR(0x000020ED) +#define WERR_DS_INTERNAL_FAILURE W_ERROR(0x000020EE) +#define WERR_DS_UNKNOWN_ERROR W_ERROR(0x000020EF) +#define WERR_DS_ROOT_REQUIRES_CLASS_TOP W_ERROR(0x000020F0) +#define WERR_DS_REFUSING_FSMO_ROLES W_ERROR(0x000020F1) +#define WERR_DS_MISSING_FSMO_SETTINGS W_ERROR(0x000020F2) +#define WERR_DS_UNABLE_TO_SURRENDER_ROLES W_ERROR(0x000020F3) +#define WERR_DS_DRA_GENERIC W_ERROR(0x000020F4) +#define WERR_DS_DRA_BUSY W_ERROR(0x000020F6) +#define WERR_DS_DRA_DN_EXISTS W_ERROR(0x000020F9) +#define WERR_DS_DRA_INCONSISTENT_DIT W_ERROR(0x000020FB) +#define WERR_DS_DRA_CONNECTION_FAILED W_ERROR(0x000020FC) +#define WERR_DS_DRA_BAD_INSTANCE_TYPE W_ERROR(0x000020FD) +#define WERR_DS_DRA_MAIL_PROBLEM W_ERROR(0x000020FF) +#define WERR_DS_DRA_REF_ALREADY_EXISTS W_ERROR(0x00002100) +#define WERR_DS_DRA_REF_NOT_FOUND W_ERROR(0x00002101) +#define WERR_DS_DRA_OBJ_IS_REP_SOURCE W_ERROR(0x00002102) +#define WERR_DS_DRA_NOT_SUPPORTED W_ERROR(0x00002106) +#define WERR_DS_DRA_RPC_CANCELLED W_ERROR(0x00002107) +#define WERR_DS_DRA_SINK_DISABLED W_ERROR(0x00002109) +#define WERR_DS_DRA_NAME_COLLISION W_ERROR(0x0000210A) +#define WERR_DS_DRA_SOURCE_REINSTALLED W_ERROR(0x0000210B) +#define WERR_DS_DRA_MISSING_PARENT W_ERROR(0x0000210C) +#define WERR_DS_DRA_PREEMPTED W_ERROR(0x0000210D) +#define WERR_DS_DRA_ABANDON_SYNC W_ERROR(0x0000210E) +#define WERR_DS_DRA_SHUTDOWN W_ERROR(0x0000210F) +#define WERR_DS_DRA_INCOMPATIBLE_PARTIAL_SET W_ERROR(0x00002110) +#define WERR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA W_ERROR(0x00002111) +#define WERR_DS_DRA_EXTN_CONNECTION_FAILED W_ERROR(0x00002112) +#define WERR_DS_INSTALL_SCHEMA_MISMATCH W_ERROR(0x00002113) +#define WERR_DS_DUP_LINK_ID W_ERROR(0x00002114) +#define WERR_DS_NAME_ERROR_RESOLVING W_ERROR(0x00002115) +#define WERR_DS_NAME_ERROR_NOT_FOUND W_ERROR(0x00002116) +#define WERR_DS_NAME_ERROR_NOT_UNIQUE W_ERROR(0x00002117) +#define WERR_DS_NAME_ERROR_NO_MAPPING W_ERROR(0x00002118) +#define WERR_DS_NAME_ERROR_DOMAIN_ONLY W_ERROR(0x00002119) +#define WERR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING W_ERROR(0x0000211A) +#define WERR_DS_CONSTRUCTED_ATT_MOD W_ERROR(0x0000211B) +#define WERR_DS_WRONG_OM_OBJ_CLASS W_ERROR(0x0000211C) +#define WERR_DS_DRA_REPL_PENDING W_ERROR(0x0000211D) +#define WERR_DS_DS_REQUIRED W_ERROR(0x0000211E) +#define WERR_DS_INVALID_LDAP_DISPLAY_NAME W_ERROR(0x0000211F) +#define WERR_DS_NON_BASE_SEARCH W_ERROR(0x00002120) +#define WERR_DS_CANT_RETRIEVE_ATTS W_ERROR(0x00002121) +#define WERR_DS_BACKLINK_WITHOUT_LINK W_ERROR(0x00002122) +#define WERR_DS_EPOCH_MISMATCH W_ERROR(0x00002123) +#define WERR_DS_SRC_NAME_MISMATCH W_ERROR(0x00002124) +#define WERR_DS_SRC_AND_DST_NC_IDENTICAL W_ERROR(0x00002125) +#define WERR_DS_DST_NC_MISMATCH W_ERROR(0x00002126) +#define WERR_DS_NOT_AUTHORITIVE_FOR_DST_NC W_ERROR(0x00002127) +#define WERR_DS_SRC_GUID_MISMATCH W_ERROR(0x00002128) +#define WERR_DS_CANT_MOVE_DELETED_OBJECT W_ERROR(0x00002129) +#define WERR_DS_PDC_OPERATION_IN_PROGRESS W_ERROR(0x0000212A) +#define WERR_DS_CROSS_DOMAIN_CLEANUP_REQD W_ERROR(0x0000212B) +#define WERR_DS_ILLEGAL_XDOM_MOVE_OPERATION W_ERROR(0x0000212C) +#define WERR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS W_ERROR(0x0000212D) +#define WERR_DS_NC_MUST_HAVE_NC_PARENT W_ERROR(0x0000212E) +#define WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE W_ERROR(0x0000212F) +#define WERR_DS_DST_DOMAIN_NOT_NATIVE W_ERROR(0x00002130) +#define WERR_DS_MISSING_INFRASTRUCTURE_CONTAINER W_ERROR(0x00002131) +#define WERR_DS_CANT_MOVE_ACCOUNT_GROUP W_ERROR(0x00002132) +#define WERR_DS_CANT_MOVE_RESOURCE_GROUP W_ERROR(0x00002133) +#define WERR_DS_INVALID_SEARCH_FLAG W_ERROR(0x00002134) +#define WERR_DS_NO_TREE_DELETE_ABOVE_NC W_ERROR(0x00002135) +#define WERR_DS_COULDNT_LOCK_TREE_FOR_DELETE W_ERROR(0x00002136) +#define WERR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE W_ERROR(0x00002137) +#define WERR_DS_SAM_INIT_FAILURE W_ERROR(0x00002138) +#define WERR_DS_SENSITIVE_GROUP_VIOLATION W_ERROR(0x00002139) +#define WERR_DS_CANT_MOD_PRIMARYGROUPID W_ERROR(0x0000213A) +#define WERR_DS_ILLEGAL_BASE_SCHEMA_MOD W_ERROR(0x0000213B) +#define WERR_DS_NONSAFE_SCHEMA_CHANGE W_ERROR(0x0000213C) +#define WERR_DS_SCHEMA_UPDATE_DISALLOWED W_ERROR(0x0000213D) +#define WERR_DS_CANT_CREATE_UNDER_SCHEMA W_ERROR(0x0000213E) +#define WERR_DS_INVALID_GROUP_TYPE W_ERROR(0x00002141) +#define WERR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN W_ERROR(0x00002142) +#define WERR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN W_ERROR(0x00002143) +#define WERR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER W_ERROR(0x00002144) +#define WERR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER W_ERROR(0x00002145) +#define WERR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER W_ERROR(0x00002146) +#define WERR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER W_ERROR(0x00002147) +#define WERR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER W_ERROR(0x00002148) +#define WERR_DS_HAVE_PRIMARY_MEMBERS W_ERROR(0x00002149) +#define WERR_DS_STRING_SD_CONVERSION_FAILED W_ERROR(0x0000214A) +#define WERR_DS_NAMING_MASTER_GC W_ERROR(0x0000214B) +#define WERR_DS_COULDNT_UPDATE_SPNS W_ERROR(0x0000214D) +#define WERR_DS_CANT_RETRIEVE_SD W_ERROR(0x0000214E) +#define WERR_DS_KEY_NOT_UNIQUE W_ERROR(0x0000214F) +#define WERR_DS_WRONG_LINKED_ATT_SYNTAX W_ERROR(0x00002150) +#define WERR_DS_SAM_NEED_BOOTKEY_PASSWORD W_ERROR(0x00002151) +#define WERR_DS_SAM_NEED_BOOTKEY_FLOPPY W_ERROR(0x00002152) +#define WERR_DS_CANT_START W_ERROR(0x00002153) +#define WERR_DS_INIT_FAILURE W_ERROR(0x00002154) +#define WERR_DS_NO_PKT_PRIVACY_ON_CONNECTION W_ERROR(0x00002155) +#define WERR_DS_SOURCE_DOMAIN_IN_FOREST W_ERROR(0x00002156) +#define WERR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST W_ERROR(0x00002157) +#define WERR_DS_DESTINATION_AUDITING_NOT_ENABLED W_ERROR(0x00002158) +#define WERR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN W_ERROR(0x00002159) +#define WERR_DS_SRC_OBJ_NOT_GROUP_OR_USER W_ERROR(0x0000215A) +#define WERR_DS_SRC_SID_EXISTS_IN_FOREST W_ERROR(0x0000215B) +#define WERR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH W_ERROR(0x0000215C) +#define WERR_SAM_INIT_FAILURE W_ERROR(0x0000215D) +#define WERR_DS_DRA_SCHEMA_INFO_SHIP W_ERROR(0x0000215E) +#define WERR_DS_DRA_SCHEMA_CONFLICT W_ERROR(0x0000215F) +#define WERR_DS_DRA_EARLIER_SCHEMA_CONFLICT W_ERROR(0x00002160) +#define WERR_DS_DRA_OBJ_NC_MISMATCH W_ERROR(0x00002161) +#define WERR_DS_NC_STILL_HAS_DSAS W_ERROR(0x00002162) +#define WERR_DS_GC_REQUIRED W_ERROR(0x00002163) +#define WERR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY W_ERROR(0x00002164) +#define WERR_DS_NO_FPO_IN_UNIVERSAL_GROUPS W_ERROR(0x00002165) +#define WERR_DS_CANT_ADD_TO_GC W_ERROR(0x00002166) +#define WERR_DS_NO_CHECKPOINT_WITH_PDC W_ERROR(0x00002167) +#define WERR_DS_SOURCE_AUDITING_NOT_ENABLED W_ERROR(0x00002168) +#define WERR_DS_CANT_CREATE_IN_NONDOMAIN_NC W_ERROR(0x00002169) +#define WERR_DS_INVALID_NAME_FOR_SPN W_ERROR(0x0000216A) +#define WERR_DS_FILTER_USES_CONTRUCTED_ATTRS W_ERROR(0x0000216B) +#define WERR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED W_ERROR(0x0000216D) +#define WERR_DS_MUST_BE_RUN_ON_DST_DC W_ERROR(0x0000216E) +#define WERR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER W_ERROR(0x0000216F) +#define WERR_DS_CANT_TREE_DELETE_CRITICAL_OBJ W_ERROR(0x00002170) +#define WERR_DS_INIT_FAILURE_CONSOLE W_ERROR(0x00002171) +#define WERR_DS_SAM_INIT_FAILURE_CONSOLE W_ERROR(0x00002172) +#define WERR_DS_FOREST_VERSION_TOO_HIGH W_ERROR(0x00002173) +#define WERR_DS_DOMAIN_VERSION_TOO_HIGH W_ERROR(0x00002174) +#define WERR_DS_FOREST_VERSION_TOO_LOW W_ERROR(0x00002175) +#define WERR_DS_DOMAIN_VERSION_TOO_LOW W_ERROR(0x00002176) +#define WERR_DS_INCOMPATIBLE_VERSION W_ERROR(0x00002177) +#define WERR_DS_LOW_DSA_VERSION W_ERROR(0x00002178) +#define WERR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN W_ERROR(0x00002179) +#define WERR_DS_NOT_SUPPORTED_SORT_ORDER W_ERROR(0x0000217A) +#define WERR_DS_NAME_NOT_UNIQUE W_ERROR(0x0000217B) +#define WERR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 W_ERROR(0x0000217C) +#define WERR_DS_OUT_OF_VERSION_STORE W_ERROR(0x0000217D) +#define WERR_DS_INCOMPATIBLE_CONTROLS_USED W_ERROR(0x0000217E) +#define WERR_DS_NO_REF_DOMAIN W_ERROR(0x0000217F) +#define WERR_DS_RESERVED_LINK_ID W_ERROR(0x00002180) +#define WERR_DS_LINK_ID_NOT_AVAILABLE W_ERROR(0x00002181) +#define WERR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER W_ERROR(0x00002182) +#define WERR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE W_ERROR(0x00002183) +#define WERR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC W_ERROR(0x00002184) +#define WERR_DS_MODIFYDN_DISALLOWED_BY_FLAG W_ERROR(0x00002185) +#define WERR_DS_MODIFYDN_WRONG_GRANDPARENT W_ERROR(0x00002186) +#define WERR_DS_NAME_ERROR_TRUST_REFERRAL W_ERROR(0x00002187) +#define WERR_NOT_SUPPORTED_ON_STANDARD_SERVER W_ERROR(0x00002188) +#define WERR_DS_CANT_ACCESS_REMOTE_PART_OF_AD W_ERROR(0x00002189) +#define WERR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 W_ERROR(0x0000218A) +#define WERR_DS_THREAD_LIMIT_EXCEEDED W_ERROR(0x0000218B) +#define WERR_DS_NOT_CLOSEST W_ERROR(0x0000218C) +#define WERR_DS_SINGLE_USER_MODE_FAILED W_ERROR(0x0000218E) +#define WERR_DS_NTDSCRIPT_SYNTAX_ERROR W_ERROR(0x0000218F) +#define WERR_DS_NTDSCRIPT_PROCESS_ERROR W_ERROR(0x00002190) +#define WERR_DS_DIFFERENT_REPL_EPOCHS W_ERROR(0x00002191) +#define WERR_DS_DRS_EXTENSIONS_CHANGED W_ERROR(0x00002192) +#define WERR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR W_ERROR(0x00002193) +#define WERR_DS_EXISTS_IN_RDNATTID W_ERROR(0x00002196) +#define WERR_DS_AUTHORIZATION_FAILED W_ERROR(0x00002197) +#define WERR_DS_INVALID_SCRIPT W_ERROR(0x00002198) +#define WERR_DS_REMOTE_CROSSREF_OP_FAILED W_ERROR(0x00002199) +#define WERR_DS_CROSS_REF_BUSY W_ERROR(0x0000219A) +#define WERR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN W_ERROR(0x0000219B) +#define WERR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC W_ERROR(0x0000219C) +#define WERR_DS_DUPLICATE_ID_FOUND W_ERROR(0x0000219D) +#define WERR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT W_ERROR(0x0000219E) +#define WERR_DS_GROUP_CONVERSION_ERROR W_ERROR(0x0000219F) +#define WERR_DS_CANT_MOVE_APP_BASIC_GROUP W_ERROR(0x000021A0) +#define WERR_DS_CANT_MOVE_APP_QUERY_GROUP W_ERROR(0x000021A1) +#define WERR_DS_ROLE_NOT_VERIFIED W_ERROR(0x000021A2) +#define WERR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL W_ERROR(0x000021A3) +#define WERR_DS_DOMAIN_RENAME_IN_PROGRESS W_ERROR(0x000021A4) +#define WERR_DS_EXISTING_AD_CHILD_NC W_ERROR(0x000021A5) +#define WERR_DS_REPL_LIFETIME_EXCEEDED W_ERROR(0x000021A6) +#define WERR_DS_DISALLOWED_IN_SYSTEM_CONTAINER W_ERROR(0x000021A7) +#define WERR_DS_LDAP_SEND_QUEUE_FULL W_ERROR(0x000021A8) +#define WERR_DS_DRA_OUT_SCHEDULE_WINDOW W_ERROR(0x000021A9) +#define WERR_DS_POLICY_NOT_KNOWN W_ERROR(0x000021AA) +#define WERR_NO_SITE_SETTINGS_OBJECT W_ERROR(0x000021AB) +#define WERR_NO_SECRETS W_ERROR(0x000021AC) +#define WERR_NO_WRITABLE_DC_FOUND W_ERROR(0x000021AD) +#define WERR_DS_NO_SERVER_OBJECT W_ERROR(0x000021AE) +#define WERR_DS_NO_NTDSA_OBJECT W_ERROR(0x000021AF) +#define WERR_DS_NON_ASQ_SEARCH W_ERROR(0x000021B0) +#define WERR_DS_AUDIT_FAILURE W_ERROR(0x000021B1) +#define WERR_DS_INVALID_SEARCH_FLAG_SUBTREE W_ERROR(0x000021B2) +#define WERR_DS_INVALID_SEARCH_FLAG_TUPLE W_ERROR(0x000021B3) +#define WERR_IPSEC_QM_POLICY_EXISTS W_ERROR(0x000032C8) +#define WERR_IPSEC_QM_POLICY_NOT_FOUND W_ERROR(0x000032C9) +#define WERR_IPSEC_QM_POLICY_IN_USE W_ERROR(0x000032CA) +#define WERR_IPSEC_MM_POLICY_EXISTS W_ERROR(0x000032CB) +#define WERR_IPSEC_MM_POLICY_NOT_FOUND W_ERROR(0x000032CC) +#define WERR_IPSEC_MM_POLICY_IN_USE W_ERROR(0x000032CD) +#define WERR_IPSEC_MM_FILTER_EXISTS W_ERROR(0x000032CE) +#define WERR_IPSEC_MM_FILTER_NOT_FOUND W_ERROR(0x000032CF) +#define WERR_IPSEC_TRANSPORT_FILTER_EXISTS W_ERROR(0x000032D0) +#define WERR_IPSEC_TRANSPORT_FILTER_NOT_FOUND W_ERROR(0x000032D1) +#define WERR_IPSEC_MM_AUTH_EXISTS W_ERROR(0x000032D2) +#define WERR_IPSEC_MM_AUTH_NOT_FOUND W_ERROR(0x000032D3) +#define WERR_IPSEC_MM_AUTH_IN_USE W_ERROR(0x000032D4) +#define WERR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND W_ERROR(0x000032D5) +#define WERR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND W_ERROR(0x000032D6) +#define WERR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND W_ERROR(0x000032D7) +#define WERR_IPSEC_TUNNEL_FILTER_EXISTS W_ERROR(0x000032D8) +#define WERR_IPSEC_TUNNEL_FILTER_NOT_FOUND W_ERROR(0x000032D9) +#define WERR_IPSEC_MM_FILTER_PENDING_DELETION W_ERROR(0x000032DA) +#define WERR_IPSEC_TRANSPORT_FILTER_ENDING_DELETION W_ERROR(0x000032DB) +#define WERR_IPSEC_TUNNEL_FILTER_PENDING_DELETION W_ERROR(0x000032DC) +#define WERR_IPSEC_MM_POLICY_PENDING_ELETION W_ERROR(0x000032DD) +#define WERR_IPSEC_MM_AUTH_PENDING_DELETION W_ERROR(0x000032DE) +#define WERR_IPSEC_QM_POLICY_PENDING_DELETION W_ERROR(0x000032DF) +#define WERR_IPSEC_IKE_NEG_STATUS_BEGIN W_ERROR(0x000035E8) +#define WERR_IPSEC_IKE_AUTH_FAIL W_ERROR(0x000035E9) +#define WERR_IPSEC_IKE_ATTRIB_FAIL W_ERROR(0x000035EA) +#define WERR_IPSEC_IKE_NEGOTIATION_PENDING W_ERROR(0x000035EB) +#define WERR_IPSEC_IKE_GENERAL_PROCESSING_ERROR W_ERROR(0x000035EC) +#define WERR_IPSEC_IKE_TIMED_OUT W_ERROR(0x000035ED) +#define WERR_IPSEC_IKE_NO_CERT W_ERROR(0x000035EE) +#define WERR_IPSEC_IKE_SA_DELETED W_ERROR(0x000035EF) +#define WERR_IPSEC_IKE_SA_REAPED W_ERROR(0x000035F0) +#define WERR_IPSEC_IKE_MM_ACQUIRE_DROP W_ERROR(0x000035F1) +#define WERR_IPSEC_IKE_QM_ACQUIRE_DROP W_ERROR(0x000035F2) +#define WERR_IPSEC_IKE_QUEUE_DROP_MM W_ERROR(0x000035F3) +#define WERR_IPSEC_IKE_QUEUE_DROP_NO_MM W_ERROR(0x000035F4) +#define WERR_IPSEC_IKE_DROP_NO_RESPONSE W_ERROR(0x000035F5) +#define WERR_IPSEC_IKE_MM_DELAY_DROP W_ERROR(0x000035F6) +#define WERR_IPSEC_IKE_QM_DELAY_DROP W_ERROR(0x000035F7) +#define WERR_IPSEC_IKE_ERROR W_ERROR(0x000035F8) +#define WERR_IPSEC_IKE_CRL_FAILED W_ERROR(0x000035F9) +#define WERR_IPSEC_IKE_INVALID_KEY_USAGE W_ERROR(0x000035FA) +#define WERR_IPSEC_IKE_INVALID_CERT_TYPE W_ERROR(0x000035FB) +#define WERR_IPSEC_IKE_NO_PRIVATE_KEY W_ERROR(0x000035FC) +#define WERR_IPSEC_IKE_DH_FAIL W_ERROR(0x000035FE) +#define WERR_IPSEC_IKE_INVALID_HEADER W_ERROR(0x00003600) +#define WERR_IPSEC_IKE_NO_POLICY W_ERROR(0x00003601) +#define WERR_IPSEC_IKE_INVALID_SIGNATURE W_ERROR(0x00003602) +#define WERR_IPSEC_IKE_KERBEROS_ERROR W_ERROR(0x00003603) +#define WERR_IPSEC_IKE_NO_PUBLIC_KEY W_ERROR(0x00003604) +#define WERR_IPSEC_IKE_PROCESS_ERR W_ERROR(0x00003605) +#define WERR_IPSEC_IKE_PROCESS_ERR_SA W_ERROR(0x00003606) +#define WERR_IPSEC_IKE_PROCESS_ERR_PROP W_ERROR(0x00003607) +#define WERR_IPSEC_IKE_PROCESS_ERR_TRANS W_ERROR(0x00003608) +#define WERR_IPSEC_IKE_PROCESS_ERR_KE W_ERROR(0x00003609) +#define WERR_IPSEC_IKE_PROCESS_ERR_ID W_ERROR(0x0000360A) +#define WERR_IPSEC_IKE_PROCESS_ERR_CERT W_ERROR(0x0000360B) +#define WERR_IPSEC_IKE_PROCESS_ERR_CERT_REQ W_ERROR(0x0000360C) +#define WERR_IPSEC_IKE_PROCESS_ERR_HASH W_ERROR(0x0000360D) +#define WERR_IPSEC_IKE_PROCESS_ERR_SIG W_ERROR(0x0000360E) +#define WERR_IPSEC_IKE_PROCESS_ERR_NONCE W_ERROR(0x0000360F) +#define WERR_IPSEC_IKE_PROCESS_ERR_NOTIFY W_ERROR(0x00003610) +#define WERR_IPSEC_IKE_PROCESS_ERR_DELETE W_ERROR(0x00003611) +#define WERR_IPSEC_IKE_PROCESS_ERR_VENDOR W_ERROR(0x00003612) +#define WERR_IPSEC_IKE_INVALID_PAYLOAD W_ERROR(0x00003613) +#define WERR_IPSEC_IKE_LOAD_SOFT_SA W_ERROR(0x00003614) +#define WERR_IPSEC_IKE_SOFT_SA_TORN_DOWN W_ERROR(0x00003615) +#define WERR_IPSEC_IKE_INVALID_COOKIE W_ERROR(0x00003616) +#define WERR_IPSEC_IKE_NO_PEER_CERT W_ERROR(0x00003617) +#define WERR_IPSEC_IKE_PEER_CRL_FAILED W_ERROR(0x00003618) +#define WERR_IPSEC_IKE_POLICY_CHANGE W_ERROR(0x00003619) +#define WERR_IPSEC_IKE_NO_MM_POLICY W_ERROR(0x0000361A) +#define WERR_IPSEC_IKE_NOTCBPRIV W_ERROR(0x0000361B) +#define WERR_IPSEC_IKE_SECLOADFAIL W_ERROR(0x0000361C) +#define WERR_IPSEC_IKE_FAILSSPINIT W_ERROR(0x0000361D) +#define WERR_IPSEC_IKE_FAILQUERYSSP W_ERROR(0x0000361E) +#define WERR_IPSEC_IKE_SRVACQFAIL W_ERROR(0x0000361F) +#define WERR_IPSEC_IKE_SRVQUERYCRED W_ERROR(0x00003620) +#define WERR_IPSEC_IKE_GETSPIFAIL W_ERROR(0x00003621) +#define WERR_IPSEC_IKE_INVALID_FILTER W_ERROR(0x00003622) +#define WERR_IPSEC_IKE_OUT_OF_MEMORY W_ERROR(0x00003623) +#define WERR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED W_ERROR(0x00003624) +#define WERR_IPSEC_IKE_INVALID_POLICY W_ERROR(0x00003625) +#define WERR_IPSEC_IKE_UNKNOWN_DOI W_ERROR(0x00003626) +#define WERR_IPSEC_IKE_INVALID_SITUATION W_ERROR(0x00003627) +#define WERR_IPSEC_IKE_DH_FAILURE W_ERROR(0x00003628) +#define WERR_IPSEC_IKE_INVALID_GROUP W_ERROR(0x00003629) +#define WERR_IPSEC_IKE_ENCRYPT W_ERROR(0x0000362A) +#define WERR_IPSEC_IKE_DECRYPT W_ERROR(0x0000362B) +#define WERR_IPSEC_IKE_POLICY_MATCH W_ERROR(0x0000362C) +#define WERR_IPSEC_IKE_UNSUPPORTED_ID W_ERROR(0x0000362D) +#define WERR_IPSEC_IKE_INVALID_HASH W_ERROR(0x0000362E) +#define WERR_IPSEC_IKE_INVALID_HASH_ALG W_ERROR(0x0000362F) +#define WERR_IPSEC_IKE_INVALID_HASH_SIZE W_ERROR(0x00003630) +#define WERR_IPSEC_IKE_INVALID_ENCRYPT_ALG W_ERROR(0x00003631) +#define WERR_IPSEC_IKE_INVALID_AUTH_ALG W_ERROR(0x00003632) +#define WERR_IPSEC_IKE_INVALID_SIG W_ERROR(0x00003633) +#define WERR_IPSEC_IKE_LOAD_FAILED W_ERROR(0x00003634) +#define WERR_IPSEC_IKE_RPC_DELETE W_ERROR(0x00003635) +#define WERR_IPSEC_IKE_BENIGN_REINIT W_ERROR(0x00003636) +#define WERR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY W_ERROR(0x00003637) +#define WERR_IPSEC_IKE_INVALID_CERT_KEYLEN W_ERROR(0x00003639) +#define WERR_IPSEC_IKE_MM_LIMIT W_ERROR(0x0000363A) +#define WERR_IPSEC_IKE_NEGOTIATION_DISABLED W_ERROR(0x0000363B) +#define WERR_IPSEC_IKE_QM_LIMIT W_ERROR(0x0000363C) +#define WERR_IPSEC_IKE_MM_EXPIRED W_ERROR(0x0000363D) +#define WERR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID W_ERROR(0x0000363E) +#define WERR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH W_ERROR(0x0000363F) +#define WERR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID W_ERROR(0x00003640) +#define WERR_IPSEC_IKE_INVALID_UMATTS W_ERROR(0x00003641) +#define WERR_IPSEC_IKE_DOS_COOKIE_SENT W_ERROR(0x00003642) +#define WERR_IPSEC_IKE_SHUTTING_DOWN W_ERROR(0x00003643) +#define WERR_IPSEC_IKE_CGA_AUTH_FAILED W_ERROR(0x00003644) +#define WERR_IPSEC_IKE_PROCESS_ERR_NATOA W_ERROR(0x00003645) +#define WERR_IPSEC_IKE_INVALID_MM_FOR_QM W_ERROR(0x00003646) +#define WERR_IPSEC_IKE_QM_EXPIRED W_ERROR(0x00003647) +#define WERR_IPSEC_IKE_TOO_MANY_FILTERS W_ERROR(0x00003648) +#define WERR_IPSEC_IKE_NEG_STATUS_END W_ERROR(0x00003649) +#define WERR_SXS_SECTION_NOT_FOUND W_ERROR(0x000036B0) +#define WERR_SXS_CANT_GEN_ACTCTX W_ERROR(0x000036B1) +#define WERR_SXS_INVALID_ACTCTXDATA_FORMAT W_ERROR(0x000036B2) +#define WERR_SXS_ASSEMBLY_NOT_FOUND W_ERROR(0x000036B3) +#define WERR_SXS_MANIFEST_FORMAT_ERROR W_ERROR(0x000036B4) +#define WERR_SXS_MANIFEST_PARSE_ERROR W_ERROR(0x000036B5) +#define WERR_SXS_ACTIVATION_CONTEXT_DISABLED W_ERROR(0x000036B6) +#define WERR_SXS_KEY_NOT_FOUND W_ERROR(0x000036B7) +#define WERR_SXS_VERSION_CONFLICT W_ERROR(0x000036B8) +#define WERR_SXS_WRONG_SECTION_TYPE W_ERROR(0x000036B9) +#define WERR_SXS_THREAD_QUERIES_DISABLED W_ERROR(0x000036BA) +#define WERR_SXS_PROCESS_DEFAULT_ALREADY_SET W_ERROR(0x000036BB) +#define WERR_SXS_UNKNOWN_ENCODING_GROUP W_ERROR(0x000036BC) +#define WERR_SXS_UNKNOWN_ENCODING W_ERROR(0x000036BD) +#define WERR_SXS_INVALID_XML_NAMESPACE_URI W_ERROR(0x000036BE) +#define WERR_SXS_ROOT_MANIFEST_DEPENDENCY_OT_INSTALLED W_ERROR(0x000036BF) +#define WERR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED W_ERROR(0x000036C0) +#define WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE W_ERROR(0x000036C1) +#define WERR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE W_ERROR(0x000036C2) +#define WERR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE W_ERROR(0x000036C3) +#define WERR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT W_ERROR(0x000036C4) +#define WERR_SXS_DUPLICATE_DLL_NAME W_ERROR(0x000036C5) +#define WERR_SXS_DUPLICATE_WINDOWCLASS_NAME W_ERROR(0x000036C6) +#define WERR_SXS_DUPLICATE_CLSID W_ERROR(0x000036C7) +#define WERR_SXS_DUPLICATE_IID W_ERROR(0x000036C8) +#define WERR_SXS_DUPLICATE_TLBID W_ERROR(0x000036C9) +#define WERR_SXS_DUPLICATE_PROGID W_ERROR(0x000036CA) +#define WERR_SXS_DUPLICATE_ASSEMBLY_NAME W_ERROR(0x000036CB) +#define WERR_SXS_FILE_HASH_MISMATCH W_ERROR(0x000036CC) +#define WERR_SXS_POLICY_PARSE_ERROR W_ERROR(0x000036CD) +#define WERR_SXS_XML_E_MISSINGQUOTE W_ERROR(0x000036CE) +#define WERR_SXS_XML_E_COMMENTSYNTAX W_ERROR(0x000036CF) +#define WERR_SXS_XML_E_BADSTARTNAMECHAR W_ERROR(0x000036D0) +#define WERR_SXS_XML_E_BADNAMECHAR W_ERROR(0x000036D1) +#define WERR_SXS_XML_E_BADCHARINSTRING W_ERROR(0x000036D2) +#define WERR_SXS_XML_E_XMLDECLSYNTAX W_ERROR(0x000036D3) +#define WERR_SXS_XML_E_BADCHARDATA W_ERROR(0x000036D4) +#define WERR_SXS_XML_E_MISSINGWHITESPACE W_ERROR(0x000036D5) +#define WERR_SXS_XML_E_EXPECTINGTAGEND W_ERROR(0x000036D6) +#define WERR_SXS_XML_E_MISSINGSEMICOLON W_ERROR(0x000036D7) +#define WERR_SXS_XML_E_UNBALANCEDPAREN W_ERROR(0x000036D8) +#define WERR_SXS_XML_E_INTERNALERROR W_ERROR(0x000036D9) +#define WERR_SXS_XML_E_UNEXPECTED_WHITESPACE W_ERROR(0x000036DA) +#define WERR_SXS_XML_E_INCOMPLETE_ENCODING W_ERROR(0x000036DB) +#define WERR_SXS_XML_E_MISSING_PAREN W_ERROR(0x000036DC) +#define WERR_SXS_XML_E_EXPECTINGCLOSEQUOTE W_ERROR(0x000036DD) +#define WERR_SXS_XML_E_MULTIPLE_COLONS W_ERROR(0x000036DE) +#define WERR_SXS_XML_E_INVALID_DECIMAL W_ERROR(0x000036DF) +#define WERR_SXS_XML_E_INVALID_HEXIDECIMAL W_ERROR(0x000036E0) +#define WERR_SXS_XML_E_INVALID_UNICODE W_ERROR(0x000036E1) +#define WERR_SXS_XML_E_WHITESPACEORQUESTIONMARK W_ERROR(0x000036E2) +#define WERR_SXS_XML_E_UNEXPECTEDENDTAG W_ERROR(0x000036E3) +#define WERR_SXS_XML_E_UNCLOSEDTAG W_ERROR(0x000036E4) +#define WERR_SXS_XML_E_DUPLICATEATTRIBUTE W_ERROR(0x000036E5) +#define WERR_SXS_XML_E_MULTIPLEROOTS W_ERROR(0x000036E6) +#define WERR_SXS_XML_E_INVALIDATROOTLEVEL W_ERROR(0x000036E7) +#define WERR_SXS_XML_E_BADXMLDECL W_ERROR(0x000036E8) +#define WERR_SXS_XML_E_MISSINGROOT W_ERROR(0x000036E9) +#define WERR_SXS_XML_E_UNEXPECTEDEOF W_ERROR(0x000036EA) +#define WERR_SXS_XML_E_BADPEREFINSUBSET W_ERROR(0x000036EB) +#define WERR_SXS_XML_E_UNCLOSEDSTARTTAG W_ERROR(0x000036EC) +#define WERR_SXS_XML_E_UNCLOSEDENDTAG W_ERROR(0x000036ED) +#define WERR_SXS_XML_E_UNCLOSEDSTRING W_ERROR(0x000036EE) +#define WERR_SXS_XML_E_UNCLOSEDCOMMENT W_ERROR(0x000036EF) +#define WERR_SXS_XML_E_UNCLOSEDDECL W_ERROR(0x000036F0) +#define WERR_SXS_XML_E_UNCLOSEDCDATA W_ERROR(0x000036F1) +#define WERR_SXS_XML_E_RESERVEDNAMESPACE W_ERROR(0x000036F2) +#define WERR_SXS_XML_E_INVALIDENCODING W_ERROR(0x000036F3) +#define WERR_SXS_XML_E_INVALIDSWITCH W_ERROR(0x000036F4) +#define WERR_SXS_XML_E_BADXMLCASE W_ERROR(0x000036F5) +#define WERR_SXS_XML_E_INVALID_STANDALONE W_ERROR(0x000036F6) +#define WERR_SXS_XML_E_UNEXPECTED_STANDALONE W_ERROR(0x000036F7) +#define WERR_SXS_XML_E_INVALID_VERSION W_ERROR(0x000036F8) +#define WERR_SXS_XML_E_MISSINGEQUALS W_ERROR(0x000036F9) +#define WERR_SXS_PROTECTION_RECOVERY_FAILED W_ERROR(0x000036FA) +#define WERR_SXS_PROTECTION_PUBLIC_KEY_OO_SHORT W_ERROR(0x000036FB) +#define WERR_SXS_PROTECTION_CATALOG_NOT_VALID W_ERROR(0x000036FC) +#define WERR_SXS_UNTRANSLATABLE_HRESULT W_ERROR(0x000036FD) +#define WERR_SXS_PROTECTION_CATALOG_FILE_MISSING W_ERROR(0x000036FE) +#define WERR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE W_ERROR(0x000036FF) +#define WERR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME W_ERROR(0x00003700) +#define WERR_SXS_ASSEMBLY_MISSING W_ERROR(0x00003701) +#define WERR_SXS_CORRUPT_ACTIVATION_STACK W_ERROR(0x00003702) +#define WERR_SXS_CORRUPTION W_ERROR(0x00003703) +#define WERR_SXS_EARLY_DEACTIVATION W_ERROR(0x00003704) +#define WERR_SXS_INVALID_DEACTIVATION W_ERROR(0x00003705) +#define WERR_SXS_MULTIPLE_DEACTIVATION W_ERROR(0x00003706) +#define WERR_SXS_PROCESS_TERMINATION_REQUESTED W_ERROR(0x00003707) +#define WERR_SXS_RELEASE_ACTIVATION_ONTEXT W_ERROR(0x00003708) +#define WERR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY W_ERROR(0x00003709) +#define WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE W_ERROR(0x0000370A) +#define WERR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME W_ERROR(0x0000370B) +#define WERR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE W_ERROR(0x0000370C) +#define WERR_SXS_IDENTITY_PARSE_ERROR W_ERROR(0x0000370D) +#define WERR_MALFORMED_SUBSTITUTION_STRING W_ERROR(0x0000370E) +#define WERR_SXS_INCORRECT_PUBLIC_KEY_OKEN W_ERROR(0x0000370F) +#define WERR_UNMAPPED_SUBSTITUTION_STRING W_ERROR(0x00003710) +#define WERR_SXS_ASSEMBLY_NOT_LOCKED W_ERROR(0x00003711) +#define WERR_SXS_COMPONENT_STORE_CORRUPT W_ERROR(0x00003712) +#define WERR_ADVANCED_INSTALLER_FAILED W_ERROR(0x00003713) +#define WERR_XML_ENCODING_MISMATCH W_ERROR(0x00003714) +#define WERR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT W_ERROR(0x00003715) +#define WERR_SXS_IDENTITIES_DIFFERENT W_ERROR(0x00003716) +#define WERR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT W_ERROR(0x00003717) +#define WERR_SXS_FILE_NOT_PART_OF_ASSEMBLY W_ERROR(0x00003718) +#define WERR_SXS_MANIFEST_TOO_BIG W_ERROR(0x00003719) +#define WERR_SXS_SETTING_NOT_REGISTERED W_ERROR(0x0000371A) +#define WERR_SXS_TRANSACTION_CLOSURE_INCOMPLETE W_ERROR(0x0000371B) +#define WERR_EVT_INVALID_CHANNEL_PATH W_ERROR(0x00003A98) +#define WERR_EVT_INVALID_QUERY W_ERROR(0x00003A99) +#define WERR_EVT_PUBLISHER_METADATA_NOT_FOUND W_ERROR(0x00003A9A) +#define WERR_EVT_EVENT_TEMPLATE_NOT_FOUND W_ERROR(0x00003A9B) +#define WERR_EVT_INVALID_PUBLISHER_NAME W_ERROR(0x00003A9C) +#define WERR_EVT_INVALID_EVENT_DATA W_ERROR(0x00003A9D) +#define WERR_EVT_CHANNEL_NOT_FOUND W_ERROR(0x00003A9F) +#define WERR_EVT_MALFORMED_XML_TEXT W_ERROR(0x00003AA0) +#define WERR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL W_ERROR(0x00003AA1) +#define WERR_EVT_CONFIGURATION_ERROR W_ERROR(0x00003AA2) +#define WERR_EVT_QUERY_RESULT_STALE W_ERROR(0x00003AA3) +#define WERR_EVT_QUERY_RESULT_INVALID_POSITION W_ERROR(0x00003AA4) +#define WERR_EVT_NON_VALIDATING_MSXML W_ERROR(0x00003AA5) +#define WERR_EVT_FILTER_ALREADYSCOPED W_ERROR(0x00003AA6) +#define WERR_EVT_FILTER_NOTELTSET W_ERROR(0x00003AA7) +#define WERR_EVT_FILTER_INVARG W_ERROR(0x00003AA8) +#define WERR_EVT_FILTER_INVTEST W_ERROR(0x00003AA9) +#define WERR_EVT_FILTER_INVTYPE W_ERROR(0x00003AAA) +#define WERR_EVT_FILTER_PARSEERR W_ERROR(0x00003AAB) +#define WERR_EVT_FILTER_UNSUPPORTEDOP W_ERROR(0x00003AAC) +#define WERR_EVT_FILTER_UNEXPECTEDTOKEN W_ERROR(0x00003AAD) +#define WERR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL W_ERROR(0x00003AAE) +#define WERR_EVT_INVALID_CHANNEL_PROPERTY_VALUE W_ERROR(0x00003AAF) +#define WERR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE W_ERROR(0x00003AB0) +#define WERR_EVT_CHANNEL_CANNOT_ACTIVATE W_ERROR(0x00003AB1) +#define WERR_EVT_FILTER_TOO_COMPLEX W_ERROR(0x00003AB2) +#define WERR_EVT_MESSAGE_NOT_FOUND W_ERROR(0x00003AB3) +#define WERR_EVT_MESSAGE_ID_NOT_FOUND W_ERROR(0x00003AB4) +#define WERR_EVT_UNRESOLVED_VALUE_INSERT W_ERROR(0x00003AB5) +#define WERR_EVT_UNRESOLVED_PARAMETER_INSERT W_ERROR(0x00003AB6) +#define WERR_EVT_MAX_INSERTS_REACHED W_ERROR(0x00003AB7) +#define WERR_EVT_EVENT_DEFINITION_NOT_OUND W_ERROR(0x00003AB8) +#define WERR_EVT_MESSAGE_LOCALE_NOT_FOUND W_ERROR(0x00003AB9) +#define WERR_EVT_VERSION_TOO_OLD W_ERROR(0x00003ABA) +#define WERR_EVT_VERSION_TOO_NEW W_ERROR(0x00003ABB) +#define WERR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY W_ERROR(0x00003ABC) +#define WERR_EVT_PUBLISHER_DISABLED W_ERROR(0x00003ABD) +#define WERR_EC_SUBSCRIPTION_CANNOT_ACTIVATE W_ERROR(0x00003AE8) +#define WERR_EC_LOG_DISABLED W_ERROR(0x00003AE9) +#define WERR_MUI_FILE_NOT_FOUND W_ERROR(0x00003AFC) +#define WERR_MUI_INVALID_FILE W_ERROR(0x00003AFD) +#define WERR_MUI_INVALID_RC_CONFIG W_ERROR(0x00003AFE) +#define WERR_MUI_INVALID_LOCALE_NAME W_ERROR(0x00003AFF) +#define WERR_MUI_INVALID_ULTIMATEFALLBACK_NAME W_ERROR(0x00003B00) +#define WERR_MUI_FILE_NOT_LOADED W_ERROR(0x00003B01) +#define WERR_RESOURCE_ENUM_USER_STOP W_ERROR(0x00003B02) +#define WERR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED W_ERROR(0x00003B03) +#define WERR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME W_ERROR(0x00003B04) +#define WERR_MCA_INVALID_CAPABILITIES_STRING W_ERROR(0x00003B60) +#define WERR_MCA_INVALID_VCP_VERSION W_ERROR(0x00003B61) +#define WERR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION W_ERROR(0x00003B62) +#define WERR_MCA_MCCS_VERSION_MISMATCH W_ERROR(0x00003B63) +#define WERR_MCA_UNSUPPORTED_MCCS_VERSION W_ERROR(0x00003B64) +#define WERR_MCA_INTERNAL_ERROR W_ERROR(0x00003B65) +#define WERR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED W_ERROR(0x00003B66) +#define WERR_MCA_UNSUPPORTED_COLOR_TEMPERATURE W_ERROR(0x00003B67) +#define WERR_AMBIGUOUS_SYSTEM_DEVICE W_ERROR(0x00003B92) +#define WERR_SYSTEM_DEVICE_NOT_FOUND W_ERROR(0x00003BC3) +/* END GENERATED-WIN32-ERROR-CODES */ + +/***************************************************************************** returns a windows error message. not amazingly helpful, but better than a number. *****************************************************************************/ const char *win_errstr(WERROR werror); |