186 lines
4.8 KiB
C
186 lines
4.8 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991-92 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
getconfg.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module contains routines for manipulating configuration
|
|||
|
information. The following functions available are:
|
|||
|
|
|||
|
NetpGetComputerName
|
|||
|
NetpGetDomainId
|
|||
|
|
|||
|
Currently configuration information is kept in NT.CFG.
|
|||
|
Later it will be kept by the configuration manager.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Dan Lafferty (danl) 09-Apr-1991
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
User Mode -Win32
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
09-Apr-1991 danl
|
|||
|
created
|
|||
|
27-Sep-1991 JohnRo
|
|||
|
Fixed somebody's attempt to do UNICODE.
|
|||
|
20-Mar-1992 JohnRo
|
|||
|
Get rid of old config helper callers.
|
|||
|
Fixed NTSTATUS vs. NET_API_STATUS bug.
|
|||
|
07-May-1992 JohnRo
|
|||
|
Enable win32 registry for NET tree by calling GetComputerName().
|
|||
|
Avoid DbgPrint if possible.
|
|||
|
08-May-1992 JohnRo
|
|||
|
Use <prefix.h> equates.
|
|||
|
08-May-1992 JohnRo
|
|||
|
Added conditional debug output of computer name.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
// These must be included first:
|
|||
|
|
|||
|
#include <nt.h> // (temporary for config.h)
|
|||
|
#include <ntrtl.h> // (temporary for config.h)
|
|||
|
#include <nturtl.h> // (temporary for config.h)
|
|||
|
#include <windef.h> // IN, VOID, etc.
|
|||
|
#include <lmcons.h> // NET_API_STATUS.
|
|||
|
|
|||
|
// These may be included in any order:
|
|||
|
|
|||
|
#include <config.h> // LPNET_CONFIG_HANDLE, NetpOpenConfigData, etc.
|
|||
|
#include <confname.h> // SECT_NT_WKSTA, etc.
|
|||
|
#include <debuglib.h> // IF_DEBUG().
|
|||
|
#include <lmapibuf.h> // NetApiBufferFree().
|
|||
|
#include <lmerr.h> // NO_ERROR, NERR_ and ERROR_ equates.
|
|||
|
#include <netdebug.h> // NetpAssert().
|
|||
|
#include <netlib.h> // LOCAL_DOMAIN_TYPE_PRIMARY
|
|||
|
#include <prefix.h> // PREFIX_ equates.
|
|||
|
#include <tstr.h> // ATOL(), STRLEN(), TCHAR_SPACE, etc.
|
|||
|
#include <winbase.h> // LocalAlloc().
|
|||
|
|
|||
|
|
|||
|
/****************************************************************************/
|
|||
|
NET_API_STATUS
|
|||
|
NetpGetComputerName (
|
|||
|
IN LPWSTR *ComputerNamePtr
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine obtains the computer name from a persistent database.
|
|||
|
Currently that database is the NT.CFG file.
|
|||
|
|
|||
|
This routine makes no assumptions on the length of the computername.
|
|||
|
Therefore, it allocates the storage for the name using NetApiBufferAllocate.
|
|||
|
It is necessary for the user to free that space using NetApiBufferFree when
|
|||
|
finished.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
ComputerNamePtr - This is a pointer to the location where the pointer
|
|||
|
to the computer name is to be placed.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NERR_Success - If the operation was successful.
|
|||
|
|
|||
|
It will return assorted Net or Win32 error messages if not.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
return NetpGetComputerNameEx( ComputerNamePtr, FALSE );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/****************************************************************************/
|
|||
|
NET_API_STATUS
|
|||
|
NetpGetComputerNameEx (
|
|||
|
IN LPWSTR *ComputerNamePtr,
|
|||
|
IN BOOL PhysicalNetbiosName
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine obtains the computer name from a persistent database.
|
|||
|
Currently that database is the NT.CFG file.
|
|||
|
|
|||
|
This routine makes no assumptions on the length of the computername.
|
|||
|
Therefore, it allocates the storage for the name using NetApiBufferAllocate.
|
|||
|
It is necessary for the user to free that space using NetApiBufferFree when
|
|||
|
finished.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
ComputerNamePtr - This is a pointer to the location where the pointer
|
|||
|
to the computer name is to be placed.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NERR_Success - If the operation was successful.
|
|||
|
|
|||
|
It will return assorted Net or Win32 error messages if not.
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
NET_API_STATUS ApiStatus;
|
|||
|
DWORD NameSize = MAX_COMPUTERNAME_LENGTH + 1; // updated by win32 API.
|
|||
|
|
|||
|
//
|
|||
|
// Check for caller's errors.
|
|||
|
//
|
|||
|
if (ComputerNamePtr == NULL) {
|
|||
|
return (ERROR_INVALID_PARAMETER);
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Allocate space for computer name.
|
|||
|
//
|
|||
|
ApiStatus = NetApiBufferAllocate(
|
|||
|
(MAX_COMPUTERNAME_LENGTH + 1) * sizeof(WCHAR),
|
|||
|
(LPVOID *) ComputerNamePtr);
|
|||
|
if (ApiStatus != NO_ERROR) {
|
|||
|
return (ApiStatus);
|
|||
|
}
|
|||
|
NetpAssert( *ComputerNamePtr != NULL );
|
|||
|
|
|||
|
//
|
|||
|
// Ask system what current computer name is.
|
|||
|
//
|
|||
|
if ( !GetComputerNameEx(
|
|||
|
PhysicalNetbiosName ?
|
|||
|
ComputerNamePhysicalNetBIOS :
|
|||
|
ComputerNameNetBIOS,
|
|||
|
*ComputerNamePtr,
|
|||
|
&NameSize ) ) {
|
|||
|
|
|||
|
ApiStatus = (NET_API_STATUS) GetLastError();
|
|||
|
NetpAssert( ApiStatus != NO_ERROR );
|
|||
|
(VOID) NetApiBufferFree( *ComputerNamePtr );
|
|||
|
*ComputerNamePtr = NULL;
|
|||
|
return (ApiStatus);
|
|||
|
}
|
|||
|
NetpAssert( STRLEN( *ComputerNamePtr ) <= MAX_COMPUTERNAME_LENGTH );
|
|||
|
|
|||
|
//
|
|||
|
// All done.
|
|||
|
//
|
|||
|
IF_DEBUG( CONFIG ) {
|
|||
|
NetpKdPrint(( PREFIX_NETLIB "NetpGetComputerName: name is "
|
|||
|
FORMAT_LPWSTR ".\n", *ComputerNamePtr ));
|
|||
|
}
|
|||
|
|
|||
|
return (NO_ERROR);
|
|||
|
}
|