windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/factory/ident.c
2020-09-26 16:20:57 +08:00

122 lines
4.2 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
ident.c
Abstract:
This module contains function for processing the identities section of WINBOM.INI
Author:
Stephen Lodwick (stelo) 7/27/2000
Revision History:
--*/
#include "factoryp.h"
#include <setupapi.h>
#include <syssetup.h>
#include <tchar.h>
//
// Internal Defines
//
#define INF_SEC_IDENTITIES _T("UserAccounts")
#define INF_SEC_IDENTITY _T("%s.Account")
#define INF_KEY_ALIAS _T("Alias")
#define INF_KEY_PASSWORD _T("Password")
#define INF_KEY_DESCRIPTION _T("Description")
// Typedefs for external functions
typedef BOOL (WINAPI *CreateLocalAdminAccountExW)
(
PCWSTR UserName,
PCWSTR Password,
PCWSTR Description,
PSID* PointerToUserSid OPTIONAL
);
BOOL UserIdent(LPSTATEDATA lpStateData)
{
LPTSTR lpWinbomPath = lpStateData->lpszWinBOMPath;
HINF hInf = NULL;
CreateLocalAdminAccountExW pCreateAccountW = NULL;
INFCONTEXT InfContext;
BOOL bRet;
TCHAR szIdentity[MAX_PATH],
szIdentitySection[MAX_PATH],
szPassword[MAX_PATH],
szDescription[MAX_PATH];
HINSTANCE hSyssetup = NULL;
DWORD dwReturn = 0;
if ((hInf = SetupOpenInfFile(lpWinbomPath, NULL, INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL)))
{
for ( bRet = SetupFindFirstLine(hInf, INF_SEC_IDENTITIES, NULL, &InfContext);
bRet;
bRet = SetupFindNextLine(&InfContext, &InfContext) )
{
// Make sure we set the line back to nothing
//
szIdentity[0] = NULLCHR;
szPassword[0] = NULLCHR;
// Get the name of the identity.
//
SetupGetStringField(&InfContext, 1, szIdentity, STRSIZE(szIdentity), NULL);
// ISSUE-2002/02/25-acosma,robertko - Doing the same thing twice here. *szIdentity AND szIdentity[0] ARE the same thing!
//
if ( *szIdentity && szIdentity[0] )
{
// Build the name of the section for this identity
//
if ( FAILED ( StringCchPrintf ( szIdentitySection, AS ( szIdentitySection ), INF_SEC_IDENTITY, szIdentity) ) )
{
FacLogFileStr(3, _T("StringCchPrintf failed %s %s" ), INF_SEC_IDENTITY, szIdentity );
}
// Get the Alias field
//
GetPrivateProfileString(szIdentitySection, INF_KEY_ALIAS, szIdentity, szIdentity, STRSIZE(szIdentity), lpWinbomPath);
// Get the Password field
//
// NTRAID#NTBUG9-551766-2002/02/26-acosma, robertko - Clear text password should not exist in winbom.
//
GetPrivateProfileString(szIdentitySection, INF_KEY_PASSWORD, NULLSTR, szPassword, STRSIZE(szPassword), lpWinbomPath);
// Get the Description field
//
GetPrivateProfileString(szIdentitySection, INF_KEY_DESCRIPTION, NULLSTR, szDescription, STRSIZE(szDescription), lpWinbomPath);
// Create the Local User/Admin Account
//
// ISSUE-2002/02/25-acosma, robertko - We don't need to LoadLibrary here since we are already linked to syssetup.lib.
//
if ( hSyssetup = LoadLibrary(_T("SYSSETUP.DLL")) )
{
// ISSUE-2002/02/25-acosma,robertko - dwReturn value is not being used. Remove it.
//
if ( pCreateAccountW = (CreateLocalAdminAccountExW)GetProcAddress(hSyssetup, "CreateLocalAdminAccountEx") )
dwReturn = pCreateAccountW(szIdentity, szPassword, szDescription, NULL);
FreeLibrary(hSyssetup);
}
}
}
SetupCloseInfFile(hInf);
}
return TRUE;
}
BOOL DisplayUserIdent(LPSTATEDATA lpStateData)
{
return IniSettingExists(lpStateData->lpszWinBOMPath, INF_SEC_IDENTITIES, NULL, NULL);
}