windows-nt/Source/XPSP1/NT/ds/netapi/netlib/confset.c
2020-09-26 16:20:57 +08:00

104 lines
3 KiB
C

/*++
Copyright (c) 1991-92 Microsoft Corporation
Module Name:
ConfSet.c
Abstract:
This header file defines the function prototypes of the temporary
helper routines to get configuration information from the NT
configuration files.
Author:
John Rogers (JohnRo) 26-Nov-1991
Environment:
Only runs under NT.
Revision History:
26-Nov-1991 JohnRo
Created.
13-Feb-1992 JohnRo
Added support for using the real Win32 registry.
Added support for FAKE_PER_PROCESS_RW_CONFIG handling.
12-Mar-1992 JohnRo
Changed to only store UNICODE strings in registry.
31-Mar-1992 JohnRo
Flush the registry after each create/_write.
06-May-1992 JohnRo
REG_SZ now implies a UNICODE string, so we can't use REG_USZ anymore.
--*/
#include <nt.h> // NT definitions
#include <ntrtl.h> // NT Rtl structures
#include <nturtl.h> // NT Rtl structures
#include <windows.h> // Needed by <configp.h> and <winreg.h>
#include <lmcons.h> // NET_API_STATUS.
#include <netdebug.h> // (Needed by config.h)
#include <config.h> // My prototype, LPNET_CONFIG_HANDLE.
#include <configp.h> // NET_CONFIG_HANDLE.
#include <debuglib.h> // IF_DEBUG().
#include <lmapibuf.h> // NetApiBufferFree().
#include <netlib.h> // NetpMemoryAllocate(), etc.
#include <tstring.h> // STRSIZE(), TCHAR_EOS, WCSSIZE(), etc.
#include <stdlib.h> // wcslen().
#include <winerror.h> // ERROR_NOT_SUPPORTED, NO_ERROR, etc.
NET_API_STATUS
NetpSetConfigValue(
IN LPNET_CONFIG_HANDLE ConfigHandle,
IN LPTSTR KeyWanted,
IN LPTSTR Value
)
{
NET_CONFIG_HANDLE * lpnetHandle = ConfigHandle; // conv from opaque type
NetpAssert( lpnetHandle != NULL );
NetpAssert( KeyWanted != NULL );
NetpAssert( *KeyWanted != TCHAR_EOS );
NetpAssert( Value != NULL );
NetpAssert( *Value != TCHAR_EOS );
{
LONG Error;
//
// Set the value in the registry. (In memory, at least.)
//
Error = RegSetValueEx(
lpnetHandle->WinRegKey, // open handle (to section)
KeyWanted, // subkey
0,
REG_SZ, // type (zero-terminated TCHARs)
(LPVOID) Value, // data
STRSIZE(Value) ); // byte count for data (null char too)
IF_DEBUG(CONFIG) {
NetpKdPrint(( "NetpSetConfigValue: RegSetValueEx(" FORMAT_LPTSTR
") to TCHAR '" FORMAT_LPTSTR "' returned " FORMAT_LONG
".\n", KeyWanted, Value, Error ));
}
if ( Error != ERROR_SUCCESS ) {
NetpAssert( Error == ERROR_SUCCESS );
return (Error);
}
//
// Flush the registry to force stuff to disk immediately.
//
Error = RegFlushKey( lpnetHandle->WinRegKey );
NetpAssert( Error == ERROR_SUCCESS );
return (NO_ERROR);
}
}