Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
LogFileChanges.h
Abstract: This AppVerifier shim hooks all the native file I/O APIs that change the state of the system and logs their associated data to a text file.
Notes:
This is a general purpose shim.
History:
08/17/2001 rparsons Created
--*/ #ifndef __APPVERIFIER_LOGFILECHANGES_H_
#define __APPVERIFIER_LOGFILECHANGES_H_
#include "precomp.h"
//
// Length (in characters) of the largest element.
//
#define MAX_ELEMENT_SIZE 1024 * 10
//
// Length (in characters) of the longest operation type.
//
#define MAX_OPERATION_LENGTH 32
//
// Flags that indicate what state the file is in.
//
#define LFC_EXISTING 0x00000001
#define LFC_DELETED 0x00000002
#define LFC_MODIFIED 0x00000004
#define LFC_UNAPPRVFW 0x00000008
//
// Maximum number of handles we can track for a single file.
//
#define MAX_NUM_HANDLES 64
//
// We maintain a doubly linked list of file handles so we know what file is being modified
// during a file operation.
//
typedef struct _LOG_HANDLE { LIST_ENTRY Entry; HANDLE hFile[MAX_NUM_HANDLES]; // array of file handles
DWORD dwFlags; // flags that relate to the state of the file
LPWSTR pwszFilePath; // full path to the file
UINT cHandles; // number of handles open for this file
} LOG_HANDLE, *PLOG_HANDLE;
//
// Flags that define different settings in effect.
//
#define LFC_OPTION_ATTRIBUTES 0x00000001
#define LFC_OPTION_UFW_WINDOWS 0x00000002
#define LFC_OPTION_UFW_PROGFILES 0x00000004
//
// Enumeration for different operations.
//
typedef enum { eCreatedFile = 0, eOpenedFile, eDeletedFile, eModifiedFile, eRenamedFile } OperationType;
#ifdef ARRAYSIZE
#undef ARRAYSIZE
#endif
#define ARRAYSIZE(a) (sizeof(a)/sizeof(*a))
//
// Macros for memory allocation/deallocation.
//
#define MemAlloc(s) RtlAllocateHeap(RtlProcessHeap(), HEAP_ZERO_MEMORY, (s))
#define MemFree(b) RtlFreeHeap(RtlProcessHeap(), 0, (b))
//
// Keep us safe while we're playing with linked lists and shared resources.
//
static BOOL g_bInitialized = FALSE;
CRITICAL_SECTION g_csLogging;
class CLock { public: CLock() { if (!g_bInitialized) { InitializeCriticalSection(&g_csLogging); g_bInitialized = TRUE; }
EnterCriticalSection(&g_csLogging); } ~CLock() { LeaveCriticalSection(&g_csLogging); } };
APIHOOK_ENUM_BEGIN
APIHOOK_ENUM_ENTRY(NtDeleteFile) APIHOOK_ENUM_ENTRY(NtClose) APIHOOK_ENUM_ENTRY(NtCreateFile) APIHOOK_ENUM_ENTRY(NtOpenFile) APIHOOK_ENUM_ENTRY(NtWriteFile) APIHOOK_ENUM_ENTRY(NtWriteFileGather) APIHOOK_ENUM_ENTRY(NtSetInformationFile)
APIHOOK_ENUM_END
#endif // __APPVERIFIER_LOGFILECHANGES_H_
|