/*++ 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 #include #include // // 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); }