windows-nt/Source/XPSP1/NT/base/ntsetup/oobe/msobmain/auditmd.cpp
2020-09-26 16:20:57 +08:00

231 lines
6 KiB
C++

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1999 **
//*********************************************************************
//
// auditmd.CPP - Implementation of CObWebBrowser
//
// HISTORY:
//
// 9/17/99 vyung Created.
//
// Class which will call up setupx.dll
#include <windows.h>
#include <windowsx.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include "appdefs.h"
#include "msobmain.h"
#include "resource.h"
// The licence agreement needs to be in this path
#define SZ_OEMAUDIT_LICENSE_TXT L"%SystemRoot%\\OPTIONS\\OEMLCNS.TXT" // text file for the oem license page
#define SZ_EULA_LICENSE_TXT L"%SystemRoot%\\SYSTEM32\\EULA.TXT" // text file for the oem license page
#define DX_MARGIN 4 // Pixels between status buttons.
#define UI_POS_MARGIN 8 // Pixels to allow on edges.
#define DLG_CENTERH 0x01
#define DLG_CENTERV 0x02
#define DLG_TOP 0x04
#define DLG_BOTTOM 0x08
#define DLG_RIGHT 0x10
#define DLG_LEFT 0x11
HINSTANCE ghInst = NULL;
/****************************************************************************
*
* uiPositionDialog()
*
* This routine will position your dialog based on the flags
* passed to it.
*
* ENTRY:
* hwndDlg - Dialog window.
* wPosFlags - Defines how to position the dialog. Valid flags are
* DLG_CENTERV, DLG_CENTERH, DLG_TOP, DLG_BOTTOM,
* DLG_RIGHT, DLG_LEFT, or DLG_CENTER.
*
* EXIT:
* None.
*
* NOTES:
* None.
*
***************************************************************************/
BOOL WINAPI uiPositionDialog( HWND hwndDlg, WORD wPosFlags )
{
RECT rc;
int x, y;
int cxDlg, cyDlg;
int cxScreen = GetSystemMetrics( SM_CXSCREEN );
int cyScreen = GetSystemMetrics( SM_CYSCREEN );
GetWindowRect(hwndDlg, &rc);
x = rc.left; // Default is to leave the dialog where the template
y = rc.top; // was going to place it.
cxDlg = rc.right - rc.left;
cyDlg = rc.bottom - rc.top;
if ( wPosFlags & DLG_TOP )
{
y = UI_POS_MARGIN;
}
if ( wPosFlags & DLG_BOTTOM )
y = cyScreen - cyDlg;
if ( wPosFlags & DLG_LEFT )
{
x = UI_POS_MARGIN;
}
if ( wPosFlags & DLG_RIGHT )
{
x = cxScreen - cxDlg;
}
if ( wPosFlags & DLG_CENTERV )
{
y = (cyScreen - cyDlg) / 2;
}
if ( wPosFlags & DLG_CENTERH )
{
x = (cxScreen - cxDlg) / 2;
}
// Position the dialog.
//
return SetWindowPos(hwndDlg, NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE);
}
BOOL FillInOEMAuditLicense(HWND hwnd)
{
DWORD reRet = 0;
HANDLE hfile = NULL;
DWORD dwBytesRead;
TCHAR szEulaFile[MAX_PATH];
ExpandEnvironmentStrings(SZ_EULA_LICENSE_TXT,
szEulaFile,
sizeof(szEulaFile)/sizeof(szEulaFile[0]));
if (INVALID_HANDLE_VALUE != (hfile = CreateFile(szEulaFile,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL)))
{
DWORD dwFileSize = GetFileSize(hfile, NULL);
if (dwFileSize <= 0xFFFF)
{
BYTE * lpszText = new BYTE[dwFileSize + 1];
if (lpszText != NULL)
{
// Read complete file
// Attempt a synchronous read operation.
if (ReadFile(hfile, (LPVOID) lpszText, dwFileSize, &dwBytesRead, NULL) &&
( dwBytesRead != dwFileSize))
{
reRet = 100;
}
SetWindowTextA( GetDlgItem(hwnd, IDC_OEMLICENSE_TEXT), (LPCSTR)lpszText);
delete [] lpszText;
}
else
reRet = 102;
}
else
reRet = 103;
// Close the File
CloseHandle(hfile);
}
else
reRet = 101;
return (reRet == 0);
}
// Dlg proc for the OEM license page. This is used in manual auditing.
INT_PTR CALLBACK sxOemAuditLicenseDlgProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HBRUSH hbrBkGnd = NULL;
static DWORD dwAuditMode;
WCHAR szTitle[MAX_PATH] = L"\0";
switch( msg )
{
case WM_INITDIALOG:
// Look for the OEM audit child windows
LoadString(ghInst, IDS_OEM_LICENSE_DLG_TITLE, szTitle, MAX_CHARS_IN_BUFFER(szTitle));
SetWindowText(hwnd, szTitle);
SetFocus(hwnd);
hbrBkGnd = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
// Checks if we allow maual audit boot
if (FillInOEMAuditLicense(hwnd))
uiPositionDialog( hwnd, DLG_CENTERH | DLG_CENTERV );
else
EndDialog(hwnd, IDCANCEL);
return FALSE;
case WM_CTLCOLOR:
SetBkColor( (HDC)wParam, GetSysColor(COLOR_BTNFACE) );
return (INT_PTR)hbrBkGnd;
case WM_DESTROY:
if (hbrBkGnd)
DeleteObject(hbrBkGnd);
hbrBkGnd = NULL;
break;
case WM_COMMAND:
switch( wParam )
{
case IDOK:
case IDCANCEL:
EndDialog(hwnd, wParam);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
BOOL ProcessAuditBoot(HINSTANCE hInst, HWND hwndParent)
{
ghInst = hInst;
return (DialogBox(hInst, MAKEINTRESOURCE(IDD_OEMLICENSE), hwndParent, sxOemAuditLicenseDlgProc) == IDOK);
}