
Бывалый

Профиль
Группа: Участник
Сообщений: 234
Регистрация: 2.10.2010
Репутация: нет Всего: нет
|
Народ подскажите, никак не могу врубиться в эти атрибуты доступа. Почему при EXECUTE чтение выполняется? Вот весь код | Код | //Кнопка Резервировать case IDC_RESERVE: // Резервирование адресного пространства lpMemoryRegionOne = VirtualAlloc(NULL, g_pPageSize*2 , MEM_RESERVE|MEM_COMMIT , PAGE_NOACCESS); lpMemoryRegionTwo = VirtualAlloc(NULL, g_pPageSize*2 , MEM_RESERVE|MEM_COMMIT , PAGE_NOACCESS);
// устанавливает фокус клавиатуры в edit SetFocus(GetDlgItem(hwnd, IDC_INDEX)); break;
/////////////////////////////////////////////////////////////////////////////// //поле ввода значения региона case IDC_INDEX: if (codeNotify != EN_CHANGE) break; if( Length = ::GetWindowTextLength(hwndEdit)) { lpszBuffer = new TCHAR[Length + 1]; ::GetWindowText(hwnd , lpszBuffer, ( Length + 1 ) * sizeof( TCHAR ) ); if( _stscanf( lpszBuffer, TEXT("%i"), &i ) == 1 ) { Index = (BYTE)i; } delete [] lpszBuffer; } else { EnableWindow(GetDlgItem(hwnd, IDC_WRITE), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_COPY), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_ZERO), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_QUERY), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_NOACCESS), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_READONLY), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_READWRITE), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_EXECUTE), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_EXECUTEREAD), TRUE); EnableWindow(GetDlgItem(hwnd, IDC_EXECUTEREADWRITE), TRUE); } break;
/////////////////////////////////////////////////////////////////////////////// //кнопка обнуления 1-го региона case IDC_ZERO: { __try { ZeroMemory(&lpMemoryRegionOne,sizeof(lpMemoryRegionOne)); } // Если возникло исключение, получаем и // отображаем его код __except (EXCEPTION_EXECUTE_HANDLER) { sprintf(chBuff, "Исключение с кодом\n" "%lX\n при обнулении региона памяти", GetExceptionCode());
MessageBox(hwnd, chBuff, "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; } // Если операция завершилась успешно, // сообщаем об этом пользователю MessageBox(hwnd, "Обнуление выполнено", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; } /////////////////////////////////////////////////////////////////////////////// //запись case IDC_WRITE: { __try { FillMemory(lpMemoryRegionOne,g_pPageSize*2,Index); } __except (EXCEPTION_EXECUTE_HANDLER) { sprintf(chBuff, "Исключение с кодом\n" "%lX\n при записи в регион памяти", GetExceptionCode());
MessageBox(hwnd, chBuff, "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
MessageBox(hwnd, "Запись выполнена", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
/////////////////////////////////////////////////////////////////////////////// // чтение case IDC_READ: { __try { Index = *((BYTE *)lpMemoryRegionOne); } __except (EXCEPTION_EXECUTE_HANDLER) { sprintf(chBuff, "Исключение с кодом\n" "%lX\n при чтении из региона памяти", GetLastError());
MessageBox(hwnd, chBuff, "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; } MessageBox(hwnd, "Чтение выполнено", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
/////////////////////////////////////////////////////////////////////////////// // фиксирование case IDC_LOCK: { if(VirtualLock(lpMemoryRegionOne, g_pPageSize*2) == FALSE) { MessageBox(hwnd, "Ошибка при фиксировании страниц в памяти", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
MessageBox(hwnd, "Фиксирование выполнено", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
/////////////////////////////////////////////////////////////////////////////// // расфиксирование case IDC_UNLOCK: { if(VirtualUnlock(lpMemoryRegionOne, g_pPageSize*2) == FALSE) { MessageBox(hwnd, "Ошибка при расфиксировании страниц в памяти", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
MessageBox(hwnd, "Расфиксирование выполнено", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
/////////////////////////////////////////////////////////////////////////////// //копирование case IDC_COPY: { __try { CopyMemory(lpMemoryRegionTwo,lpMemoryRegionOne,g_pPageSize*2); } __except (EXCEPTION_EXECUTE_HANDLER) { sprintf(chBuff, "Исключение с кодом\n" "%lX\n при копировании данных", GetExceptionCode());
MessageBox(hwnd, chBuff, "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; } MessageBox(hwnd, "Копирование выполнено", "Сообщение", MB_OK | MB_ICONEXCLAMATION); break; }
/////////////////////////////////////////////////////////////////////////////// // Устанавливаем тип доступа PAGE_NOACCESS case IDC_NOACCESS: { VirtualProtect(lpMemoryRegionOne, g_pPageSize*2 , PAGE_NOACCESS, &dwOldProtect);
// Отмечаем строку PAGE_NOACCESS IsDlgButtonChecked(hwnd, IDC_NOACCESS); SendMessage(hwndChek2, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek3, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek4, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek5, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek6, BM_SETCHECK, BST_UNCHECKED, 0); break; }
/////////////////////////////////////////////////////////////////////////////// // Устанавливаем тип доступа PAGE_READWRITE case IDC_READWRITE: { VirtualProtect(lpMemoryRegionOne, g_pPageSize*2 , PAGE_READWRITE, &dwOldProtect); VirtualProtect(lpMemoryRegionTwo, g_pPageSize*2, PAGE_READWRITE, &dwOldProtect);
// Отмечаем строку PAGE_READWRITE IsDlgButtonChecked(hwnd, IDC_READWRITE); SendMessage(hwndChek1, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek2, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek4, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek5, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek6, BM_SETCHECK, BST_UNCHECKED, 0); break; }
/////////////////////////////////////////////////////////////////////////////// // Устанавливаем тип доступа PAGE_READONLY case IDC_READONLY: { VirtualProtect(lpMemoryRegionOne, g_pPageSize*2 , PAGE_READONLY, &dwOldProtect);
// Отмечаем строку PAGE_READONLY IsDlgButtonChecked(hwnd, IDC_READONLY); SendMessage(hwndChek1, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek3, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek4, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek5, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek6, BM_SETCHECK, BST_UNCHECKED, 0); break; }
/////////////////////////////////////////////////////////////////////////////// // Устанавливаем тип доступа PAGE_EXECUTE case IDC_EXECUTE: { VirtualProtect(lpMemoryRegionOne, g_pPageSize*2 , PAGE_EXECUTE, &dwOldProtect);
// Отмечаем строку PAGE_EXECUTE IsDlgButtonChecked(hwnd, IDC_READONLY); SendMessage(hwndChek1, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek2, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek3, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek5, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek6, BM_SETCHECK, BST_UNCHECKED, 0); break; }
/////////////////////////////////////////////////////////////////////////////// // Устанавливаем тип доступа PAGE_EXECUTE_READ case IDC_EXECUTEREAD: { VirtualProtect(lpMemoryRegionOne, g_pPageSize*2 , PAGE_EXECUTE_READ, &dwOldProtect);
// Отмечаем строку PAGE_EXECUTE_READ IsDlgButtonChecked(hwnd, IDC_READONLY); SendMessage(hwndChek1, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek2, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek3, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek4, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek6, BM_SETCHECK, BST_UNCHECKED, 0); break; }
/////////////////////////////////////////////////////////////////////////////// // Устанавливаем тип доступа PAGE_EXECUTE_READWRITE case IDC_EXECUTEREADWRITE: { VirtualProtect(lpMemoryRegionTwo, g_pPageSize*2 , PAGE_EXECUTE_READWRITE, &dwOldProtect);
// Отмечаем строку PAGE_EXECUTE_READWRITE IsDlgButtonChecked(hwnd, IDC_READONLY); SendMessage(hwndChek1, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek2, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek3, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek4, BM_SETCHECK, BST_UNCHECKED, 0); SendMessage(hwndChek5, BM_SETCHECK, BST_UNCHECKED, 0); break; }
|
|