122 lines
4.2 KiB
C
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);
|
||
|
}
|