231 lines
6 KiB
C++
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);
|
||
|
}
|
||
|
|
||
|
|