112 lines
2.3 KiB
C
112 lines
2.3 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
getconfg.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This routine calls GetComputerName[A,W] to obtain the computer name
|
|||
|
in both Ansi and Unicode
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Dan Lafferty (danl) 09-Apr-1991
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
User Mode -Win32 (also uses nt RTL routines)
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
09-Apr-1991 danl
|
|||
|
created
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include <nt.h> // DbgPrint prototype
|
|||
|
#include <ntrtl.h> // DbgPrint prototype
|
|||
|
#include <nturtl.h>
|
|||
|
#include <ntdef.h>
|
|||
|
#include <windef.h>
|
|||
|
#include <winbase.h> // LocalAlloc
|
|||
|
|
|||
|
|
|||
|
|
|||
|
DWORD
|
|||
|
ElfpGetComputerName (
|
|||
|
OUT LPSTR *ComputerNamePtrA,
|
|||
|
OUT LPWSTR *ComputerNamePtrW
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine obtains the computer name from a persistent database,
|
|||
|
by calling the GetcomputerName[A,W] Win32 Base APIs
|
|||
|
|
|||
|
This routine assumes the length of the computername is no greater
|
|||
|
than MAX_COMPUTERNAME_LENGTH, space for which it allocates using
|
|||
|
LocalAlloc. It is necessary for the user to free that space using
|
|||
|
LocalFree when finished.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
ComputerNamePtrA - Pointer to the location of the Ansi computer name
|
|||
|
ComputerNamePtrW - Pointer to the location of the Unicode computer name
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NO_ERROR - If the operation was successful.
|
|||
|
|
|||
|
Any other Win32 error if unsuccessful
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
DWORD dwError = NO_ERROR;
|
|||
|
DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
|
|||
|
|
|||
|
//
|
|||
|
// Allocate a buffer to hold the largest possible computer name.
|
|||
|
//
|
|||
|
|
|||
|
*ComputerNamePtrA = LocalAlloc(LMEM_ZEROINIT, nSize);
|
|||
|
*ComputerNamePtrW = LocalAlloc(LMEM_ZEROINIT, nSize * sizeof(WCHAR));
|
|||
|
|
|||
|
if (*ComputerNamePtrA == NULL || *ComputerNamePtrW == NULL) {
|
|||
|
goto CleanExit;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Get the computer name string into the locally allocated buffers
|
|||
|
// by calling the Win32 GetComputerName[A,W] APIs.
|
|||
|
//
|
|||
|
|
|||
|
if (!GetComputerNameA(*ComputerNamePtrA, &nSize)) {
|
|||
|
goto CleanExit;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// GetComputerName always updates nSize
|
|||
|
//
|
|||
|
|
|||
|
nSize = MAX_COMPUTERNAME_LENGTH + 1;
|
|||
|
|
|||
|
if (!GetComputerNameW(*ComputerNamePtrW, &nSize)) {
|
|||
|
goto CleanExit;
|
|||
|
}
|
|||
|
|
|||
|
return (NO_ERROR);
|
|||
|
|
|||
|
CleanExit:
|
|||
|
|
|||
|
dwError = GetLastError();
|
|||
|
LocalFree(*ComputerNamePtrA);
|
|||
|
LocalFree(*ComputerNamePtrW);
|
|||
|
*ComputerNamePtrA = NULL;
|
|||
|
*ComputerNamePtrW = NULL;
|
|||
|
return (dwError);
|
|||
|
}
|