{"_id":"@aabuhijleh/native-reg","_rev":"1-cb64f861c41d5b1b92b8219f0e1687c0","name":"@aabuhijleh/native-reg","dist-tags":{"latest":"0.3.4"},"versions":{"0.3.4":{"name":"@aabuhijleh/native-reg","description":"Native in-process low-level windows registry access.","version":"0.3.4","repository":{"type":"git","url":"git+https://github.com/simonbuchan/native-reg.git"},"bugs":{"url":"https://github.com/simonbuchan/native-reg/issues"},"license":"MIT","keywords":["windows","win32","registry","native"],"main":"lib/index.js","types":"lib/index.d.ts","gypfile":false,"scripts":{"install":"echo using prebuilds","prepare":"npm run rebuild","rebuild":"npm run clean && npm run build && npm run test","clean":"rimraf build lib prebuilds","build":"npm run build:js && npm run build:ia32 && npm run build:x64","build:js":"tsc -p src","build:ia32":"prebuildify --napi --target node@8.12.0 --arch ia32","build:x64":"prebuildify --napi --target node@8.12.0 --arch x64","test":"node test"},"dependencies":{"node-gyp-build":"^4.2.0"},"devDependencies":{"@types/node":"^10.11.0","node-addon-api":"^2.0.0","prebuildify":"^3.0.4","rimraf":"^3.0.0","typescript":"~3.7.3"},"homepage":"https://github.com/simonbuchan/native-reg#readme","directories":{"lib":"lib"},"author":"","gitHead":"16944a6c0c650920956aba8839e100311ef063d6","_id":"@aabuhijleh/native-reg@0.3.4","_nodeVersion":"12.5.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QtWH2StRGZm2lDIV1MtszxJ2ty+42czRiy6zZyS5POjS4Co/9m8T9vvuwcRLoIuAZ34r+704r2g2HyUdq8C0Rg==","shasum":"cef82af1102265bb1ab813bb96f339b596c74eb1","tarball":"https://registry.npmjs.org/@aabuhijleh/native-reg/-/native-reg-0.3.4.tgz","fileCount":14,"unpackedSize":336318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZRDDCRA9TVsSAnZWagAA7pYP/33cRlR76ffRIeXFI7RY\ndJ9aSwDIvZDVn4jBFajgANf1FTrqGo0UFBItm92PtefhCVn5XxY+z1IB3/W3\nrEXC/3f2AWlUMjq3y91KNVL3XpTWdktFVbHS/zAf17+qskaO1KQU5stIT0+9\nbjGl+1qUNZUqkRduuibl7Cyki4GNkccT/gh8s/v0K3ENRpBIs5tn02TCmJzc\nzq4hog6Bp5aykHBvVZJVFZvrFVxMq5csGSGTUBIQPO9o7AG0C69I6iBG60/E\nKUVTonnyK4DkeZp0AIbwLYNoCE+S0vdw721Lx8/WU9STVl8a6zdZhEhLnH3s\n2mJ6y3EFPaxwpRqWcFymSIeT/M5pS14Izb6RmAE6E2zoJhP2pwPPxcEW8uv/\nsA8pgT4DMMozqU+Jsw8V62YIRRqK4AW8p+GBh7Ts8mXrJWr5GvWY3371eJhl\nqg8zrvwBoBXiSizc21eWLY9cuaVXyzuqUh9NqpHeyh+M4FArEKWJoxxKUxD7\n3R/WJLebzaVTz161XAbFDQuVI5lYjJeXS6XZBTv30Qv+MiL17P356TnnKq4R\nP7Vjej+HI2N7EnmWRKlLVJT16emXfJRcHBcMHMRT5s1nWWFXO6F0n21xZtTl\nuLslNcVD9f/C9gUHmKjf3D/pcga8adcUErmkbhaoCOGC5tMOfGJz3IvpjgPn\nmcLz\r\n=0aSL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICghim1vp8ZriDtYTL4sREgmvwnGhNbxR545fhQkDiLXAiEAp3DjbASKNhCB39UR7TbC05eRUbef3hJi5myk0UEhZIs="}]},"maintainers":[{"name":"aabuhijleh","email":"aabuhijleh@asaltech.com"}],"_npmUser":{"name":"aabuhijleh","email":"aabuhijleh@asaltech.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native-reg_0.3.4_1583681731106_0.5429222016564652"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-08T15:35:30.870Z","0.3.4":"2020-03-08T15:35:31.314Z","modified":"2022-04-04T10:54:53.394Z"},"maintainers":[{"name":"aabuhijleh","email":"aabuhijleh@asaltech.com"}],"description":"Native in-process low-level windows registry access.","homepage":"https://github.com/simonbuchan/native-reg#readme","keywords":["windows","win32","registry","native"],"repository":{"type":"git","url":"git+https://github.com/simonbuchan/native-reg.git"},"bugs":{"url":"https://github.com/simonbuchan/native-reg/issues"},"license":"MIT","readme":"# `native-reg`\r\n\r\nIn process native module for Windows registry access.\r\n\r\n## Example\r\n\r\n```js\r\nconst reg = require('native-reg');\r\n\r\nconst key = reg.openKey(\r\n  reg.HKCU,\r\n  'Software\\\\MyCompany\\\\MySoftware',\r\n  reg.Access.ALL_ACCESS);\r\n\r\nconst version = reg.getValue(key, 'Install', 'Version');\r\n\r\nif (isOldVersion(version)) {\r\n    reg.deleteTree(key, 'Install');\r\n    \r\n    const installKey = reg.createKey(key, 'Install', reg.Access.ALL_ACCESS);\r\n    reg.setValue(installKey, 'Version', newVersion);\r\n    // ...\r\n    reg.closeKey(installKey);\r\n}\r\n\r\nreg.closeKey(key);\r\n```\r\n\r\n## API\r\n\r\nRead `index.ts` and linked Windows documentation for full details.\r\n\r\n### Errors\r\n\r\nThe API initially validates the arguments with the standard node `assert` library:\r\n\r\n```js\r\ntry {\r\n  // Should not be 'HKLM', but reg.HKLM or reg.HKEY.LOCAL_MACHINE\r\n  reg.openKey('HKLM', 'SOFTWARE\\\\Microsoft\\\\Windows', reg.Access.READ);\r\n  assert.fail();\r\n} catch (e) {\r\n  assert(e instanceof require('assert').AssertionError);\r\n}\r\n```\r\n\r\nIf the wrapped Windows API returns an error, with a couple of exceptions for\r\ncommonly non-failure errors (e.g. key does not exist), are thrown as JS `Error`s\r\nwith the generic error message, e.g.: `Access is denied.`, but additional\r\nstandard `errno` and `syscall` properties, for example, a common error is trying\r\nto use `Access.ALL_ACCESS` on `reg.HKLM`, which you need UAC elevation for:\r\n\r\n```js\r\ntry {\r\n  // Assuming you are not running as administrator!\r\n  reg.openKey(reg.HKLM, 'SOFTWARE\\\\Microsoft\\\\Windows', reg.Access.ALL_ACCESS);\r\n  assert.fail();\r\n} catch (e) {\r\n  assert.strictEqual(e.message, 'Access is denied.');\r\n  assert.strictEqual(e.errno, 5);\r\n  assert.strictEqual(e.syscall, 'RegOpenKeyExW');\r\n}\r\n```\r\n\r\n### Constants\r\n\r\nThis library uses Typescript `enum`s for constants, this generates a\r\ntwo way name <-> value mapping.\r\n\r\nFor example: `Access.SET_VALUE` is `0x0002`, and `Access[2]` is `\"SET_VALUE\"`.\r\n\r\n#### `HKEY` enum\r\n\r\nExports the set of predefined `HKEY`s.\r\n\r\n[`createKey`](#createkey), [`openKey`](#openkey), [`loadAppKey`](#loadappkey) and\r\n[`openCurrentUser`](#opencurrentuser) will return other values for `HKEY`s,\r\nwhich at the moment are objects with a single property `native` with the native\r\nHKEY handle as a V8 `External` value, for use in other native packages, or `null`\r\nafter it is closed.\r\nFor these values you can call [`closeKey`](#closekey) once you are done to clean up\r\nearly, but they will be closed by the garbage collector if you chose not to.\r\n\r\n```ts\r\nexport enum HKEY {\r\n  CLASSES_ROOT                   = 0x80000000,\r\n  CURRENT_USER                   = 0x80000001,\r\n  LOCAL_MACHINE                  = 0x80000002,\r\n  USERS                          = 0x80000003,\r\n  PERFORMANCE_DATA               = 0x80000004,\r\n  PERFORMANCE_TEXT               = 0x80000050,\r\n  PERFORMANCE_NLSTEXT            = 0x80000060,\r\n  CURRENT_CONFIG                 = 0x80000005,\r\n  DYN_DATA                       = 0x80000006,\r\n  CURRENT_USER_LOCAL_SETTINGS    = 0x80000007,\r\n}\r\n```\r\n\r\n##### Shorthands\r\n\r\nAlso exports the standard shorthand HKEY names:\r\n\r\n```ts\r\nexport const HKCR = HKEY.CLASSES_ROOT;\r\nexport const HKCU = HKEY.CURRENT_USER;\r\nexport const HKLM = HKEY.LOCAL_MACHINE;\r\nexport const HKU = HKEY.USERS;\r\n```\r\n\r\n##### `isHKEY`\r\n\r\nHelper returns if the argument is a valid-looking `HKEY`. Most APIs will throw\r\nan assertion error if `hkey` that does not return true for this is used.\r\n\r\nValid HKEY values are,\r\n* The values of the [`HKEY` enum](#hkey-enum)\r\n* Objects returned from [`createKey`](#createkey), [`openKey`](#openkey),\r\n  [`loadAppKey`](#loadappkey) and [`openCurrentUser`](#opencurrentuser)\r\n* `External` values that represent HKEYs (for example, from another node\r\n  addon)\r\n* Non-`0` 32-bit values that represent the pointer value of HKEYs\r\n  (for example, from another node addon) - not that this is unreliable on\r\n  64-bit applications, and should be avoided.\r\n\r\n```ts\r\nexport function isHKEY(hkey: any): boolean;\r\n```\r\n\r\n#### `Access` enum\r\n\r\nSpecifies access checks for opened or created keys. Not always enforced for\r\nopened keys:\r\n\r\n> Certain registry operations perform access checks against the security descriptor of the key, not the access mask specified when the handle to the key was obtained. For example, even if a key is opened with a samDesired of KEY_READ, it can be used to create registry keys if the key's security descriptor permits. In contrast, the RegSetValueEx function specifically requires that the key be opened with the KEY_SET_VALUE access right.\r\n\r\n```ts\r\n// from https://docs.microsoft.com/en-nz/windows/desktop/SysInfo/registry-key-security-and-access-rights\r\nexport enum Access {\r\n  // Specific rights\r\n  QUERY_VALUE         = 0x0001,\r\n  SET_VALUE           = 0x0002,\r\n  CREATE_SUB_KEY      = 0x0004,\r\n  ENUMERATE_SUB_KEYS  = 0x0008,\r\n  NOTIFY              = 0x0010,\r\n  CREATE_LINK         = 0x0020,\r\n\r\n  // WOW64. See https://docs.microsoft.com/en-nz/windows/desktop/WinProg64/accessing-an-alternate-registry-view\r\n  WOW64_64KEY         = 0x0100,\r\n  WOW64_32KEY         = 0x0200,\r\n\r\n  // Generic rights.\r\n  READ              = 0x2_0019,\r\n  WRITE             = 0x2_0006,\r\n  EXECUTE           = READ,\r\n\r\n  ALL_ACCESS        = 0xF_003F,\r\n}\r\n```\r\n\r\n#### `ValueType` enum\r\n\r\nTypes for registry values.\r\n\r\n```ts\r\nexport enum ValueType  {\r\n  NONE                       = 0, // No value type\r\n  SZ                         = 1, // Unicode nul terminated string\r\n  EXPAND_SZ                  = 2, // Unicode nul terminated string\r\n                                  // (with environment variable references)\r\n  BINARY                     = 3, // Free form binary\r\n  DWORD                      = 4, // 32-bit number\r\n  DWORD_LITTLE_ENDIAN        = 4, // 32-bit number (same as REG_DWORD)\r\n  DWORD_BIG_ENDIAN           = 5, // 32-bit number\r\n  LINK                       = 6, // Symbolic Link (unicode)\r\n  MULTI_SZ                   = 7, // Multiple Unicode strings\r\n  RESOURCE_LIST              = 8, // Resource list in the resource map\r\n  FULL_RESOURCE_DESCRIPTOR   = 9, // Resource list in the hardware description\r\n  RESOURCE_REQUIREMENTS_LIST = 10,\r\n  QWORD                      = 11, // 64-bit number\r\n  QWORD_LITTLE_ENDIAN        = 11, // 64-bit number (same as REG_QWORD)\r\n}\r\n```\r\n\r\n### Raw APIs\r\n\r\nThese APIs fairly directly wrap the Windows API linked, only abstracting some of\r\nthe allocation and general usage style.\r\n\r\nThe exception is [`enumKeyNames`](#enumkeynames) and [`enumValueNames`](#enumvaluenames)\r\nwhich iterate to build a list and only return the names, and not other properties.\r\n\r\n#### `Value`\r\n\r\nRaw registry values returned from [`queryValueRaw`](#queryvalueraw) and [`getValueRaw`](#getvalueraw)\r\nare simply Node `Buffer`s with an additional `type` property from `ValueType`:\r\n\r\n```ts\r\nexport type Value = Buffer & { type: ValueType };\r\n```\r\n\r\n#### `createKey`\r\n\r\nWraps [`RegCreateKeyExW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regcreatekeyexw)\r\n\r\n> Creates the specified registry key. If the key already exists, the function opens it. Note that key names are not case sensitive.\r\n\r\nYou must call [`closeKey`](#closekey) on the result to clean up.\r\n\r\n```ts\r\nexport function createKey(\r\n  hkey: HKEY,\r\n  subKey: string,\r\n  access: Access,\r\n  options: CreateKeyOptions = 0,\r\n): HKEY;\r\n```\r\n\r\n#### `openKey`\r\n\r\nWraps [`RegOpenKeyExW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regopenkeyexw)\r\n\r\n> Opens the specified registry key. Note that key names are not case sensitive.\r\n\r\nReturns `null` if `subKey` does not exist under `hkey`.\r\n\r\nYou must call [`closeKey`](#closekey) on the result to clean up.\r\n\r\n```ts\r\nexport function openKey(\r\n  hkey: HKEY,\r\n  subKey: string,\r\n  access: Access,\r\n  options: OpenKeyOptions = 0,\r\n): HKEY | null;\r\n```\r\n\r\n#### `loadAppKey`\r\n\r\nWraps [`RegLoadAppKeyW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regloadappkeyw)\r\n\r\n> Loads the specified registry hive as an application hive.\r\n\r\nYou must call [`closeKey`](#closekey) on the result to clean up.\r\n\r\n```ts\r\nexport function loadAppKey(file: string, access: Access): HKEY;\r\n```\r\n\r\n#### `openCurrentUser`\r\n\r\nWraps [`RegOpenCurrentUser`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regopencurrentuser)\r\n\r\n> Retrieves a handle to the `HKEY_CURRENT_USER` key for the user the current thread is impersonating.\r\n\r\nOnly makes sense to use if you have access to Windows user impersonation. Maybe take a look at my\r\ncurrently WIP [Windows user account package](https://github.com/simonbuchan/native-users-node).\r\n\r\nYou must call [`closeKey`](#closekey) on the result to clean up.\r\n\r\n```ts\r\nexport function openCurrentUser(access: Access): HKEY;\r\n```\r\n\r\n#### `enumKeyNames`\r\n\r\nWraps [`RegEnumKeyExW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regenumkeyexw)\r\niterated to get the sub key names for a key.\r\n\r\n> Enumerates the subkeys of the specified open registry key.\r\n\r\n```ts\r\nexport function enumKeyNames(hkey: HKEY): string[];\r\n```\r\n\r\n#### `enumValueNames`\r\n\r\nWraps [`RegEnumValueW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regenumvaluew)\r\niterated to get the value names for a key.\r\n\r\n> Enumerates the values for the specified open registry key.\r\n\r\n```ts\r\nexport function enumValueNames(hkey: HKEY): string[];\r\n```\r\n\r\n#### `queryValueRaw`\r\n\r\nWraps [`RegQueryValueExW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regqueryvalueexw)\r\nwithout additional parsing.\r\n\r\n> Retrieves the type and data for the specified value name associated with an open registry key.\r\n\r\nYou may want to use [`queryValue`](#queryvalue) instead.\r\n\r\nReturns `null` if `valueName` does not exist under `hkey`.\r\n\r\n```ts\r\nexport function queryValueRaw(hkey: HKEY, valueName: string): Value | null;\r\n```\r\n\r\n#### `getValueRaw`\r\n\r\nWraps [`RegGetValueExW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-reggetvaluew)\r\nwithout additional parsing.\r\n\r\n> Retrieves the type and data for the specified registry value.\r\n\r\nYou may want to use [`getValue`](#getvalue) instead.\r\n\r\nReturns `null` if `subKey` or `valueName` does not exist under `hkey`.\r\n\r\n```ts\r\nexport function getValueRaw(\r\n  hkey: HKEY,\r\n  subKey: string,\r\n  valueName: string,\r\n  flags: GetValueFlags = 0,\r\n): Value | null;\r\n```\r\n\r\n#### `deleteKey`\r\n\r\nWraps [`RegDeleteKeyW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regdeletekeyw)\r\n\r\n> Deletes a subkey and its values. Note that key names are not case sensitive.\r\n\r\nReturns true if the key existed before it was deleted.\r\n\r\n```ts\r\nexport function deleteKey(hkey: HKEY, subKey: string): boolean;\r\n```\r\n\r\n#### `deleteTree`\r\n\r\nWraps [`RegDeleteTreeW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regdeletetreew)\r\n\r\n> Deletes the subkeys and values of the specified key recursively.\r\n\r\nReturns true if the key existed before it was deleted.\r\n\r\n```ts\r\nexport function deleteTree(hkey: HKEY, subKey: string): boolean;\r\n```\r\n\r\n#### `deleteKeyValue`\r\n\r\nWraps [`RegDeleteKeyValueW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regdeletekeyvaluew)\r\n\r\n> Removes the specified value from the specified registry key and subkey.\r\n\r\nReturns true if the value existed before it was deleted.\r\n\r\n```ts\r\nexport function deleteKeyValue(\r\n  hkey: HKEY,\r\n  subKey: string,\r\n  valueName: string,\r\n): boolean;\r\n```\r\n\r\n#### `deleteValue`\r\n\r\nWraps [`RegDeleteValueW`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regdeletevaluew)\r\n\r\n> Removes a named value from the specified registry key. Note that value names are not case sensitive.\r\n\r\nReturns true if the value existed before it was deleted.\r\n\r\n```ts\r\nexport function deleteValue(hkey: HKEY, valueName: string): boolean;\r\n```\r\n\r\n#### `closeKey`\r\n\r\nWraps [`RegCloseKey`](https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regclosekey)\r\n\r\n> Closes a handle to the specified registry key.\r\n\r\nFor convenience, `null` or `undefined` values are allowed and ignored.\r\n\r\n```ts\r\nexport function closeKey(hkey: HKEY | null | undefined): void;\r\n```\r\n\r\n### Format helpers\r\n\r\n#### `parseValue`\r\n\r\nReturns the JS-native value for common `Value` types:\r\n- `SZ`, `EXPAND_SZ` -> `string`\r\n- `BINARY` -> `Buffer`\r\n- `DWORD` / `DWORD_LITTLE_ENDIAN` -> `number`\r\n- `DWORD_BIG_ENDIAN` -> `number`\r\n- `MULTI_SZ` -> `string[]`\r\n\r\nThrows if the type is not one of the above!\r\n\r\nFor convenience, passes through `null` so missing values don't have\r\nto be specially treated.\r\n\r\n```ts\r\nexport type ParsedValue = number | string | string[] | Buffer;\r\nexport function parseValue(value: Value | null): ParsedValue | null;\r\n```\r\n\r\n#### `parseString`\r\n\r\nParses `SZ` and `EXPAND_SZ` (etc.) registry values.\r\n\r\n```ts\r\nexport function parseString(value: Buffer): string;\r\n```\r\n\r\n#### `parseString`\r\n\r\nParses `SZ` and `EXPAND_SZ` (etc.) registry values.\r\n\r\n```ts\r\nexport function parseString(value: Buffer): string;\r\n```\r\n\r\n#### `parseMultiString`\r\n\r\nParses `MULTI_SZ` registry values.\r\n\r\n```ts\r\nexport function parseMultiString(value: Buffer): string[];\r\n```\r\n\r\n#### `formatString`\r\n\r\nFormats a string to `SZ`, `EXPAND_SZ` (etc.) format.\r\n\r\n```ts\r\nexport function formatString(value: string): Buffer;\r\n```\r\n\r\n#### `formatMultiString`\r\n\r\nFormats an array of `string`s to `MULTI_SZ` format.\r\n\r\n```ts\r\nexport function formatMultiString(values: string[]): Buffer;\r\n```\r\n\r\n#### `formatDWORD`\r\n\r\nFormats a `number` to `DWORD` / `DWORD_LITTLE_ENDIAN` format.\r\n\r\n```ts\r\nexport function formatDWORD(value: number): Buffer;\r\n```\r\n\r\n#### `formatQWORD`\r\n\r\nFormats a `number` to `QWORD` format.\r\n\r\n```ts\r\nexport function formatQWORD(value: number): Buffer;\r\n```\r\n\r\n### Formatted value APIs\r\n\r\nThese APIs wrap the raw value APIs with the formatting helpers.\r\n\r\n#### `setValue{Type}`\r\n\r\nSets the registry value with a matching `{Type}` and formatted value.\r\n\r\nFor example, `setValueSZ` is `setValueRaw(hkey, valueName, ValueType.SZ, formatString(value))`.\r\n\r\n```ts\r\nexport function setValueSZ(\r\n  hkey: HKEY,\r\n  valueName: string,\r\n  value: string,\r\n): void;\r\nexport function setValueEXPAND_SZ(\r\n  hkey: HKEY,\r\n  valueName: string,\r\n  value: string,\r\n): void;\r\nexport function setValueMULTI_SZ(\r\n  hkey: HKEY,\r\n  valueName: string,\r\n  value: string[],\r\n): void;\r\nexport function setValueDWORD(\r\n  hkey: HKEY,\r\n  valueName: string,\r\n  value: number,\r\n): void;\r\nexport function setValueQWORD(\r\n  hkey: HKEY,\r\n  valueName: string,\r\n  value: number,\r\n): void;\r\n```\r\n\r\n#### `getValue`\r\n\r\nWraps `getValueRaw` in `parseValue`.\r\n\r\n```ts\r\nexport function getValue(\r\n  hkey: HKEY,\r\n  subKey: string,\r\n  valueName: string,\r\n  flags: GetValueFlags = 0,\r\n): ParsedValue | null;\r\n```\r\n\r\n#### `queryValue`\r\n\r\nWraps `queryValueRaw` in `parseValue`.\r\n\r\n```ts\r\nexport function queryValue(hkey: HKEY, valueName: string): ParsedValue | null;\r\n```\r\n","readmeFilename":"README.md"}