[PATCH 5/6] secur32: Use wide character string literals.

Hans Leidekker hans at codeweavers.com
Fri May 7 04:54:43 CDT 2021


Signed-off-by: Hans Leidekker <hans at codeweavers.com>
---
 dlls/secur32/lsa.c      |  5 +--
 dlls/secur32/schannel.c | 91 ++++++++++++++++-------------------------
 dlls/secur32/secur32.c  | 44 +++++++-------------
 3 files changed, 50 insertions(+), 90 deletions(-)

diff --git a/dlls/secur32/lsa.c b/dlls/secur32/lsa.c
index 694971d7146..6e586eb03c2 100644
--- a/dlls/secur32/lsa.c
+++ b/dlls/secur32/lsa.c
@@ -863,14 +863,11 @@ static BOOL load_package(const WCHAR *name, struct lsa_package *package, ULONG p
 
 void load_auth_packages(void)
 {
-    static const WCHAR LSA_KEY[] = { 'S','y','s','t','e','m','\\',
-        'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
-        'C','o','n','t','r','o','l','\\','L','s','a',0 };
     DWORD err, i;
     HKEY root;
     SecureProvider *provider;
 
-    err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, LSA_KEY, 0, KEY_READ, &root);
+    err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Control\\Lsa", 0, KEY_READ, &root);
     if (err != ERROR_SUCCESS) return;
 
     i = 0;
diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index adbc6a810ed..9d092f109fe 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -162,45 +162,34 @@ static void read_config(void)
     DWORD res;
 
     static BOOL config_read = FALSE;
-
-    static const WCHAR protocol_config_key_name[] = {
-        'S','Y','S','T','E','M','\\',
-        'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
-        'C','o','n','t','r','o','l','\\',
-        'S','e','c','u','r','i','t','y','P','r','o','v','i','d','e','r','s','\\',
-        'S','C','H','A','N','N','E','L','\\',
-        'P','r','o','t','o','c','o','l','s',0 };
-
-    static const WCHAR clientW[] = {'\\','C','l','i','e','n','t',0};
-    static const WCHAR enabledW[] = {'e','n','a','b','l','e','d',0};
-    static const WCHAR disabledbydefaultW[] = {'D','i','s','a','b','l','e','d','B','y','D','e','f','a','u','l','t',0};
-
     static const struct {
         WCHAR key_name[20];
         DWORD prot_client_flag;
         BOOL enabled; /* If no config is present, enable the protocol */
         BOOL disabled_by_default; /* Disable if caller asks for default protocol set */
     } protocol_config_keys[] = {
-        {{'S','S','L',' ','2','.','0',0}, SP_PROT_SSL2_CLIENT, FALSE, TRUE}, /* NOTE: TRUE, TRUE on Windows */
-        {{'S','S','L',' ','3','.','0',0}, SP_PROT_SSL3_CLIENT, TRUE, FALSE},
-        {{'T','L','S',' ','1','.','0',0}, SP_PROT_TLS1_0_CLIENT, TRUE, FALSE},
-        {{'T','L','S',' ','1','.','1',0}, SP_PROT_TLS1_1_CLIENT, TRUE, FALSE /* NOTE: not enabled by default on Windows */ },
-        {{'T','L','S',' ','1','.','2',0}, SP_PROT_TLS1_2_CLIENT, TRUE, FALSE /* NOTE: not enabled by default on Windows */ },
-        {{'D','T','L','S',' ','1','.','0',0}, SP_PROT_DTLS1_0_CLIENT, TRUE, TRUE },
-        {{'D','T','L','S',' ','1','.','2',0}, SP_PROT_DTLS1_2_CLIENT, TRUE, TRUE },
+        { L"SSL 2.0", SP_PROT_SSL2_CLIENT, FALSE, TRUE }, /* NOTE: TRUE, TRUE on Windows */
+        { L"SSL 3.0", SP_PROT_SSL3_CLIENT, TRUE, FALSE },
+        { L"TLS 1.0", SP_PROT_TLS1_0_CLIENT, TRUE, FALSE },
+        { L"TLS 1.1", SP_PROT_TLS1_1_CLIENT, TRUE, FALSE /* NOTE: not enabled by default on Windows */ },
+        { L"TLS 1.2", SP_PROT_TLS1_2_CLIENT, TRUE, FALSE /* NOTE: not enabled by default on Windows */ },
+        { L"DTLS 1.0", SP_PROT_DTLS1_0_CLIENT, TRUE, TRUE },
+        { L"DTLS 1.2", SP_PROT_DTLS1_2_CLIENT, TRUE, TRUE },
     };
 
     /* No need for thread safety */
     if(config_read)
         return;
 
-    res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, protocol_config_key_name, 0, KEY_READ, &protocols_key);
+    res = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+                        L"SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols", 0, KEY_READ,
+                        &protocols_key);
     if(res == ERROR_SUCCESS) {
         DWORD type, size, value;
 
         for(i = 0; i < ARRAY_SIZE(protocol_config_keys); i++) {
             wcscpy(subkey_name, protocol_config_keys[i].key_name);
-            wcscat(subkey_name, clientW);
+            wcscat(subkey_name, L"\\Client");
             res = RegOpenKeyExW(protocols_key, subkey_name, 0, KEY_READ, &key);
             if(res != ERROR_SUCCESS) {
                 if(protocol_config_keys[i].enabled)
@@ -211,7 +200,7 @@ static void read_config(void)
             }
 
             size = sizeof(value);
-            res = RegQueryValueExW(key, enabledW, NULL, &type, (BYTE*)&value, &size);
+            res = RegQueryValueExW(key, L"enabled", NULL, &type, (BYTE *)&value, &size);
             if(res == ERROR_SUCCESS) {
                 if(type == REG_DWORD && value)
                     enabled |= protocol_config_keys[i].prot_client_flag;
@@ -220,7 +209,7 @@ static void read_config(void)
             }
 
             size = sizeof(value);
-            res = RegQueryValueExW(key, disabledbydefaultW, NULL, &type, (BYTE*)&value, &size);
+            res = RegQueryValueExW(key, L"DisabledByDefault", NULL, &type, (BYTE *)&value, &size);
             if(res == ERROR_SUCCESS) {
                 if(type != REG_DWORD || value)
                     default_disabled |= protocol_config_keys[i].prot_client_flag;
@@ -391,8 +380,6 @@ static SECURITY_STATUS get_cert(const SCHANNEL_CRED *cred, CERT_CONTEXT const **
 
 static WCHAR *get_key_container_path(const CERT_CONTEXT *ctx)
 {
-    static const WCHAR rsabaseW[] =
-        {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\','C','r','y','p','t','o','\\','R','S','A','\\',0};
     CERT_KEY_CONTEXT keyctx;
     DWORD size = sizeof(keyctx), prov_size = 0;
     CRYPT_KEY_PROV_INFO *prov;
@@ -407,12 +394,12 @@ static WCHAR *get_key_container_path(const CERT_CONTEXT *ctx)
         if (!CryptGetProvParam(keyctx.hCryptProv, PP_CONTAINER, (BYTE *)str, &size, 0)) return NULL;
 
         len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
-        if (!(ret = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(rsabaseW) + len * sizeof(WCHAR))))
+        if (!(ret = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(L"Software\\Wine\\Crypto\\RSA\\") + len * sizeof(WCHAR))))
         {
             RtlFreeHeap(GetProcessHeap(), 0, str);
             return NULL;
         }
-        wcscpy(ret, rsabaseW);
+        wcscpy(ret, L"Software\\Wine\\Crypto\\RSA\\");
         MultiByteToWideChar(CP_ACP, 0, str, -1, ret + wcslen(ret), len);
         RtlFreeHeap(GetProcessHeap(), 0, str);
     }
@@ -425,20 +412,20 @@ static WCHAR *get_key_container_path(const CERT_CONTEXT *ctx)
             return NULL;
         }
         if (!(ret = RtlAllocateHeap(GetProcessHeap(), 0,
-                                    sizeof(rsabaseW) + wcslen(prov->pwszContainerName) * sizeof(WCHAR))))
+                                    sizeof(L"Software\\Wine\\Crypto\\RSA\\") + wcslen(prov->pwszContainerName) * sizeof(WCHAR))))
         {
             RtlFreeHeap(GetProcessHeap(), 0, prov);
             return NULL;
         }
-        wcscpy(ret, rsabaseW);
+        wcscpy(ret, L"Software\\Wine\\Crypto\\RSA\\");
         wcscat(ret, prov->pwszContainerName);
         RtlFreeHeap(GetProcessHeap(), 0, prov);
     }
 
-    if (!ret && GetUserNameW(username, &len) && (ret = RtlAllocateHeap(GetProcessHeap(), 0,
-                                                                       sizeof(rsabaseW) + len * sizeof(WCHAR))))
+    if (!ret && GetUserNameW(username, &len) &&
+        (ret = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(L"Software\\Wine\\Crypto\\RSA\\") + len * sizeof(WCHAR))))
     {
-        wcscpy(ret, rsabaseW);
+        wcscpy(ret, L"Software\\Wine\\Crypto\\RSA\\");
         wcscat(ret, username);
     }
 
@@ -448,10 +435,6 @@ static WCHAR *get_key_container_path(const CERT_CONTEXT *ctx)
 #define MAX_LEAD_BYTES 8
 static BYTE *get_key_blob(const CERT_CONTEXT *ctx, DWORD *size)
 {
-    static const WCHAR keyexchangeW[] =
-        {'K','e','y','E','x','c','h','a','n','g','e','K','e','y','P','a','i','r',0};
-    static const WCHAR signatureW[] =
-        {'S','i','g','n','a','t','u','r','e','K','e','y','P','a','i','r',0};
     BYTE *buf, *ret = NULL;
     DATA_BLOB blob_in, blob_out;
     DWORD spec = 0, type, len;
@@ -466,8 +449,8 @@ static BYTE *get_key_blob(const CERT_CONTEXT *ctx, DWORD *size)
     }
     RtlFreeHeap(GetProcessHeap(), 0, path);
 
-    if (!RegQueryValueExW(hkey, keyexchangeW, 0, &type, NULL, &len)) spec = AT_KEYEXCHANGE;
-    else if (!RegQueryValueExW(hkey, signatureW, 0, &type, NULL, &len)) spec = AT_SIGNATURE;
+    if (!RegQueryValueExW(hkey, L"KeyExchangeKeyPair", 0, &type, NULL, &len)) spec = AT_KEYEXCHANGE;
+    else if (!RegQueryValueExW(hkey, L"SignatureKeyPair", 0, &type, NULL, &len)) spec = AT_SIGNATURE;
     else
     {
         RegCloseKey(hkey);
@@ -480,7 +463,8 @@ static BYTE *get_key_blob(const CERT_CONTEXT *ctx, DWORD *size)
         return NULL;
     }
 
-    if (!RegQueryValueExW(hkey, (spec == AT_KEYEXCHANGE) ? keyexchangeW : signatureW, 0, &type, buf, &len))
+    if (!RegQueryValueExW(hkey, (spec == AT_KEYEXCHANGE) ? L"KeyExchangeKeyPair" : L"SignatureKeyPair", 0,
+                          &type, buf, &len))
     {
         blob_in.pbData = buf;
         blob_in.cbData = len;
@@ -1112,15 +1096,15 @@ static void *get_alg_name(ALG_ID id, BOOL wide)
         const char* name;
         const WCHAR nameW[8];
     } alg_name_map[] = {
-        { CALG_ECDSA,      "ECDSA", {'E','C','D','S','A',0} },
-        { CALG_RSA_SIGN,   "RSA",   {'R','S','A',0} },
-        { CALG_DES,        "DES",   {'D','E','S',0} },
-        { CALG_RC2,        "RC2",   {'R','C','2',0} },
-        { CALG_3DES,       "3DES",  {'3','D','E','S',0} },
-        { CALG_AES_128,    "AES",   {'A','E','S',0} },
-        { CALG_AES_192,    "AES",   {'A','E','S',0} },
-        { CALG_AES_256,    "AES",   {'A','E','S',0} },
-        { CALG_RC4,        "RC4",   {'R','C','4',0} },
+        { CALG_ECDSA,      "ECDSA", L"ECDSA" },
+        { CALG_RSA_SIGN,   "RSA",   L"RSA" },
+        { CALG_DES,        "DES",   L"DES" },
+        { CALG_RC2,        "RC2",   L"RC2" },
+        { CALG_3DES,       "3DES",  L"3DES" },
+        { CALG_AES_128,    "AES",   L"AES" },
+        { CALG_AES_192,    "AES",   L"AES" },
+        { CALG_AES_256,    "AES",   L"AES" },
+        { CALG_RC4,        "RC4",   L"RC4" },
     };
     unsigned i;
 
@@ -1668,10 +1652,6 @@ static const SecurityFunctionTableW schanTableW = {
     NULL, /* SetContextAttributesW */
 };
 
-static const WCHAR schannelComment[] = { 'S','c','h','a','n','n','e','l',' ',
- 'S','e','c','u','r','i','t','y',' ','P','a','c','k','a','g','e',0 };
-static const WCHAR schannelDllName[] = { 's','c','h','a','n','n','e','l','.','d','l','l',0 };
-
 const struct schan_callbacks schan_callbacks =
 {
     schan_get_buffer,
@@ -1701,8 +1681,7 @@ void SECUR32_initSchannelSP(void)
               *schannel = (SEC_WCHAR *)SCHANNEL_NAME_W;
     const SecPkgInfoW info[] = {
         { caps, version, UNISP_RPC_ID, maxToken, uniSPName, uniSPName },
-        { caps, version, UNISP_RPC_ID, maxToken, schannel,
-            (SEC_WCHAR *)schannelComment },
+        { caps, version, UNISP_RPC_ID, maxToken, schannel, (SEC_WCHAR *)L"Schannel Security Package" },
     };
     SecureProvider *provider;
 
@@ -1720,7 +1699,7 @@ void SECUR32_initSchannelSP(void)
     }
     schan_handle_table_size = 64;
 
-    provider = SECUR32_addProvider(&schanTableA, &schanTableW, schannelDllName);
+    provider = SECUR32_addProvider(&schanTableA, &schanTableW, L"schannel.dll");
     if (!provider)
     {
         ERR("Failed to add schannel provider.\n");
diff --git a/dlls/secur32/secur32.c b/dlls/secur32/secur32.c
index 374030d0064..fda7d7ef865 100644
--- a/dlls/secur32/secur32.c
+++ b/dlls/secur32/secur32.c
@@ -540,15 +540,6 @@ static void _tryLoadProvider(PWSTR moduleName)
         WARN("failed to load %s\n", debugstr_w(moduleName));
 }
 
