151 lines
6.3 KiB
C
151 lines
6.3 KiB
C
|
/****************************************************************************
|
||
|
|
||
|
Copyright (c) 2003 Microsoft Corporation
|
||
|
Module Name: ewfapi.h
|
||
|
Abstract: Defines the EWF APIs
|
||
|
Environment: User mode
|
||
|
Revision History:
|
||
|
|
||
|
****************************************************************************/
|
||
|
|
||
|
#ifndef __EWFAPI_H__
|
||
|
#define __EWFAPI_H__
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#ifndef EWFIMP
|
||
|
#define EWFIMP __declspec(dllimport)
|
||
|
#endif
|
||
|
|
||
|
typedef struct _EWF_VOLUME_NAME_ENTRY {
|
||
|
struct _EWF_VOLUME_NAME_ENTRY* Next;
|
||
|
WCHAR Name[1];
|
||
|
} EWF_VOLUME_NAME_ENTRY, *PEWF_VOLUME_NAME_ENTRY;
|
||
|
|
||
|
typedef enum {
|
||
|
EWF_NO_CMD = 0, // no pending command
|
||
|
EWF_ENABLE, // overlay will be enabled
|
||
|
EWF_DISABLE, // overlay will be disabled
|
||
|
EWF_SET_LEVEL, // overlay level will be set
|
||
|
EWF_COMMIT // current level will be committed to the protected volume
|
||
|
} EWF_CMD;
|
||
|
|
||
|
typedef enum {
|
||
|
EWF_ENABLED, // The overlay is enabled on the volume
|
||
|
EWF_DISABLED // The overlay is disabled on the volume
|
||
|
} EWF_STATE;
|
||
|
|
||
|
typedef enum {
|
||
|
EWF_DISK, // DISK overlay
|
||
|
EWF_RAM, // RAM overlay, with an associated overlay volume store
|
||
|
EWF_RAM_REG, // RAM overlay, without an associated overlay volume store
|
||
|
} EWF_TYPE,
|
||
|
*PEWF_TYPE;
|
||
|
|
||
|
#define EWF_MAX_DEVICE_NAME_LENGTH (256)
|
||
|
#define EWF_VOLUME_ID_SIZE (16)
|
||
|
|
||
|
typedef struct _EWF_VOLUME_DESC {
|
||
|
WCHAR DeviceName[EWF_MAX_DEVICE_NAME_LENGTH]; // Device name of the volume
|
||
|
UCHAR VolumeID[EWF_VOLUME_ID_SIZE]; // 16 byte volume identifier
|
||
|
} EWF_VOLUME_DESC, *PEWF_VOLUME_DESC;
|
||
|
|
||
|
//
|
||
|
// This is a variable size structure depending on how many protected overlay
|
||
|
// volumes there are.
|
||
|
//
|
||
|
typedef struct _EWF_OVERLAY_STORE_CONFIG {
|
||
|
ULONG FormatVersion; // Version of Overlay-Store format
|
||
|
LONGLONG VolumeSize; // Size of the overlay volume in bytes
|
||
|
|
||
|
ULONG NumSegments; // Number of segments that the volume is divided into
|
||
|
ULONG FreeSegments; // Number of segments that are free
|
||
|
ULONG SegmentSize; // Size of each segment in bytes
|
||
|
|
||
|
ULONG MaxVolumes; // Maximum number of protected volumes
|
||
|
ULONG NumVolumes; // Number of currently protected volumes
|
||
|
USHORT MaxLevels; // Maximum number of overlay levels
|
||
|
EWF_VOLUME_DESC VolumeDescArray[1];
|
||
|
// The array holds NumVolume count volume descriptions
|
||
|
} EWF_OVERLAY_STORE_CONFIG, *PEWF_OVERLAY_STORE_CONFIG;
|
||
|
|
||
|
typedef struct _EWF_COMMAND {
|
||
|
EWF_CMD Command; // ENABLE, DISABLE, etc..
|
||
|
ULONG Param1; // command first parameter.
|
||
|
ULONG Param2; // command second parameter.
|
||
|
|
||
|
} EWF_COMMAND, *PEWF_COMMAND;
|
||
|
|
||
|
#define EWF_MAX_LEVEL_NAME_LENGTH (64)
|
||
|
|
||
|
typedef struct _EWF_LEVEL_DESC {
|
||
|
WCHAR LevelName[EWF_MAX_LEVEL_NAME_LENGTH];
|
||
|
// friendly name of the level
|
||
|
// If the length is equal to EWF_MAX_LEVEL_NAME_LENGTH
|
||
|
// then no null terminator is stored.
|
||
|
FILETIME LevelEndTime; // time at which the level was ended
|
||
|
LONGLONG LevelDataSize; // Size of the data in the level in bytes
|
||
|
} EWF_LEVEL_DESC, *PEWF_LEVEL_DESC;
|
||
|
|
||
|
#define EWF_MAX_PERSISTENT_DATA (32) // maximum number of bytes that can be persisted
|
||
|
|
||
|
typedef struct _EWF_VOLUME_CONFIG {
|
||
|
EWF_TYPE Type; // Type of overlay for this volume
|
||
|
EWF_STATE State; // state of the overlay for this volume, ENABLED or DISABLED
|
||
|
EWF_COMMAND BootCommand; // Command to execute on next restart
|
||
|
|
||
|
// Small amount of persistent data that survives a restore
|
||
|
UCHAR PersistentData[EWF_MAX_PERSISTENT_DATA];
|
||
|
|
||
|
USHORT MaxLevels; // Maximum number of checkpoint levels for this volume
|
||
|
ULONG ClumpSize; // 512 bytes
|
||
|
USHORT CurrentLevel; // Current checkpoint level
|
||
|
|
||
|
union {
|
||
|
struct {
|
||
|
LONGLONG DiskMapSize; // Size of the mapping data on disk
|
||
|
LONGLONG DiskDataSize; // Size of the data stored on disk for this protected volume
|
||
|
} DiskOverlay;
|
||
|
|
||
|
struct {
|
||
|
LONGLONG RamDataSize; // Size of the data stored in RAM for this protected volume
|
||
|
} RamOverlay;
|
||
|
};
|
||
|
ULONG MemMapSize; // Size of the mapping data in memory
|
||
|
EWF_VOLUME_DESC VolumeDesc; // volume device name, and volume ID
|
||
|
EWF_LEVEL_DESC LevelDescArray[1]; // Level descripton and end time, and level data size
|
||
|
} EWF_VOLUME_CONFIG, *PEWF_VOLUME_CONFIG;
|
||
|
|
||
|
EWFIMP WCHAR WINAPI EwfMgrGetDriveLetterFromVolumeName(IN LPCWSTR lpVolumeName);
|
||
|
EWFIMP BOOL WINAPI EwfMgrVolumeNameListIsEmpty(IN PEWF_VOLUME_NAME_ENTRY pVolumeNameList);
|
||
|
EWFIMP VOID WINAPI EwfMgrVolumeNameEntryPop(IN PEWF_VOLUME_NAME_ENTRY* ppVolumeNameList);
|
||
|
EWFIMP VOID WINAPI EwfMgrVolumeNameListDelete(IN PEWF_VOLUME_NAME_ENTRY pVolumeNameList);
|
||
|
EWFIMP HANDLE WINAPI EwfMgrOpenProtected(IN LPCWSTR lpVolume);
|
||
|
EWFIMP BOOL WINAPI EwfMgrClose(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrClearCommand(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrSetPersistentData(IN HANDLE hDevice, IN LPBYTE lpPersistentData, IN DWORD cbPersistentData);
|
||
|
EWFIMP BOOL WINAPI EwfMgrGetPersistentData(IN HANDLE hDevice, OUT LPBYTE lpPersistentData, IN DWORD cbPersistentData);
|
||
|
EWFIMP BOOL WINAPI EwfMgrCheckpoint(IN HANDLE hDevice, IN OPTIONAL LPCWSTR lpDescription);
|
||
|
EWFIMP BOOL WINAPI EwfMgrRestore(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrDisable(IN HANDLE hDevice, IN BOOL fCommit);
|
||
|
EWFIMP BOOL WINAPI EwfMgrEnable(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrCommit(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrCommitAndDisableLive(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrCommitFile(IN HANDLE hDevice, IN LPWSTR lpFile);
|
||
|
EWFIMP BOOL WINAPI EwfMgrSetLevel(IN HANDLE hDevice, IN OPTIONAL LPCWSTR lpDescription, IN int Level,
|
||
|
IN BOOL fDeleteLevel);
|
||
|
EWFIMP PEWF_VOLUME_CONFIG WINAPI EwfMgrGetProtectedVolumeConfig(IN HANDLE hDevice);
|
||
|
EWFIMP PEWF_VOLUME_NAME_ENTRY WINAPI EwfMgrGetProtectedVolumeList(VOID);
|
||
|
EWFIMP HANDLE WINAPI EwfMgrOpenOverlayStore(IN BOOL fOpenForAsyncIO);
|
||
|
EWFIMP PEWF_OVERLAY_STORE_CONFIG WINAPI EwfMgrGetOverlayStoreConfig(IN HANDLE hDevice);
|
||
|
EWFIMP BOOL WINAPI EwfMgrRegisterLowSpaceNotification(IN HANDLE hDevice, IN LONGLONG FreeBytesRemaining,
|
||
|
IN LPOVERLAPPED lpOverlapped);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // __EWFAPI_H__
|