⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 page04fileops.cpp

📁 This ZIP archive includes the sources (and executable) for the FileTest utility, written by Ladisla
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -