📄 page04fileops.cpp
字号:
SetLastErrorText(hDlg, IDC_LAST_ERROR, nError);
return TRUE;
}
static int OnAccessDataReadClick(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
PBYTE pbDataBegin = (PBYTE)pData->pvFile;
PBYTE pbDataEnd = (PBYTE)pData->pvFile + pData->dwMapped;
int nSum = 0;
__try
{
if(pData->pvFile != NULL && pData->dwMapped > 0)
{
while(pbDataBegin < pbDataEnd)
{
nSum += *pbDataBegin++;
}
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
MessageBoxRc(hDlg, IDS_ERROR, IDS_E_READ_DATA, GetExceptionCode(), (pbDataBegin - (PBYTE)pData->pvFile));
}
return TRUE;
}
static int OnAccessDataWriteClick(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
PBYTE pbDataBegin = (PBYTE)pData->pvFile;
PBYTE pbDataEnd = (PBYTE)pData->pvFile + pData->dwMapped;
__try
{
if(pData->pvFile != NULL && pData->dwMapped > 0)
{
while(pbDataBegin < pbDataEnd)
{
*pbDataBegin++ = 'A';
}
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
MessageBoxRc(hDlg, IDS_ERROR, IDS_E_WRITE_DATA, GetExceptionCode(), (pbDataBegin - (PBYTE)pData->pvFile));
}
return TRUE;
}
static int OnUnmapFileClick(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
if(pData->pvFile != NULL)
{
UnmapViewOfFile(pData->pvFile);
pData->pvFile = NULL;
}
if(IsHandleValid(pData->hMap))
{
CloseHandle(pData->hMap);
pData->hMap = NULL;
}
UpdateDialogButtons(hDlg);
SetLastErrorText(hDlg, IDC_LAST_ERROR, nError);
return TRUE;
}
static int OnDeleteFileClick(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
SaveDialog(hDlg);
if(!DeleteFile(pData->szFileName1))
nError = GetLastError();
UpdateDialogButtons(hDlg);
SetLastErrorText(hDlg, IDC_LAST_ERROR, nError);
return TRUE;
}
// Querying the file ID from the file itself
static int OnGetFileIdClick(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
FILE_INTERNAL_INFORMATION FileInternalInfo = {0};
OBJECT_ATTRIBUTES ObjAttr;
IO_STATUS_BLOCK IoStatus;
UNICODE_STRING FileName = {0, 0, NULL};
NTSTATUS Status = STATUS_SUCCESS;
HANDLE FileHandle = NULL;
TCHAR szFileID[32];
// Convert the file name to the NT file name
if(NT_SUCCESS(Status))
{
SaveDialog(hDlg);
if(!RtlDosPathNameToNtPathName_U(pData->szFileName1, &FileName, NULL, NULL))
Status = STATUS_UNSUCCESSFUL;
}
// Open the directory
if(NT_SUCCESS(Status))
{
InitializeObjectAttributes(&ObjAttr, &FileName, OBJ_CASE_INSENSITIVE, NULL, NULL);
Status = NtCreateFile(&FileHandle,
FILE_READ_ATTRIBUTES,
&ObjAttr,
&IoStatus,
NULL,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
FILE_OPEN,
0,
NULL,
0);
}
// Query the file internal information
if(NT_SUCCESS(Status))
{
Status = NtQueryInformationFile(FileHandle,
&IoStatus,
&FileInternalInfo,
sizeof(FILE_INTERNAL_INFORMATION),
FileInternalInformation);
}
if(NT_SUCCESS(Status))
{
_stprintf(szFileID, _T("%c:\\%016I64x"), pData->szFileName1[0], FileInternalInfo.IndexNumber.QuadPart);
SetDlgItemText(hDlg, IDC_FILE_ID, szFileID);
}
// On the end, set the file ID
if(FileHandle != NULL)
NtClose(FileHandle);
if(FileName.Buffer != NULL)
HeapFree(GetProcessHeap(), 0, FileName.Buffer);
SetDlgItemText(hDlg, IDC_LAST_ERROR, NtStatus2Text(Status));
return TRUE;
}
static int OnFileIDChange(HWND hDlg)
{
HWND hEdit = GetDlgItem(hDlg, IDC_FILE_ID);
BOOL bEnable = (GetWindowTextLength(hEdit) != 0);
EnableWindow(GetDlgItem(hDlg, IDC_USE_FILE_ID), bEnable);
return TRUE;
}
static int OnUseFileId(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
LPTSTR szPlainName;
HWND hPropSheet = GetParent(hDlg);
// Setup the create options for opening by file ID
GetDlgItemText(hDlg, IDC_FILE_ID, pData->szDirName, _tsize(pData->szDirName));
szPlainName = GetPlainName(pData->szDirName);
_tcscpy(pData->szFileName1, szPlainName);
*szPlainName = 0;
pData->dwCreateOptions = FILE_OPEN_BY_FILE_ID;
PropSheet_SetCurSelByID(hPropSheet, IDD_PAGE05_NTCREATE);
return TRUE;
}
static int OnGetFileAttributes(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
TCHAR szFileAttributes[512] = _T("");
DWORD dwAttr;
int nError = ERROR_SUCCESS;
SaveDialog(hDlg);
dwAttr = GetFileAttributes(pData->szFileName1);
if(dwAttr != INVALID_FILE_ATTRIBUTES)
{
for(int i = 0; FileAttributesValues[i].dwFlag != 0; i++)
{
if(dwAttr & FileAttributesValues[i].dwFlag)
{
_tcscat(szFileAttributes, FileAttributesValues[i].szFlagText);
_tcscat(szFileAttributes, _T("\n"));
}
}
if(szFileAttributes[0] == 0)
_tcscpy(szFileAttributes, _T("0"));
MessageBoxRc(hDlg, IDS_FILE_ATTRIBUTES, (UINT_PTR)szFileAttributes);
}
else
nError = GetLastError();
SetLastErrorText(hDlg, IDC_LAST_ERROR, nError);
return TRUE;
}
static int OnFlushFile(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
if (!FlushFileBuffers(pData->hFile))
nError = GetLastError();
SetLastErrorText(hDlg, IDC_LAST_ERROR, nError);
return TRUE;
}
static int OnCommand(HWND hDlg, UINT nNotify, UINT nIDCtrl)
{
if(nNotify == BN_CLICKED)
{
switch(nIDCtrl)
{
case IDC_BROWSE_FILE1:
BrowseForFile(hDlg, NULL, MAKEINTRESOURCE(IDC_FILE_NAME1), IDS_SELECT_FILE, IDS_FILTER_ALL);
return TRUE;
case IDC_BROWSE_FILE2:
BrowseForFile(hDlg, NULL, MAKEINTRESOURCE(IDC_FILE_NAME2), IDS_SELECT_FILE, IDS_FILTER_ALL);
return TRUE;
case IDC_COPYFILE:
return OnCopyFileClick(hDlg);
case IDC_MOVEFILE:
return OnMoveFileClick(hDlg);
case IDC_DELETE_FILE:
return OnDeleteFileClick(hDlg);
case IDC_MAP_FILE:
return OnMapFileClick(hDlg);
case IDC_ACCESS_DATA_READ:
return OnAccessDataReadClick(hDlg);
case IDC_ACCESS_DATA_WRITE:
return OnAccessDataWriteClick(hDlg);
case IDC_UNMAP_FILE:
return OnUnmapFileClick(hDlg);
case IDC_GET_FILEID:
return OnGetFileIdClick(hDlg);
case IDC_USE_FILE_ID:
return OnUseFileId(hDlg);
case IDC_GET_FILE_ATTRIBUTES:
return OnGetFileAttributes(hDlg);
case IDC_FLUSH_FILE_BUFFERS:
return OnFlushFile(hDlg);
}
}
if(nNotify == EN_CHANGE && nIDCtrl == IDC_FILE_ID)
return OnFileIDChange(hDlg);
return FALSE;
}
static int OnNotify(HWND hDlg, NMHDR * pNMHDR)
{
switch(pNMHDR->code)
{
case PSN_SETACTIVE:
return OnSetActive(hDlg);
case PSN_KILLACTIVE:
return OnKillActive(hDlg);
case UDN_DELTAPOS:
return OnDeltaPos(hDlg, (NMUPDOWN *)pNMHDR);
}
return FALSE;
}
//-----------------------------------------------------------------------------
// Public functions
INT_PTR CALLBACK PageProc04(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
return OnInitDialog(hDlg, lParam);
case WM_COMMAND:
return OnCommand(hDlg, HIWORD(wParam), LOWORD(wParam));
case WM_NOTIFY:
return OnNotify(hDlg, (NMHDR *)lParam);
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -