static int OnDeltaPos(HWND hDlg, NMUPDOWN * pNMUpDown) { TFileTestData * pData = GetDialogData(hDlg); LONGLONG ByteOffset = 0; DWORD Length = 0; if(pNMUpDown->hdr.idFrom == IDC_BYTE_OFFSET_SPIN) { DlgText2Hex64(hDlg, IDC_BYTE_OFFSET, &ByteOffset); ByteOffset -= pNMUpDown->iDelta * 0x10000; if(ByteOffset < 0) ByteOffset = 0; Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, ByteOffset); UpdateFileData(hDlg, NULL, pData->cbFileData, pData->FillPattern); } if(pNMUpDown->hdr.idFrom == IDC_LENGTH_SPIN) { DlgText2Hex32(hDlg, IDC_LENGTH, &Length); Length -= pNMUpDown->iDelta * 0x1000; if((int)Length < 0) Length = 0; Hex2DlgText32(hDlg, IDC_LENGTH, Length); UpdateFileData(hDlg, NULL, pData->cbFileData, pData->FillPattern); } return TRUE; }
static int OnDeltaPos(HWND hDlg, NMUPDOWN * pNMHDR) { LARGE_INTEGER Uint64; DWORD Uint32; // Get the proper edit box if(pNMHDR->hdr.idFrom == IDC_BYTE_OFFSET_SPIN) { DlgText2Hex64(hDlg, IDC_BYTE_OFFSET, &Uint64.QuadPart); if(pNMHDR->iDelta < 0) Uint64.QuadPart += 0x10000; else Uint64.QuadPart -= 0x10000; if(Uint64.HighPart & 0x80000000) Uint64.QuadPart = 0; Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, Uint64.QuadPart); return TRUE; } if(pNMHDR->hdr.idFrom == IDC_LENGTH_SPIN) { DlgText2Hex32(hDlg, IDC_LENGTH, &Uint32); if(pNMHDR->iDelta < 0) Uint32 += 0x10000; else Uint32 -= 0x10000; if(Uint32 & 0x80000000) Uint32 = 0; Hex2DlgText32(hDlg, IDC_LENGTH, Uint32); return TRUE; } return FALSE; }
static void CompleteReadWriteOperation(HWND hDlg, TApcReadWrite * pApc, int nError, DWORD dwTransferred) { HWND hWndEditor; // Set the information about the operation SetResultInfo(hDlg, nError, NULL, dwTransferred); // If the operation has succeeded, update few UI elements if(nError == ERROR_SUCCESS) { // If the "increase position" is checked, increment the byte position if(pApc->bIncrementPosition) { pApc->ByteOffset.QuadPart += dwTransferred; Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, pApc->ByteOffset.QuadPart); } // If we shall update the data view, do it if(pApc->bUpdateData) { hWndEditor = GetDlgItem(hDlg, IDC_FILE_DATA); InvalidateRect(hWndEditor, NULL, TRUE); } } }
static int OnDeltaPos(HWND hDlg, NMUPDOWN * pNMUpDown) { UINT nIDCtrl = 0; bool bIsValuePointer = false; switch(pNMUpDown->hdr.idFrom) { case IDC_SECTION_SIZE_UPDOWN: nIDCtrl = IDC_SECTION_SIZE; break; case IDC_BASE_ADDRESS_UPDOWN: nIDCtrl = IDC_BASE_ADDRESS; bIsValuePointer = true; break; case IDC_COMMIT_SIZE_UPDOWN: nIDCtrl = IDC_COMMIT_SIZE; bIsValuePointer = true; break; case IDC_SECTION_OFFSET_UPDOWN: nIDCtrl = IDC_SECTION_OFFSET; break; case IDC_VIEW_SIZE_UPDOWN: nIDCtrl = IDC_VIEW_SIZE; bIsValuePointer = true; break; default: assert(false); return FALSE; } // If we have to set a pointer, do it if(bIsValuePointer == false) { ULONGLONG NewValue; ULONGLONG OldValue; DlgText2Hex64(hDlg, nIDCtrl, (PLONGLONG)&OldValue); NewValue = OldValue - (pNMUpDown->iDelta * 0x1000); if(pNMUpDown->iDelta > 0 && NewValue > OldValue) NewValue = 0; Hex2DlgText64(hDlg, nIDCtrl, NewValue); } else { DWORD_PTR NewValue; DWORD_PTR OldValue; DlgText2HexPtr(hDlg, nIDCtrl, &OldValue); NewValue = OldValue - (pNMUpDown->iDelta * 0x1000); if(pNMUpDown->iDelta > 0 && NewValue > OldValue) NewValue = 0; Hex2DlgTextPtr(hDlg, nIDCtrl, NewValue); } return TRUE; }
static int OnInitDialog(HWND hDlg, LPARAM lParam) { PROPSHEETPAGE * pPage = (PROPSHEETPAGE *)lParam; TFileTestData * pData = (TFileTestData *)pPage->lParam; HWND hWndChild; SetDialogData(hDlg, pPage->lParam); // Configure dialog resizing if(pData->bEnableResizing) { pAnchors = new TAnchors(); pAnchors->AddAnchor(hDlg, IDC_BYTE_OFFSET_TITLE, akLeft | akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_BYTE_OFFSET, akLeft | akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_BYTE_OFFSET_SPIN, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_LENGTH_TITLE, akLeftCenter | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_LENGTH, akLeftCenter | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_LENGTH_SPIN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_INCREASE_FILEPOS, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_READ_FILE, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_WRITE_FILE, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_NTREAD_FILE, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_NTWRITE_FILE, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_LOCK_FILE, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_UNLOCK_FILE, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_NTLOCK_FILE, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_NTUNLOCK_FILE, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_FILL_DATA_MENU, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_GET_FILE_SIZE, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_SET_FILE_POINTER, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_SET_END_OF_FILE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_DATA, akAll); pAnchors->AddAnchor(hDlg, IDC_RESULT_FRAME, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_LAST_ERROR_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_LAST_ERROR, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_IOSTATUS_INFO_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_IOSTATUS_INFO, akLeft | akRight | akBottom); } // Allocate the initial data. Make them aligned to sector alignment pData->cbFileDataMax = INITIAL_DATA_BUFFER_SIZE; pData->pbFileData = (LPBYTE)VirtualAlloc(NULL, pData->cbFileDataMax, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); pData->cbFileData = 0; // Zero the data if(pData->pbFileData != NULL) memset(pData->pbFileData, 0, pData->cbFileDataMax); // If there's field for data obtained by ReadFile, sets it to 8 bytes per line hWndChild = GetDlgItem(hDlg, IDC_FILE_DATA); if(hWndChild != NULL) DataEditor_SetBytesPerLine(hWndChild, 0x08); // Set initial values for file position and data Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, 0); Hex2DlgText32(hDlg, IDC_LENGTH, INITIAL_DATA_BUFFER_SIZE); UpdateFileData(hDlg, NULL, 0, IDC_FILL_DATA_PATTERN); return TRUE; }
static int OnInitDialog(HWND hDlg, LPARAM lParam) { PROPSHEETPAGE * pPage = (PROPSHEETPAGE *)lParam; TFileTestData * pData = (TFileTestData *)pPage->lParam; SetDialogData(hDlg, pPage->lParam); // Configure dialog resizing if(pData->bEnableResizing) { pAnchors = new TAnchors(); pAnchors->AddAnchor(hDlg, IDC_MAIN_FRAME, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_NAME1, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_NAME1_BROWSE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_NAME2, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_NAME2_BROWSE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_MOVE_FILE, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_MOVE_OPTIONS, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_DELETE_FILE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_DELETE_DIRECTORY, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILEID_FRAME, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_ID, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_ID_USE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_OBJECT_ID, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_OBJECT_ID_USE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_OTHERS_FRAME, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_NT_QUERY_ATTRIBUTES_FILE, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_GET_FILE_ATTRIBUTES, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_FLUSH_FILE_BUFFERS, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_SET_SPARSE, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_OPLOCKS_FRAME, akAll); pAnchors->AddAnchor(hDlg, IDC_REQUEST_OPLOCK_MENU, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_BREAK_ACKNOWLEDGE_1, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_REQUEST_OPLOCK_WIN7, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_BREAK_ACKNOWLEDGE_2, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_RESULT_FRAME, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_LAST_ERROR_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_LAST_ERROR, akLeft | akRight | akBottom); } // Initialize tooltips g_Tooltip.AddToolTip(hDlg, IDC_NT_QUERY_ATTRIBUTES_FILE, IDS_NT_QUERY_ATTRIBUTES_FILE_TIP); g_Tooltip.AddToolTip(hDlg, IDC_GET_FILE_ATTRIBUTES, IDS_GET_FILE_ATTRIBUTES_TIP); g_Tooltip.AddToolTip(hDlg, IDC_FLUSH_FILE_BUFFERS, IDS_FLUSH_FILE_BUFFERS_TIP); g_Tooltip.AddToolTip(hDlg, IDC_SET_SPARSE, IDS_SET_SPARSE_TIP); Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, 0); Hex2DlgText32(hDlg, IDC_LENGTH, 0x10000); return TRUE; }
static int OnDeltaPos(HWND hDlg, NMUPDOWN * pNMUpDown) { LONGLONG AllocationSize; DlgText2Hex64(hDlg, IDC_ALLOCATION_SIZE, &AllocationSize); AllocationSize -= pNMUpDown->iDelta * 0x100; if(AllocationSize < 0) AllocationSize = 0; Hex2DlgText64(hDlg, IDC_ALLOCATION_SIZE, AllocationSize); return TRUE; }
static int OnMapViewClick(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); LARGE_INTEGER SectionOffset; NTSTATUS Status; SIZE_T ViewSize; PVOID BaseAddress; // If we have mapped view, unmap it now if(pData->bSectionViewMapped) OnUnmapViewClick(hDlg); // Get the values from dialog controls to the dialog data if(SaveDialog2(hDlg) != ERROR_SUCCESS) return FALSE; // Copy some values to stack SectionOffset.QuadPart = pData->SectionOffset.QuadPart; BaseAddress = pData->pvSectionMappedView; ViewSize = pData->cbSectViewSize; // Call the NtMapViewOfSection Status = NtMapViewOfSection(pData->hSection, NtCurrentProcess(), &BaseAddress, 0, pData->cbSectCommitSize, &SectionOffset, &ViewSize, ViewShare, pData->dwSectAllocType, pData->dwSectWin32Protect); if(NT_SUCCESS(Status)) { // If the section offset changed, set it to the dialog control if(SectionOffset.QuadPart != pData->SectionOffset.QuadPart) Hex2DlgText64(hDlg, IDC_SECTION_OFFSET, SectionOffset.QuadPart); if(BaseAddress != pData->pvSectionMappedView) Hex2DlgTextPtr(hDlg, IDC_BASE_ADDRESS, (ULONG_PTR)BaseAddress); if(ViewSize != pData->cbSectViewSize) Hex2DlgTextPtr(hDlg, IDC_VIEW_SIZE, ViewSize); // Remember the view pData->pvSectionMappedView = BaseAddress; pData->cbSectViewSize = ViewSize; pData->bSectionViewMapped = TRUE; } SetResultInfo(hDlg, Status, pData->hSection); UpdateDialog(hDlg, pData); return TRUE; }
static int OnSetActive(HWND hDlg) { TFileTestData * pData = GetDialogData(hDlg); TCHAR szEaInfo[128]; BOOL bEnabled = FALSE; int nChecked; // Set directory name and file name SetDlgItemText(hDlg, IDC_DIRECTORY_NAME, pData->szDirName); SetDlgItemText(hDlg, IDC_FILE_NAME, pData->szFileName1); // Convert both to NT name. if(GetWindowTextLength(GetDlgItem(hDlg, IDC_DIRECTORY_NAME)) == 0) ConvertToNtName(hDlg, IDC_FILE_NAME); ConvertToNtName(hDlg, IDC_DIRECTORY_NAME); // Set the various create options Hex2DlgText32(hDlg, IDC_OBJ_ATTR_FLAGS, pData->dwObjAttrFlags); Hex2DlgText32(hDlg, IDC_DESIRED_ACCESS, pData->dwDesiredAccess); Hex2DlgText64(hDlg, IDC_ALLOCATION_SIZE, pData->AllocationSize); Hex2DlgText32(hDlg, IDC_FILE_ATTRIBUTES, pData->dwFileAttributes); Hex2DlgText32(hDlg, IDC_SHARE_ACCESS, pData->dwShareAccess); Hex2DlgText32(hDlg, IDC_CREATE_OPTIONS, pData->dwCreateOptions); // Update the info about extended attributes rsprintf(szEaInfo, IDS_EA_INFO, pData->pFileEa, pData->dwEaSize); SetDlgItemText(hDlg, IDC_EXTENDED_ATTRIBUTES, szEaInfo); // Enable/disable transaction if(pfnRtlSetCurrentTransaction != NULL && IsHandleValid(pData->hTransaction)) bEnabled = TRUE; EnableDlgItems(hDlg, bEnabled, IDC_TRANSACTED, 0); if(bEnabled) CheckDlgButton(hDlg, IDC_TRANSACTED, pData->bUseTransaction); // Check/uncheck virtualization nChecked = TokenVirtualization(TOKEN_VIRT_QUERY, 0); CheckDlgButton(hDlg, IDC_VIRTUALIZATION, nChecked); // Enable/disable "NtClose" bEnabled = IsHandleValid(pData->hFile) ? TRUE : FALSE; EnableDlgItems(hDlg, bEnabled, IDC_CLOSE_HANDLE, 0); return TRUE; }
static int OnInitDialog(HWND hDlg, LPARAM lParam) { TFileTestData * pData; PROPSHEETPAGE * pPage = (PROPSHEETPAGE *)lParam; SetDialogData(hDlg, pPage->lParam); pData = (TFileTestData *)pPage->lParam; // Configure dialog resizing if(pData->bEnableResizing) { pAnchors = new TAnchors(); pAnchors->AddAnchor(hDlg, IDC_SECTION_FRAME, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_SECTION_NAME, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_SECTION_SIZE, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_SECTION_SIZE_UPDOWN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_DESIRED_ACCESS, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_DESIRED_ACCESS_BROWSE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_PAGE_PROTECTION, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_ALLOCATION_ATTRIBUTES, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_ALLOCATION_ATTRIBUTES_BROWSE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_HANDLE, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_NTCREATE_SECTION, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_NTOPEN_SECTION, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_NTCLOSE, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_SECTION_VIEW_FRAME, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_BASE_ADDRESS, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_BASE_ADDRESS_UPDOWN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_COMMIT_SIZE, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_COMMIT_SIZE_UPDOWN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_SECTION_OFFSET, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_SECTION_OFFSET_UPDOWN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_VIEW_SIZE, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_VIEW_SIZE_UPDOWN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_ALLOCATION_TYPE, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_ALLOCATION_TYPE_BROWSE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_WIN32_PROTECTION, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_MAP_VIEW, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_DATA_EDITOR, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_UNMAP_VIEW, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_RESULT_FRAME, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_RESULT_STATUS_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_RESULT_STATUS, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_HANDLE_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_HANDLE, akLeft | akRight | akBottom); } // If we have a tooltip window, init tooltips g_Tooltip.AddToolTip(hDlg, IDC_DESIRED_ACCESS, DesiredAccessValues); g_Tooltip.AddToolTip(hDlg, IDC_ALLOCATION_ATTRIBUTES, AllocationAttributesValues); g_Tooltip.AddToolTip(hDlg, IDC_ALLOCATION_TYPE, AllocationTypeValues); // Initialize the combo box InitPageProtections(hDlg, IDC_PAGE_PROTECTION, PageProtectionValues); InitPageProtections(hDlg, IDC_WIN32_PROTECTION, PageProtectionValues); // Initialize the input parameters Hex2DlgText64(hDlg, IDC_SECTION_SIZE, pData->MaximumSize.QuadPart); Hex2DlgText32(hDlg, IDC_DESIRED_ACCESS, pData->dwSectDesiredAccess); Hex2PageProtection(hDlg, IDC_PAGE_PROTECTION, pData->dwSectPageProtection); Hex2DlgText32(hDlg, IDC_ALLOCATION_ATTRIBUTES, pData->dwSectAllocAttributes); Hex2DlgTextPtr(hDlg, IDC_BASE_ADDRESS, (DWORD_PTR)pData->pvSectionMappedView); Hex2DlgTextPtr(hDlg, IDC_COMMIT_SIZE, pData->cbSectCommitSize); Hex2DlgText64 (hDlg, IDC_SECTION_OFFSET, pData->SectionOffset.QuadPart); Hex2DlgTextPtr(hDlg, IDC_VIEW_SIZE, pData->cbSectViewSize); Hex2DlgText32(hDlg, IDC_ALLOCATION_TYPE, pData->dwSectAllocType); Hex2PageProtection(hDlg, IDC_WIN32_PROTECTION, pData->dwSectWin32Protect); UpdateDialog(hDlg, pData); return TRUE; }