зеркало из https://github.com/mozilla/pjs.git
594 строки
21 KiB
C
594 строки
21 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is Mozilla Communicator client code, released
|
|
* March 31, 1998.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Daniel Veditz <dveditz@netscape.com>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
/* NSReg.h
|
|
*/
|
|
#ifndef _NSREG_H_
|
|
#define _NSREG_H_
|
|
|
|
typedef void (*nr_RegPackCallbackFunc) (void *userData, int32 bytes, int32 totalBytes);
|
|
|
|
typedef int32 REGERR;
|
|
typedef int32 RKEY;
|
|
typedef uint32 REGENUM;
|
|
typedef void * HREG;
|
|
|
|
typedef struct _reginfo
|
|
{
|
|
uint16 size; /* must be initialized to sizeof(REGINFO) */
|
|
uint16 entryType;
|
|
uint32 entryLength;
|
|
} REGINFO;
|
|
|
|
#define REGERR_OK (0)
|
|
#define REGERR_FAIL (1)
|
|
#define REGERR_NOMORE (2)
|
|
#define REGERR_NOFIND (3)
|
|
#define REGERR_BADREAD (4)
|
|
#define REGERR_BADLOCN (5)
|
|
#define REGERR_PARAM (6)
|
|
#define REGERR_BADMAGIC (7)
|
|
#define REGERR_BADCHECK (8)
|
|
#define REGERR_NOFILE (9)
|
|
#define REGERR_MEMORY (10)
|
|
#define REGERR_BUFTOOSMALL (11)
|
|
#define REGERR_NAMETOOLONG (12)
|
|
#define REGERR_REGVERSION (13)
|
|
#define REGERR_DELETED (14)
|
|
#define REGERR_BADTYPE (15)
|
|
#define REGERR_NOPATH (16)
|
|
#define REGERR_BADNAME (17)
|
|
#define REGERR_READONLY (18)
|
|
#define REGERR_BADUTF8 (19)
|
|
|
|
|
|
/* Total path length */
|
|
#define MAXREGPATHLEN (2048)
|
|
/* Name on the path (including null terminator) */
|
|
#define MAXREGNAMELEN (512)
|
|
/* Value of an entry */
|
|
#define MAXREGVALUELEN (0x7FFF)
|
|
|
|
/* Standard keys */
|
|
#define ROOTKEY_USERS (0x01)
|
|
#define ROOTKEY_COMMON (0x02)
|
|
#define ROOTKEY_CURRENT_USER (0x03)
|
|
#define ROOTKEY_PRIVATE (0x04)
|
|
|
|
/* enumeration styles */
|
|
#define REGENUM_NORMAL (0x00)
|
|
#define REGENUM_CHILDREN REGENUM_NORMAL
|
|
#define REGENUM_DESCEND (0x01)
|
|
#define REGENUM_DEPTH_FIRST (0x02)
|
|
|
|
/* entry data types */
|
|
#define REGTYPE_ENTRY (0x0010)
|
|
#define REGTYPE_ENTRY_STRING_UTF (REGTYPE_ENTRY + 1)
|
|
#define REGTYPE_ENTRY_INT32_ARRAY (REGTYPE_ENTRY + 2)
|
|
#define REGTYPE_ENTRY_BYTES (REGTYPE_ENTRY + 3)
|
|
#define REGTYPE_ENTRY_FILE (REGTYPE_ENTRY + 4)
|
|
|
|
#define REG_DELETE_LIST_KEY "Mozilla/XPInstall/Delete List"
|
|
#define REG_REPLACE_LIST_KEY "Mozilla/XPInstall/Replace List"
|
|
#define REG_UNINSTALL_DIR "Mozilla/XPInstall/Uninstall/"
|
|
#define REG_REPLACE_SRCFILE "ReplacementFile"
|
|
#define REG_REPLACE_DESTFILE "DestinationFile"
|
|
|
|
#define UNINSTALL_NAV_STR "_"
|
|
|
|
|
|
#define UNIX_GLOBAL_FLAG "MOZILLA_SHARED_REGISTRY"
|
|
|
|
/* Platform-dependent declspec for library interface */
|
|
#if defined(XP_WIN)
|
|
#if defined(WIN32)
|
|
#if defined (STANDALONE_REGISTRY)
|
|
#define VR_INTERFACE(type) __declspec(dllexport) type __cdecl
|
|
#else
|
|
#define VR_INTERFACE(type) __declspec(dllexport) type __stdcall
|
|
#endif
|
|
|
|
#else
|
|
#define VR_INTERFACE(type) type _far _pascal _export
|
|
#endif
|
|
#elif defined(XP_OS2) && defined(__declspec)
|
|
#define VR_INTERFACE(type) __declspec(dllexport) type
|
|
#elif defined XP_MAC
|
|
#define VR_INTERFACE(__x) __declspec(export) __x
|
|
#elif defined (HAVE_VISIBILITY_ATTRIBUTE)
|
|
#define VR_INTERFACE(type) __attribute__ ((visibility ("default"))) type
|
|
#else
|
|
#define VR_INTERFACE(type) type
|
|
#endif
|
|
|
|
PR_BEGIN_EXTERN_C
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* Registry API -- General
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegSetBufferSize - Sets the file buffer size
|
|
*
|
|
* Parameters:
|
|
* hReg - handle to opened registry
|
|
* bufsize - size of the new buffer
|
|
*
|
|
* Output:
|
|
* ---------------------------------------------------------------------
|
|
* returns the size of the buffer or -1 for err
|
|
*/
|
|
VR_INTERFACE(int) NR_RegSetBufferSize(
|
|
HREG hReg, /* handle to opened registry */
|
|
int bufsize
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegOpen - Open a netscape XP registry
|
|
*
|
|
* Parameters:
|
|
* filename - registry file to open. NULL or "" opens the standard
|
|
* local registry.
|
|
* hReg - OUT: handle to opened registry
|
|
*
|
|
* Output:
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegOpen(
|
|
const char *filename, /* reg. file to open (NULL == standard registry) */
|
|
HREG *hReg /* OUT: handle to opened registry */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegClose - Close a netscape XP registry
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry to be closed.
|
|
*
|
|
* After calling this routine the handle is no longer valid
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegClose(
|
|
HREG hReg /* handle of open registry to close */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegFlush - Manually flush data in a netscape XP registry
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry to be flushed.
|
|
*
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegFlush(
|
|
HREG hReg /* handle of open registry to flush */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegIsWritable - Check read/write status of open registry
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry to query
|
|
* Returns:
|
|
* REGERR_OK if writable, REGERR_READONLY if not, possibly
|
|
* other errors for an invalid hReg
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegIsWritable(
|
|
HREG hReg /* handle of open registry to query */
|
|
);
|
|
|
|
VR_INTERFACE(REGERR) NR_RegPack(
|
|
HREG hReg, /* handle of open registry to pack */
|
|
void *userData,
|
|
nr_RegPackCallbackFunc fn
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegSetUsername - Set the current username
|
|
*
|
|
* If the current user profile name is not set then trying to use
|
|
* HKEY_CURRENT_USER will result in an error.
|
|
*
|
|
* Parameters:
|
|
* name - name of the current user
|
|
*
|
|
* Output:
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegSetUsername(
|
|
const char *name /* name of current user */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegGetUniqueName
|
|
*
|
|
* Returns a unique name that can be used for anonymous key/value names
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* outbuf - where to put the string
|
|
* buflen - how big the buffer is
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetUniqueName(
|
|
HREG hReg, /* handle of open registry */
|
|
char* outbuf, /* buffer to hold key name */
|
|
uint32 buflen /* size of buffer */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* DO NOT USE -- Will be removed
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetUsername(
|
|
char **name /* on return, an alloc'ed copy of the current user name */
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* Registry API -- Key Management functions
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegAddKey - Add a key node to the registry
|
|
*
|
|
* Can also be used to find an existing node for convenience.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - registry key obtained from NR_RegGetKey(),
|
|
* or one of the standard top-level keys
|
|
* path - relative path of key to be added. Intermediate
|
|
* nodes will be added if necessary.
|
|
* newkey - If not null returns RKEY of new or found node
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegAddKey(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* root key */
|
|
char *path, /* relative path of subkey to add */
|
|
RKEY *newKey /* if not null returns newly created key */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegAddKeyRaw - Add a key node to the registry
|
|
*
|
|
* This routine is different from NR_RegAddKey() in that it takes
|
|
* a keyname rather than a path.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - registry key obtained from NR_RegGetKey(),
|
|
* or one of the standard top-level keys
|
|
* keyname - name of key to be added. No parsing of this
|
|
* name happens.
|
|
* newkey - if not null the RKEY of the new key is returned
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegAddKeyRaw(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* root key */
|
|
char *keyname, /* name of key to add */
|
|
RKEY *newKey /* if not null returns newly created key */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegDeleteKey - Delete the specified key
|
|
*
|
|
* Note that delete simply orphans blocks and makes no attempt
|
|
* to reclaim space in the file. Use NR_RegPack()
|
|
*
|
|
* Cannot be used to delete keys with child keys
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - starting node RKEY, typically one of the standard ones.
|
|
* path - relative path of key to delete
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegDeleteKey(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* root key */
|
|
char *path /* relative path of subkey to delete */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegDeleteKeyRaw - Delete the specified raw key
|
|
*
|
|
* Note that delete simply orphans blocks and makes no attempt
|
|
* to reclaim space in the file. Use NR_RegPack()
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY or parent to the raw key you wish to delete
|
|
* keyname - name of child key to delete
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegDeleteKeyRaw(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* root key */
|
|
char *keyname /* name subkey to delete */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegGetKey - Get the RKEY value of a node from its path
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - starting node RKEY, typically one of the standard ones.
|
|
* path - relative path of key to find. (a blank path just gives you
|
|
* the starting key--useful for verification, VersionRegistry)
|
|
* result - if successful the RKEY of the specified sub-key
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetKey(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* root key */
|
|
const char *path, /* relative path of subkey to find */
|
|
RKEY *result /* returns RKEY of specified sub-key */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegGetKeyRaw - Get the RKEY value of a node from its keyname
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - starting node RKEY, typically one of the standard ones.
|
|
* keyname - keyname of key to find. (a blank keyname just gives you
|
|
* the starting key--useful for verification, VersionRegistry)
|
|
* result - if successful the RKEY of the specified sub-key
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetKeyRaw(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* root key */
|
|
char *keyname, /* name of key to get */
|
|
RKEY *result /* returns RKEY of specified sub-key */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegEnumSubkeys - Enumerate the subkey names for the specified key
|
|
*
|
|
* Returns REGERR_NOMORE at end of enumeration.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key to enumerate--obtain with NR_RegGetKey()
|
|
* eState - enumerations state, must contain NULL to start
|
|
* buffer - location to store subkey names. Once an enumeration
|
|
* is started user must not modify contents since values
|
|
* are built using the previous contents.
|
|
* bufsize - size of buffer for names
|
|
* style - 0 returns direct child keys only, REGENUM_DESCEND
|
|
* returns entire sub-tree
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegEnumSubkeys(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
REGENUM *state, /* enum state, must be NULL to start */
|
|
char *buffer, /* buffer for entry names */
|
|
uint32 bufsize, /* size of buffer */
|
|
uint32 style /* 0: children only; REGENUM_DESCEND: sub-tree */
|
|
);
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* Registry API -- Entry Management functions
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegGetEntryInfo - Get some basic info about the entry data
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* name - name of entry
|
|
* info - return: Entry info object
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetEntryInfo(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
char *name, /* entry name */
|
|
REGINFO *info /* returned entry info */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegGetEntryString - Get the UTF string value associated with the
|
|
* named entry of the specified key.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* name - name of entry
|
|
* buffer - destination for string
|
|
* bufsize - size of buffer
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetEntryString(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
char *name, /* entry name */
|
|
char *buffer, /* buffer to hold value (UTF String) */
|
|
uint32 bufsize /* length of buffer */
|
|
);
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegGetEntry - Get the value data associated with the
|
|
* named entry of the specified key.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* name - name of entry
|
|
* buffer - destination for data
|
|
* size - in: size of buffer
|
|
* out: size of actual data (incl. \0 term. for strings)
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegGetEntry(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
char *name, /* entry name */
|
|
void *buffer, /* buffer to hold value */
|
|
uint32 *size /* in:length of buffer */
|
|
); /* out: data length, >>includes<< null terminator*/
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegSetEntryString - Store a UTF-8 string value associated with the
|
|
* named entry of the specified key. Used for
|
|
* both creation and update.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* name - name of entry
|
|
* buffer - UTF-8 String to store
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegSetEntryString(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
char *name, /* entry name */
|
|
char *buffer /* UTF String value */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegSetEntry - Store value data associated with the named entry
|
|
* of the specified key. Used for both creation and update.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* name - name of entry
|
|
* type - type of data to be stored
|
|
* buffer - data to store
|
|
* size - length of data to store in bytes
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegSetEntry(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
char *name, /* entry name */
|
|
uint16 type, /* type of value data */
|
|
void *buffer, /* data buffer */
|
|
uint32 size /* data length in bytes; incl. null term for strings */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegDeleteEntry - Delete the named entry
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* name - name of entry
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegDeleteEntry(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
char *name /* value name */
|
|
);
|
|
|
|
|
|
/* ---------------------------------------------------------------------
|
|
* NR_RegEnumEntries - Enumerate the entry names for the specified key
|
|
*
|
|
* Returns REGERR_NOMORE at end of enumeration.
|
|
*
|
|
* Parameters:
|
|
* hReg - handle of open registry
|
|
* key - RKEY of key that contains entry--obtain with NR_RegGetKey()
|
|
* eState - enumerations state, must contain NULL to start
|
|
* buffer - location to store entry names
|
|
* bufsize - size of buffer for names
|
|
* ---------------------------------------------------------------------
|
|
*/
|
|
VR_INTERFACE(REGERR) NR_RegEnumEntries(
|
|
HREG hReg, /* handle of open registry */
|
|
RKEY key, /* containing key */
|
|
REGENUM *state, /* enum state, must be NULL to start */
|
|
char *buffer, /* buffer for entry names */
|
|
uint32 bufsize, /* size of buffer */
|
|
REGINFO *info /* optional; returns info about entry */
|
|
);
|
|
|
|
|
|
VR_INTERFACE(void) NR_ShutdownRegistry(void);
|
|
VR_INTERFACE(REGERR) NR_StartupRegistry(void);
|
|
|
|
|
|
PR_END_EXTERN_C
|
|
|
|
#endif /* _NSREG_H_ */
|
|
|
|
/* EOF: NSReg.h */
|
|
|