From d1a65ff40b5274d5a8538553b4a2ccef8d54eb6e Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Wed, 7 Jun 2000 04:07:48 +0000 Subject: Added preliminary documentation for the winreg module, by Mark Hammond . Limited markup & consistency revisions by FLD. --- Doc/Makefile.deps | 1 + Doc/lib/lib.tex | 1 + Doc/lib/libwinreg.tex | 412 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 414 insertions(+) create mode 100644 Doc/lib/libwinreg.tex diff --git a/Doc/Makefile.deps b/Doc/Makefile.deps index b093c3e..91e8f58 100644 --- a/Doc/Makefile.deps +++ b/Doc/Makefile.deps @@ -195,6 +195,7 @@ LIBFILES= $(MANSTYLES) $(COMMONTEX) \ ../lib/libshutil.tex \ ../lib/librepr.tex \ ../lib/libmsvcrt.tex \ + ../lib/libwinreg.tex \ ../lib/libwinsound.tex \ ../lib/windows.tex \ ../lib/libpyclbr.tex \ diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex index 549acdc..e04527e 100644 --- a/Doc/lib/lib.tex +++ b/Doc/lib/lib.tex @@ -275,6 +275,7 @@ and how to embed it in other applications. \input{windows} % MS Windows ONLY \input{libmsvcrt} +\input{libwinreg} \input{libwinsound} \input{libundoc} diff --git a/Doc/lib/libwinreg.tex b/Doc/lib/libwinreg.tex new file mode 100644 index 0000000..785a108 --- /dev/null +++ b/Doc/lib/libwinreg.tex @@ -0,0 +1,412 @@ +\section{\module{winreg} -- + Windows registry access} + +\declaremodule{extension}{winreg} + \platform{Windows} +\modulesynopsis{Routines and objects for manipulating the Windows registry.} +\sectionauthor{Mark Hammond}{MarkH@ActiveState.com} + +These functions exposes the Windows registry API to Python. Instead of +using an integer as the registry handle, a handle object is used to ensure +that the handles are closed correctly, even if the programmer +neglects to explicitly close them. + + +\subsection{Registry Operations \label{registry-operations}} + +\begin{funcdesc}{CloseKey}{hkey} + Closes a previously opened registry key. + The hkey argument specifies a previously opened key. + + Note that if \var{hkey} is not closed using this method, (or the + \method{handle.Close()} closed when the \var{hkey} object is + destroyed by Python. +\end{funcdesc} + + +\begin{funcdesc}{ConnectRegistry}{computer_name, key} + Establishes a connection to a predefined registry handle on + another computer, and returns a \dfn{handle object} + + \var{computer_name} is the name of the remote computer, of the + form \code{'\\\\computername.'}. If \code{None}, the local computer is + used. + + \var{key} is the predefined handle to connect to. + + The return value is the handle of the opened key. + If the function fails, an \exception{EnvironmentError} exception is + raised. +\end{funcdesc} + + +\begin{funcdesc}{CreateKey}{key, sub_key} + Creates or opens the specified key, returning a \dfn{handle object} + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that names the key this method opens + or creates. + + If \var{key} is one of the predefined keys, \var{sub_key} may + be \code{None}. In that case, the handle returned is the same key handle + passed in to the function. + + If the key already exists, this function opens the existing key + + The return value is the handle of the opened key. + If the function fails, an \exception{EnvironmentError} exception is + raised. +\end{funcdesc} + + +\begin{funcdesc}{DeleteKey}{key, sub_key} + Deletes the specified key. + + \var{key} is an already open key, or any one of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that must be a subkey of the key + identified by the \var{key} parameter. This value must not be + \code{None}, and the key may not have subkeys. + + \emph{This method can not delete keys with subkeys.} + + If the method succeeds, the entire key, including all of its values, + is removed. If the method fails, an \exception{EnvironmentError} + exception is raised. +\end{funcdesc} + + +\begin{funcdesc}{DeleteValue}{key, value} + Removes a named value from a registry key. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{value} is a string that identifies the value to remove. +\end{funcdesc} + + +\begin{funcdesc}{EnumKey}{key, index} + Enumerates subkeys of an open registry key, returning a string. + + \var{key} is an already open key, or any one of the predefined + \constant{HKEY_*} constants. + + \var{index} is an integer that identifies the index of the key to + retrieve. + + The function retrieves the name of one subkey each time it + is called. It is typically called repeatedly until an + \exception{EnvironmentError} exception + is raised, indicating, no more values are available. +\end{funcdesc} + + +\begin{funcdesc}{EnumValue}{key, index} + Enumerates values of an open registry key, returning a tuple. + + \var{key} is an already open key, or any one of the predefined + \constant{HKEY_*} constants. + + \var{index} is an integer that identifies the index of the value + to retrieve. + + The function retrieves the name of one subkey each time it is + called. It is typically called repeatedly, until an + \exception{EnvironmentError} exception is raised, indicating + no more values. + + The result is a tuple of 3 items: + \item[value_name] + A string that identifies the value name + \item[value_data] + An object that holds the value data, and whose type depends + on the underlying registry type. + \item[data_type] is an integer that identifies the type of the + value data. + +\end{funcdesc} + + +\begin{funcdesc}{FlushKey}{key} + Writes all the attributes of a key to the registry. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + It is not necessary to call RegFlushKey to change a key. + Registry changes are flushed to disk by the registry using its lazy + flusher. Registry changes are also flushed to disk at system + shutdown. Unlike \function{CloseKey()}, the \function{FlushKey()} method + returns only when all the data has been written to the registry. + An application should only call \function{FlushKey()} if it requires absolute + certainty that registry changes are on disk. + + \emph{If you don't know whether a \function{FlushKey()} call is required, it + probably isn't.} + +\end{funcdesc} + + +\begin{funcdesc}{RegLoadKey}{key, sub_key, file_name} + Creates a subkey under the specified key and stores registration + information from a specified file into that subkey. + + \var{key} is an already open key, or any of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that identifies the sub_key to load + + \var {file_name} is the name of the file to load registry data from. + This file must have been created with the \function{SaveKey()} function. + Under the file allocation table (FAT) file system, the filename may not + have an extension. + + A call to LoadKey() fails if the calling process does not have the + \constant{SE_RESTORE_PRIVILEGE} privilege. Note that privileges + are different than permissions - see the Win32 documentation for + more details. + + If \var{key} is a handle returned by \function{ConnectRegistry()}, + then the path specified in \var{fileName} is relative to the + remote computer. + + The Win32 documentation implies \var{key} must be in the + \constant{HKEY_USER} or \constant{HKEY_LOCAL_MACHINE} tree. + This may or may not be true. +\end{funcdesc} + + +\begin{funcdesc}{OpenKey}{key, sub_key\optional{, res\code{ = 0}}\optional{, sam\code{ = \constant{KEY_READ}}}} + Opens the specified key, returning a \dfn{handle object} + + \var{key} is an already open key, or any one of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that identifies the sub_key to open + + \var{res} is a reserved integer, and must be zero. The default is zero. + + \var{sam} is an integer that specifies an access mask that describes + the desired security access for the key. Default is \constant{KEY_READ} + + The result is a new handle to the specified key + + If the function fails, \exception{EnvironmentError} is raised. +\end{funcdesc} + + +\begin{funcdesc}{OpenKeyEx}{} + The functionality of \function{OpenKeyEx()} is provided via + \function{OpenKey()}, by the use of default arguments. +\end{funcdesc} + + +\begin{funcdesc}{QueryInfoKey}{key} + Returns information about a key, as a tuple. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + The result is a tuple of 3 items: + \item[num_subkeys] + An integer that identifies the number of sub keys this key has. + \item[num_values] + An integer that identifies the number of values this key has. + \item [last_modified] + A long integer that identifies when the key was last modified (if available) + as 100's of nanoseconds since Jan 1, 1600. +\end{funcdesc} + + +\begin{funcdesc}{QueryValue}{key, sub_key} + Retrieves the unnamed value for a key, as a string + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that holds the name of the subkey with which + the value is associated. If this parameter is \code{None} or empty, the + function retrieves the value set by the \function{SetValue()} method + for the key identified by \var{key}. + + Values in the registry have name, type, and data components. This + method retrieves the data for a key's first value that has a NULL name. + But the underlying API call doesn't return the type, Lame Lame Lame, + DO NOT USE THIS!!! +\end{funcdesc} + + +\begin{funcdesc}{QueryValueEx}{key, value_name} + Retrieves the type and data for a specified value name associated with + an open registry key. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{value_name} is a string indicating the value to query. + + The result is a tuple of 2 items: + \item [value] + The value of the registry item. + \item [type_id] + An integer that identifies the registry type for this value. +\end{funcdesc} + + +\begin{funcdesc}{SaveKey}{key, file_name} + Saves the specified key, and all its subkeys to the specified file. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{file_name} is the name of the file to save registry data to. + This file cannot already exist. If this filename includes an extension, + it cannot be used on file allocation table (FAT) file systems by the + \method{LoadKey()}, \method{ReplaceKey()} or + \method{RestoreKey()} methods. + + If \var{key} represents a key on a remote computer, the path + described by \var{file_name} is relative to the remote computer. + The caller of this method must possess the \constant{SeBackupPrivilege} + security privilege. Note that privileges are different than permissions + - see the Win32 documentation for more details. + + This function passes NULL for \var{security_attributes} to the API. +\end{funcdesc} + + +\begin{funcdesc}{SetValue}{key, sub_key, type, value} + Associates a value with a specified key. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that names the subkey with which the value + is associated. + + \var{type} is an integer that specifies the type of the data. Currently this + must be \constant{REG_SZ}, meaning only strings are supported. + Use the \function{SetValueEx()} function for support for other data types. + + \var{value} is a string that specifies the new value. + + If the key specified by the \var{sub_key} parameter does not exist, + the SetValue function creates it. + + Value lengths are limited by available memory. Long values (more than + 2048 bytes) should be stored as files with the filenames stored in + the configuration registry. This helps the registry perform efficiently. + + The key identified by the \var{key} parameter must have been + opened with \constant{KEY_SET_VALUE} access. +\end{funcdesc} + + +\begin{funcdesc}{SetValueEx}{key, value_name, reserved, type, value} + Stores data in the value field of an open registry key. + + \var{key} is an already open key, or one of the predefined + \constant{HKEY_*} constants. + + \var{sub_key} is a string that names the subkey with which the + value is associated. + + \var{type} is an integer that specifies the type of the data. + This should be one of: + \item[\constant{REG_BINARY}] + Binary data in any form. + \item[\constant{REG_DWORD}] + A 32-bit number. + \item[\constant{REG_DWORD_LITTLE_ENDIAN}] + A 32-bit number in little-endian format. + \item[\constant{REG_DWORD_BIG_ENDIAN}] + A 32-bit number in big-endian format. + \item[\constant{REG_EXPAND_SZ}] + A null-terminated string that contains unexpanded references + to environment variables (for example, \code{\%PATH\%}) + \item[\constant{REG_LINK}] + A Unicode symbolic link. + \item[\constant{REG_MULTI_SZ}] + A sequence (eg, list, sequence) of null-terminated strings, + terminated by two null characters. (Note that Python handles + this termination automatically) + \item[\constant{REG_NONE}] + No defined value type. + \item[\constant{REG_RESOURCE_LIST}] + A device-driver resource list. + \item[\constant{REG_SZ}] + A null-terminated string. + + \var{reserved} can be anything - zero is always passed to the + API. + + \var{value} is a string that specifies the new value. + + This method can also set additional value and type information for the + specified key. The key identified by the key parameter must have been + opened with \constant{KEY_SET_VALUE} access. + + To open the key, use the \function{CreateKeyEx()} or + \function{OpenKey()} methods. + + Value lengths are limited by available memory. Long values (more than + 2048 bytes) should be stored as files with the filenames stored in + the configuration registry. This helps the registry perform efficiently. +\end{funcdesc} + + + +\subsection{Registry handle objects \label{handle-object}} + + This object wraps a Windows HKEY object, automatically closing it when + the object is destroyed. To guarantee cleanup, you can call either + the \method{Close()} method on the object, or the + \function{CloseKey()} function. + + All registry functions in this module return one of these objects. + + All registry functions in this module which accept a handle object + also accept an integer, however, use of the handle object is + encouraged. + + Handle objects provide semantics for __nonzero__ - thus + \begin{verbatim} + if handle: + print "Yes" + \end{verbatim} + will print \code{Yes} if the handle is currently valid (ie, + has not been closed or detached). + + The object also support comparison semantics, so handle + objects will compare true if they both reference the same + underlying Windows handle value. + + Handle objects can be converted to an integer (eg, using the + builtin \function{int()} function, in which case the underlying + Windows handle value is returned. You can also use the + \method{Detach()} method to return the integer handle, and + also disconnect the Windows handle from the handle object. + +\begin{methoddesc}{Close} + Closes the underlying Windows handle. + + If the handle is already closed, no error is raised. +\end{methoddesc} + + +\begin{methoddesc}{Detach} + Detaches the Windows handle from the handle object. + + The result is an integer (or long on 64 bit Windows) that holds + the value of the handle before it is detached. If the + handle is already detached or closed, this will return zero. + + After calling this function, the handle is effectively invalidated, + but the handle is not closed. You would call this function when + you need the underlying Win32 handle to exist beyond the lifetime + of the handle object. +\end{methoddesc} -- cgit v0.12