Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
5.2 KiB

  1. #include "muisetup.h"
  2. #include <shlwapi.h>
  3. #include <shellapi.h>
  4. #define STRSAFE_LIB
  5. #include <strsafe.h>
  6. #define README_FILENAME TEXT("README.TXT")
  7. #define EULA_FILENAME TEXT("EULA.TXT")
  8. BOOL g_bLicenseAccepted;
  9. INT_PTR
  10. CALLBACK
  11. WelcomeDialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  12. {
  13. HANDLE hFile=INVALID_HANDLE_VALUE;
  14. DWORD dwFileSize;
  15. DWORD dwActual;
  16. LPVOID pFileBuffer;
  17. TCHAR szEulaPath[MAX_PATH];
  18. BOOL bResult = FALSE;
  19. HRESULT hresult;
  20. switch ( uMsg ) {
  21. case WM_INITDIALOG:
  22. //
  23. // Load EULA file from the path where MUISETUP was lunched
  24. //
  25. GetModuleFileName( NULL, szEulaPath, ARRAYSIZE( szEulaPath ));
  26. //*STRSAFE* lstrcpy(StrRChrI(szEulaPath, NULL, TEXT('\\'))+1, EULA_FILENAME);
  27. hresult = StringCchCopy(StrRChrI(szEulaPath, NULL, TEXT('\\'))+1, ARRAYSIZE(szEulaPath) - lstrlen(szEulaPath), EULA_FILENAME);
  28. if (!SUCCEEDED(hresult))
  29. {
  30. return 1;
  31. }
  32. hFile = CreateFile(
  33. szEulaPath,
  34. GENERIC_READ,
  35. FILE_SHARE_READ | FILE_SHARE_WRITE,
  36. NULL,
  37. OPEN_EXISTING,
  38. FILE_ATTRIBUTE_NORMAL,
  39. NULL
  40. );
  41. if ( hFile != INVALID_HANDLE_VALUE ) {
  42. dwFileSize = GetFileSize( hFile, NULL );
  43. if ( dwFileSize != -1 ) {
  44. pFileBuffer = LocalAlloc(LPTR, dwFileSize + 1 );
  45. if ( pFileBuffer ) {
  46. if ( ReadFile( hFile, pFileBuffer, dwFileSize, &dwActual, NULL )) {
  47. //
  48. // Make sure to NULL terminate the string
  49. //
  50. *((PCHAR)((PCHAR)pFileBuffer + dwFileSize)) = 0x00;
  51. //
  52. // Use ANSI text
  53. //
  54. SetDlgItemTextA( hWndDlg, IDC_EDIT_LICENSE, (LPCSTR)pFileBuffer );
  55. bResult = TRUE;
  56. }
  57. LocalFree( pFileBuffer );
  58. }
  59. }
  60. }
  61. SetFocus( GetDlgItem( hWndDlg, IDC_CHECK_LICENSE ));
  62. if ( hFile != INVALID_HANDLE_VALUE )
  63. {
  64. CloseHandle(hFile);
  65. }
  66. if (! bResult)
  67. {
  68. EndDialog( hWndDlg, ERROR_CANCELLED );
  69. return 1;
  70. }
  71. else
  72. {
  73. return 0;
  74. }
  75. case WM_COMMAND:
  76. switch ( LOWORD( wParam ))
  77. {
  78. case IDOK:
  79. g_bLicenseAccepted = ( IsDlgButtonChecked( hWndDlg, IDC_CHECK_LICENSE ) == BST_CHECKED );
  80. EndDialog( hWndDlg, 0 );
  81. return 1;
  82. case IDCANCEL:
  83. EndDialog( hWndDlg, ERROR_CANCELLED );
  84. return 1;
  85. case IDC_README:
  86. {
  87. // invoke notepad.exe open readme.txt
  88. TCHAR szReadMePath[MAX_PATH];
  89. SHELLEXECUTEINFO ExecInfo = {0};
  90. GetModuleFileName(NULL, szReadMePath, sizeof(szReadMePath)/sizeof(TCHAR));
  91. //*STRSAFE* lstrcpy(StrRChrI(szReadMePath, NULL, TEXT('\\'))+1, README_FILENAME);
  92. hresult = StringCchCopy(StrRChrI(szReadMePath, NULL, TEXT('\\'))+1, ARRAYSIZE(szReadMePath) - lstrlen(szReadMePath), README_FILENAME);
  93. if (!SUCCEEDED(hresult))
  94. {
  95. return 1;
  96. }
  97. ExecInfo.lpParameters = szReadMePath;
  98. ExecInfo.lpFile = TEXT("NOTEPAD.EXE");
  99. ExecInfo.nShow = SW_SHOWNORMAL;
  100. ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
  101. ShellExecuteEx(&ExecInfo);
  102. }
  103. return 1;
  104. case IDC_CHECK_LICENSE:
  105. EnableWindow( GetDlgItem( hWndDlg, IDOK ), IsDlgButtonChecked( hWndDlg, IDC_CHECK_LICENSE ) == BST_CHECKED );
  106. return 1;
  107. }
  108. break;
  109. case WM_CLOSE:
  110. EndDialog( hWndDlg, ERROR_CANCELLED );
  111. return 1;
  112. }
  113. return 0;
  114. }
  115. BOOL
  116. WelcomeDialog(HWND hWndParent)
  117. {
  118. INT_PTR Status;
  119. Status = DialogBox(
  120. NULL,
  121. MAKEINTRESOURCE( IDD_WELCOME ),
  122. hWndParent,
  123. WelcomeDialogProc
  124. );
  125. return (( Status == ERROR_SUCCESS ) && ( g_bLicenseAccepted ));
  126. }