📄 filetest.h
字号:
/*****************************************************************************/
/* TestFile.h Copyright (c) Ladislav Zezula 2003 */
/*---------------------------------------------------------------------------*/
/* Definitions for file access testing application */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 14.07.03 1.00 Lad The first version of TestFile.h */
/*****************************************************************************/
#ifndef __TESTFILE_H__
#define __TESTFILE_H__
#ifndef UNICODE
#define UNICODE
#define _UNICODE
#endif
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <tchar.h>
#include <stdio.h>
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include <windows.h>
#include <windowsx.h>
#include <ShlObj.h>
#include "ntdll.h"
#include "Utils.h"
//-----------------------------------------------------------------------------
// Defines
#define IsHandleValid(h) (h != NULL && h != INVALID_HANDLE_VALUE)
#define IsHandleInvalid(h) (h == NULL || h == INVALID_HANDLE_VALUE)
#define ALIGN_INT32(Address) ((ULONG) ((Address + 3) & ~3))
#define ALIGN_INT64(Address) ((ULONG) ((Address + 7) & ~7))
#define ALIGN_EX(x, a) (((x) + (a)-1) & ~((a)-1))
#define MAX_NT_PATH 32767 // Maximum path name length in NT is 32767
#define OSVER_WINDOWS_2000 0x0500
#define OSVER_WINDOWS_XP 0x0501
#define OSVER_WINDOWS_2003 0x0502
#define OSVER_WINDOWS_VISTA 0x0600
//-----------------------------------------------------------------------------
// Structures
typedef struct
{
DWORD dwFlag;
TCHAR * szFlagText;
BOOL bEnabled;
} TFlagInfo;
typedef struct
{
TCHAR szDirName[MAX_NT_PATH]; // Directory name
TCHAR szFileName1[MAX_NT_PATH]; // First file name
TCHAR szFileName2[MAX_NT_PATH]; // Second file name
HANDLE hTransaction; // Handle to the current transaction (NULL if none)
HANDLE hDirectory; // Handle to the open directory
HANDLE hFile; // Handle to the open file
HANDLE hMap; // Map handle (if the file is mapped)
PVOID pvFile; // Map pointer (if the file is mapped and accessed)
DWORD dwMapped; // Number of bytes mapped
ACCESS_MASK dwDesiredAccess;
LARGE_INTEGER liAllocationSize;
ULONG dwFileAttributes;
ULONG dwShareAccess;
ULONG dwCreateDisposition;
ULONG dwCreateOptions;
ULONG dwObjAttrFlags; // ObjAttr.Attributes
ULONG dwPageAccess; // For CreateFileMapping
ULONG dwMapAccess; // For MapViewOfFile
BOOL bTransactionActive;
BOOL bUseTransaction;
int cbFileInfoBuff; // Size of pbFileInfoBuff in bytes
BYTE pbFileInfoBuff[1]; // Buffer for NtSetFileInfo
} TPropSheetData;
typedef struct
{
HWND hParent; // Parent of the dialog
UINT nIDTitle; // ID of the dialog title
DWORD dwFlags; // Flag value (in/out)
int nFlags; // Number of flags
TFlagInfo * Flags; // Flags (structure array)
} TFlagDialogData;
//-----------------------------------------------------------------------------
// Data types and strctures for NtQueryInformationFile and NtSetInformationFile
#define TYPE_NONE 0
#define TYPE_BOOLEAN 1
#define TYPE_UINT8 2
#define TYPE_UINT16 3
#define TYPE_UINT32 4
#define TYPE_UINT64 5
#define TYPE_STRING 6
#define TYPE_WSTRING 7
#define TYPE_UCHAR16 8 // UCHAR [16]
#define TYPE_HANDLE 9 // Handle
#define TYPE_POINTER 10 // pointer
#define TYPE_FDI_NAME 11 // FileName in FILE_DIRECTORY_INFORMATION
#define TYPE_FFDI_NAME 12 // FileName in FILE_FULL_DIRECTORY_INFORMATION
#define TYPE_FBDI_NAME1 13 // ShortName in FILE_BOTH_DIRECTORY_INFORMATION
#define TYPE_FBDI_NAME2 14 // FileName in FILE_BOTH_DIRECTORY_INFORMATION
#define TYPE_FNI_NAME 15 // FileName in FILE_NAME_INFORMATION
#define TYPE_FNS_NAME 16 // FileName in FILE_NAMES_INFORMATION
#define TYPE_FFEA_NAME 17 // EaName in FILE_FULL_EA_INFORMATION
#define TYPE_FSI_NAME 18 // Name in FILE_STREAM_INFORMATION
#define TYPE_FIBD_NAME1 19 // ShortName in FILE_ID_BOTH_DIR_INFORMATION
#define TYPE_FIBD_NAME2 20 // FileName in FILE_ID_BOTH_DIR_INFORMATION
#define TYPE_FIFD_NAME 21 // FileName in FILE_ID_FULL_DIR_INFORMATION
#define TYPE_FRI_NAME 22 // FileName in FILE_RENAME_INFORMATION
#define TYPE_LE_NAME 23 // FileName in FILE_LINK_ENTRY_INFORMATION
#define TYPE_STRUCT 24 // Sub-structure, nMemberSize must be sizeof(structure) !!!
#define MEMBER_SIZE_SPECIAL (UINT)-1 // For variable length data items
struct TStructMember
{
LPCTSTR szMemberName; // Name of the member
UINT nDataType; // Data type
UINT nMemberSize; // Size (in bytes) of the structure member
union
{
TStructMember * pSubItems; // Subitems, if this is structure too
PBYTE pDataPtr; // If this describes data item, pointer to binary data
};
};
struct TFileInfoData
{
FILE_INFORMATION_CLASS FileInfoClass; // Value for NtSetInformationFile
LPCTSTR szFileInfoClass; // Text for the value
LPCTSTR szStructName; // Name of the input/output structure
TStructMember * pStructMembers; // Description of the data structure
// (NULL = not implemented)
BOOL bIsChain; // if TRUE, it is a chain of structures
// (with ULONG NextEntryOffset as first member)
BOOL bIsEditable; // If TRUE, the structu is editable
// and able to send to NtSetInfo
};
#define FILE_INFO_READONLY(classname, structname, ischain) \
{classname, _T(#classname), _T(#structname), classname##Members, ischain, FALSE}
#define FILE_INFO_EDITABLE(classname, structname, ischain) \
{classname, _T(#classname), _T(#structname), classname##Members, ischain, TRUE}
#define FILE_INFO_UNSUPPORTED(classname, structname, ischain) \
{classname, _T(#classname), NULL, NULL, FALSE, FALSE}
//-----------------------------------------------------------------------------
// Prototypes for transaction APIs
typedef HANDLE (WINAPI * CREATETRANSACTION)(
LPSECURITY_ATTRIBUTES lpTransactionAttributes,
LPGUID TransactionGuid,
DWORD CreateOptions,
DWORD IsolationLevel,
DWORD IsolationFlags,
DWORD dwMilliseconds,
LPWSTR Description
);
typedef BOOL (WINAPI * SETCURRENTTRANSACTION)(
HANDLE hTransaction
);
typedef BOOL (WINAPI * COMMITTRANSACTION)(
HANDLE hTransaction
);
typedef BOOL (WINAPI * ROLLBACKTRANSACTION)(
HANDLE hTransaction
);
typedef HANDLE (WINAPI * RTLGETCURRENTTRANSACTION)(
);
typedef VOID (WINAPI * RTLSETCURRENTTRANSACTION)(
HANDLE TransactionHandle
);
typedef HANDLE (WINAPI * CREATEFILETRANSACTED)(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile,
HANDLE hTransaction,
PUSHORT pusMiniVersion,
PVOID lpExtendedParameter);
//-----------------------------------------------------------------------------
// Global variables
extern HINSTANCE g_hInst;
extern HANDLE g_hHeap;
extern BOOL g_bDisableDialogDispatch;
extern CREATETRANSACTION pfnCreateTransaction;
extern COMMITTRANSACTION pfnCommitTransaction;
extern ROLLBACKTRANSACTION pfnRollbackTransaction;
extern RTLGETCURRENTTRANSACTION pfnRtlGetCurrentTransaction;
extern RTLSETCURRENTTRANSACTION pfnRtlSetCurrentTransaction;
extern CREATEFILETRANSACTED pfnCreateFileTransacted;
//-----------------------------------------------------------------------------
// NTSTATUS conversion
const TCHAR * NtStatus2Text(NTSTATUS Status);
//-----------------------------------------------------------------------------
// Utilities (in Utils.cpp)
DWORD Text2CreateDisposition(const TCHAR * szText);
void CreateDisposition2Text(DWORD dwCreateDisposition, TCHAR * szBuffer);
DWORD DlgText2Hex32(HWND hDlg, UINT nIDCtrl);
DWORD Text2Hex32(const TCHAR * szText);
void Hex2Text32(DWORD dwValue, TCHAR * szBuffer);
void Hex2DlgText32(HWND hDlg, UINT nIDCtrl, DWORD dwValue);
DWORD_PTR DlgText2HexPtr(HWND hDlg, UINT nIDCtrl);
DWORD_PTR Text2HexPtr(const TCHAR * szText);
void Hex2TextPtr(DWORD_PTR & dwpValue, TCHAR * szBuffer);
void Hex2DlgTextPtr(HWND hDlg, UINT nIDCtrl, DWORD_PTR dwpValue);
LARGE_INTEGER DlgText2Hex64(HWND hDlg, UINT nIDCtrl);
LARGE_INTEGER Text2Hex64(const TCHAR * szText);
void Hex2Text64(LARGE_INTEGER & liValue, TCHAR * szBuffer);
void Hex2DlgText64(HWND hDlg, UINT nIDCtrl, LARGE_INTEGER & liValue);
int SetLastErrorText(HWND hDlg, UINT nIDCtrl, int nError);
ULONG GetEaEntrySize(PFILE_FULL_EA_INFORMATION EaInfo);
HTREEITEM InsertTreeItem(HWND hTreeView, HTREEITEM hParentItem, LPCTSTR szText, PVOID pParam);
void ResolveDynamicLoadedAPIs();
void UnloadDynamicLoadedAPIs();
//-----------------------------------------------------------------------------
// Global functions
INT_PTR FlagsDialog(TFlagDialogData * pData);
INT_PTR EaEditorDialog(HWND hParent, PFILE_FULL_EA_INFORMATION * pEaInfo);
//-----------------------------------------------------------------------------
// Message handlers for each page
INT_PTR CALLBACK PageProc00(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc01(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc02(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc03(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc04(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc05(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc06(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK PageProc07(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
#endif // __TESTFILE_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -