static void set_registry_variables(WCHAR **env, HKEY hkey, DWORD type, BOOL set_path) { static const WCHAR SystemRootW[] = {'S','y','s','t','e','m','R','o','o','t',0}; static const WCHAR SystemDriveW[] = {'S','y','s','t','e','m','D','r','i','v','e',0}; static const WCHAR PATHW[] = {'P','A','T','H'}; UNICODE_STRING us_name, us_value; WCHAR name[1024], value[1024]; DWORD ret, index, size; for (index = 0; ; index++) { size = sizeof(name)/sizeof(WCHAR); ret = RegEnumValueW(hkey, index, name, &size, NULL, NULL, NULL, NULL); if (ret != ERROR_SUCCESS) break; if (!memicmpW(name, SystemRootW, sizeof(SystemRootW)/sizeof(WCHAR))) continue; if (!memicmpW(name, SystemDriveW, sizeof(SystemDriveW)/sizeof(WCHAR))) continue; RtlInitUnicodeString(&us_name, name); us_value.Buffer = value; us_value.MaximumLength = sizeof(value); if (!memicmpW(name, PATHW, sizeof(PATHW)/sizeof(WCHAR)) && !RtlQueryEnvironmentVariable_U(*env, &us_name, &us_value)) { if (!set_path) continue; size = strlenW(value)+1; if (!get_reg_value(*env, hkey, name, value+size, sizeof(value)-size*sizeof(WCHAR))) continue; value[size] = ';'; RtlInitUnicodeString(&us_value, value); RtlSetEnvironmentVariable(env, &us_name, &us_value); continue; } if (!get_reg_value(*env, hkey, name, value, sizeof(value))) continue; if(!value[0]) continue; RtlInitUnicodeString(&us_value, value); RtlSetEnvironmentVariable(env, &us_name, &us_value); } }
/* ** Comparison function for binary search. */ static int compKeyword(const void *m1, const void *m2){ const Keyword *k1 = m1, *k2 = m2; int ret, len = min( k1->len, k2->len ); if ((ret = memicmpW( k1->name, k2->name, len ))) return ret; if (k1->len < k2->len) return -1; else if (k1->len > k2->len) return 1; return 0; }
static WS_URL_SCHEME_TYPE scheme_type( const WCHAR *str, ULONG len ) { if (len == sizeof(http)/sizeof(http[0]) && !memicmpW( str, http, sizeof(http)/sizeof(http[0]) )) return WS_URL_HTTP_SCHEME_TYPE; if (len == sizeof(https)/sizeof(https[0]) && !memicmpW( str, https, sizeof(https)/sizeof(https[0]) )) return WS_URL_HTTPS_SCHEME_TYPE; if (len == sizeof(nettcp)/sizeof(nettcp[0]) && !memicmpW( str, nettcp, sizeof(nettcp)/sizeof(nettcp[0]) )) return WS_URL_NETTCP_SCHEME_TYPE; if (len == sizeof(soapudp)/sizeof(soapudp[0]) && !memicmpW( str, soapudp, sizeof(soapudp)/sizeof(soapudp[0]) )) return WS_URL_SOAPUDP_SCHEME_TYPE; if (len == sizeof(netpipe)/sizeof(netpipe[0]) && !memicmpW( str, netpipe, sizeof(netpipe)/sizeof(netpipe[0]) )) return WS_URL_NETPIPE_SCHEME_TYPE; return ~0u; }
void get_req_path(struct unicode_str *str, int skip_root) { static const WCHAR root_name[] = { '\\','R','e','g','i','s','t','r','y','\\' }; str->str = get_req_data(); str->len = (get_req_data_size() / sizeof(WCHAR)) * sizeof(WCHAR); if (skip_root && str->len >= sizeof(root_name) && !memicmpW(str->str, root_name, sizeof(root_name) / sizeof(WCHAR))) { str->str += sizeof(root_name) / sizeof(WCHAR); str->len -= sizeof(root_name); } }
static HRESULT do_preprocess(const Registrar *This, LPCOLESTR data, strbuf *buf) { LPCOLESTR iter, iter2 = data; rep_list *rep_iter; static const WCHAR wstr[] = {'%',0}; iter = strchrW(data, '%'); while(iter) { strbuf_write(iter2, buf, iter-iter2); iter2 = ++iter; if(!*iter2) return DISP_E_EXCEPTION; iter = strchrW(iter2, '%'); if(!iter) return DISP_E_EXCEPTION; if(iter == iter2) { strbuf_write(wstr, buf, 1); }else { for(rep_iter = This->rep; rep_iter; rep_iter = rep_iter->next) { if(rep_iter->key_len == iter-iter2 && !memicmpW(iter2, rep_iter->key, rep_iter->key_len)) break; } if(!rep_iter) { WARN("Could not find replacement: %s\n", debugstr_wn(iter2, iter-iter2)); return DISP_E_EXCEPTION; } strbuf_write(rep_iter->item, buf, -1); } iter2 = ++iter; iter = strchrW(iter, '%'); } strbuf_write(iter2, buf, -1); TRACE("%s\n", debugstr_w(buf->str)); return S_OK; }
static BOOL transfer_file_local(BackgroundCopyFileImpl *file, const WCHAR *tmpname) { static const WCHAR fileW[] = {'f','i','l','e',':','/','/',0}; BackgroundCopyJobImpl *job = file->owner; const WCHAR *ptr; BOOL ret; transitionJobState(job, BG_JOB_STATE_QUEUED, BG_JOB_STATE_TRANSFERRING); if (strlenW(file->info.RemoteName) > 7 && !memicmpW(file->info.RemoteName, fileW, 7)) ptr = file->info.RemoteName + 7; else ptr = file->info.RemoteName; if (!(ret = CopyFileExW(ptr, tmpname, progress_callback_local, file, NULL, 0))) { WARN("Local file copy failed: error %u\n", GetLastError()); transitionJobState(job, BG_JOB_STATE_TRANSFERRING, BG_JOB_STATE_ERROR); } SetEvent(job->done); return ret; }