Index: node_modules/node-gyp/lib/util.js
===================================================================
--- node_modules/node-gyp/lib/util.js	(revision 81bc7da776d8cda42939ef4ab350c88d13b4941f)
+++ node_modules/node-gyp/lib/util.js	(revision 81bc7da776d8cda42939ef4ab350c88d13b4941f)
@@ -0,0 +1,64 @@
+'use strict'
+
+const log = require('npmlog')
+const execFile = require('child_process').execFile
+const path = require('path')
+
+function logWithPrefix (log, prefix) {
+  function setPrefix (logFunction) {
+    return (...args) => logFunction.apply(null, [ prefix, ...args ]) // eslint-disable-line
+  }
+  return {
+    silly: setPrefix(log.silly),
+    verbose: setPrefix(log.verbose),
+    info: setPrefix(log.info),
+    warn: setPrefix(log.warn),
+    error: setPrefix(log.error)
+  }
+}
+
+function regGetValue (key, value, addOpts, cb) {
+  const outReValue = value.replace(/\W/g, '.')
+  const outRe = new RegExp(`^\\s+${outReValue}\\s+REG_\\w+\\s+(\\S.*)$`, 'im')
+  const reg = path.join(process.env.SystemRoot, 'System32', 'reg.exe')
+  const regArgs = ['query', key, '/v', value].concat(addOpts)
+
+  log.silly('reg', 'running', reg, regArgs)
+  const child = execFile(reg, regArgs, { encoding: 'utf8' },
+    function (err, stdout, stderr) {
+      log.silly('reg', 'reg.exe stdout = %j', stdout)
+      if (err || stderr.trim() !== '') {
+        log.silly('reg', 'reg.exe err = %j', err && (err.stack || err))
+        log.silly('reg', 'reg.exe stderr = %j', stderr)
+        return cb(err, stderr)
+      }
+
+      const result = outRe.exec(stdout)
+      if (!result) {
+        log.silly('reg', 'error parsing stdout')
+        return cb(new Error('Could not parse output of reg.exe'))
+      }
+      log.silly('reg', 'found: %j', result[1])
+      cb(null, result[1])
+    })
+  child.stdin.end()
+}
+
+function regSearchKeys (keys, value, addOpts, cb) {
+  var i = 0
+  const search = () => {
+    log.silly('reg-search', 'looking for %j in %j', value, keys[i])
+    regGetValue(keys[i], value, addOpts, (err, res) => {
+      ++i
+      if (err && i < keys.length) { return search() }
+      cb(err, res)
+    })
+  }
+  search()
+}
+
+module.exports = {
+  logWithPrefix: logWithPrefix,
+  regGetValue: regGetValue,
+  regSearchKeys: regSearchKeys
+}