-static const WCHAR securityProvidersKeyW[] = {
- 'S','Y','S','T','E','M','\\','C','u','r','r','e','n','t','C','o','n','t','r',
- 'o','l','S','e','t','\\','C','o','n','t','r','o','l','\\','S','e','c','u','r',
- 'i','t','y','P','r','o','v','i','d','e','r','s','\0'
- };
-static const WCHAR securityProvidersW[] = {
- 'S','e','c','u','r','i','t','y','P','r','o','v','i','d','e','r','s',0
- };
- 
 static void SECUR32_initializeProviders(void)
 {
     HKEY key;
@@ -564,15 +555,14 @@ static void SECUR32_initializeProviders(void)
      * application reported on wine-users on 2006-09-12 working. */
     SECUR32_initNegotiateSP();
     /* Now load providers from registry */
-    apiRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, securityProvidersKeyW, 0,
-     KEY_READ, &key);
+    apiRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\SecurityProviders", 0,
+                           KEY_READ, &key);
     if (apiRet == ERROR_SUCCESS)
     {
         WCHAR securityPkgNames[MAX_PATH]; /* arbitrary len */
         DWORD size = sizeof(securityPkgNames), type;
 
-        apiRet = RegQueryValueExW(key, securityProvidersW, NULL, &type,
-         (PBYTE)securityPkgNames, &size);
+        apiRet = RegQueryValueExW(key, L"SecurityProviders", NULL, &type, (PBYTE)securityPkgNames, &size);
         if (apiRet == ERROR_SUCCESS && type == REG_SZ)
         {
             WCHAR *ptr;
@@ -994,17 +984,15 @@ BOOLEAN WINAPI GetComputerObjectNameW(
                     DWORD len = domainInfo->Name.Length + size + 3;
                     if (lpNameBuffer && *nSize >= len)
                     {
-                        static const WCHAR bs[] = { '\\', 0 };
-                        static const WCHAR ds[] = { '$', 0 };
                         if (domainInfo->Name.Buffer)
                         {
                             lstrcpyW(lpNameBuffer, domainInfo->Name.Buffer);
-                            lstrcatW(lpNameBuffer, bs);
+                            lstrcatW(lpNameBuffer, L"\\");
                         }
                         else
                             *lpNameBuffer = 0;
                         lstrcatW(lpNameBuffer, name);
-                        lstrcatW(lpNameBuffer, ds);
+                        lstrcatW(lpNameBuffer, L"$");
                         status = TRUE;
                     }
                     else	/* just requesting length required */
@@ -1023,10 +1011,6 @@ BOOLEAN WINAPI GetComputerObjectNameW(
             break;
         case NameFullyQualifiedDN:
         {
-            static const WCHAR cnW[] = { 'C','N','=',0 };
-            static const WCHAR ComputersW[] = { 'C','N','=','C','o','m','p','u','t','e','r','s',0 };
-            static const WCHAR dcW[] = { 'D','C','=',0 };
-            static const WCHAR commaW[] = { ',',0 };
             WCHAR name[MAX_COMPUTERNAME_LENGTH + 1];
             DWORD len, size;
             WCHAR *suffix;
@@ -1038,14 +1022,14 @@ BOOLEAN WINAPI GetComputerObjectNameW(
                 break;
             }
 
-            len = wcslen(cnW) + size + 1 + wcslen(ComputersW) + 1 + wcslen(dcW);
+            len = wcslen(L"CN=") + size + 1 + wcslen(L"CN=Computers") + 1 + wcslen(L"DC=");
             if (domainInfo->DnsDomainName.Buffer)
             {
                 suffix = wcsrchr(domainInfo->DnsDomainName.Buffer, '.');
                 if (suffix)
                 {
                     *suffix++ = 0;
-                    len += 1 + wcslen(dcW) + wcslen(suffix);
+                    len += 1 + wcslen(L"DC=") + wcslen(suffix);
                 }
                 len += wcslen(domainInfo->DnsDomainName.Buffer);
             }
@@ -1054,19 +1038,19 @@ BOOLEAN WINAPI GetComputerObjectNameW(
 
             if (lpNameBuffer && *nSize > len)
             {
-                lstrcpyW(lpNameBuffer, cnW);
+                lstrcpyW(lpNameBuffer, L"CN=");
                 lstrcatW(lpNameBuffer, name);
-                lstrcatW(lpNameBuffer, commaW);
-                lstrcatW(lpNameBuffer, ComputersW);
+                lstrcatW(lpNameBuffer, L",");
+                lstrcatW(lpNameBuffer, L"CN=Computers");
                 if (domainInfo->DnsDomainName.Buffer)
                 {
-                    lstrcatW(lpNameBuffer, commaW);
-                    lstrcatW(lpNameBuffer, dcW);
+                    lstrcatW(lpNameBuffer, L",");
+                    lstrcatW(lpNameBuffer, L"DC=");
                     lstrcatW(lpNameBuffer, domainInfo->DnsDomainName.Buffer);
                     if (suffix)
                     {
-                        lstrcatW(lpNameBuffer, commaW);
-                        lstrcatW(lpNameBuffer, dcW);
+                        lstrcatW(lpNameBuffer, L",");
+                        lstrcatW(lpNameBuffer, L"DC=");
                         lstrcatW(lpNameBuffer, suffix);
                     }
                 }
-- 
2.30.2




More information about the wine-devel mailing list