3567 lines
128 KiB
C
3567 lines
128 KiB
C
/*
|
|
* winioctl.h Win32 I/O control codes
|
|
*
|
|
* =========================================================================
|
|
*
|
|
* Open Watcom Project
|
|
*
|
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
|
*
|
|
* This file is automatically generated. Do not edit directly.
|
|
*
|
|
* =========================================================================
|
|
*/
|
|
|
|
#ifdef DEFINE_GUID
|
|
|
|
/* GUIDs */
|
|
DEFINE_GUID( GUID_DEVINTERFACE_DISK, 0x53F56307, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_CDROM, 0x53F56308, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_PARTITION, 0x53F4630A, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_TAPE, 0x53F4630B, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_WRITEONCEDISK, 0x53F4630C, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_VOLUME, 0x53F4630D, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_MEDIUMCHANGER, 0x53F46310, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_FLOPPY, 0x53F56311, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_CDCHANGER, 0x53F56312, 0xB6BF, 0x11D0, 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_STORAGEPORT, 0x2ACCFE60, 0xC130, 0x11D2, 0xB0, 0x82, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_HIDDEN_VOLUME, 0x7F108A28, 0x9833, 0x4B3B, 0xB7, 0x80, 0x2C, 0x6B, 0x5F, 0xA5, 0xC0, 0x62 );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_COMPORT, 0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73 );
|
|
DEFINE_GUID( GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18 );
|
|
|
|
/* Old names for compatibility */
|
|
#define DiskClassGuid GUID_DEVINTERFACE_DISK
|
|
#define CdRomClassGuid GUID_DEVINTERFACE_CDROM
|
|
#define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
|
|
#define TapeClassGuid GUID_DEVINTERFACE_TAPE
|
|
#define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
|
|
#define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
|
|
#define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
|
|
#define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
|
|
#define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
|
|
#define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
|
|
#define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
|
|
#define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT
|
|
#define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
|
|
|
|
#endif /* DEFINE_GUID */
|
|
|
|
#ifndef _WINIOCTL_
|
|
#define _WINIOCTL_
|
|
|
|
#ifndef _ENABLE_AUTODEPEND
|
|
#pragma read_only_file;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* This header contains a substantial number of constants and structures that overlap
|
|
* with various headers in the DDK. Include guards are used through this header to
|
|
* prevent conflicts.
|
|
*/
|
|
|
|
#ifndef _DEVIOCTL_
|
|
#define _DEVIOCTL_
|
|
|
|
/* Device type data type */
|
|
#define DEVICE_TYPE DWORD
|
|
|
|
/* Macros to manipulate I/O control codes */
|
|
#define CTL_CODE( p1, p2, p3, p4 ) \
|
|
(((p1) << 16) | ((p4) << 14) | ((p2) << 2) | (p3))
|
|
#define DEVICE_TYPE_FROM_CTL_CODE( x ) (((DWORD)(x & 0xFFFF0000L)) >> 16)
|
|
#define METHOD_FROM_CTL_CODE( x ) ((DWORD)(x & 0x00000003L))
|
|
|
|
/* Device types */
|
|
#define FILE_DEVICE_BEEP 0x00000001L
|
|
#define FILE_DEVICE_CD_ROM 0x00000002L
|
|
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003L
|
|
#define FILE_DEVICE_CONTROLLER 0x00000004L
|
|
#define FILE_DEVICE_DATALINK 0x00000005L
|
|
#define FILE_DEVICE_DFS 0x00000006L
|
|
#define FILE_DEVICE_DISK 0x00000007L
|
|
#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008L
|
|
#define FILE_DEVICE_FILE_SYSTEM 0x00000009L
|
|
#define FILE_DEVICE_INPORT_PORT 0x0000000AL
|
|
#define FILE_DEVICE_KEYBOARD 0x0000000BL
|
|
#define FILE_DEVICE_MAILSLOT 0x0000000CL
|
|
#define FILE_DEVICE_MIDI_IN 0x0000000DL
|
|
#define FILE_DEVICE_MIDI_OUT 0x0000000EL
|
|
#define FILE_DEVICE_MOUSE 0x0000000FL
|
|
#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010L
|
|
#define FILE_DEVICE_NAMED_PIPE 0x00000011L
|
|
#define FILE_DEVICE_NETWORK 0x00000012L
|
|
#define FILE_DEVICE_NETWORK_BROWSER 0x00000013L
|
|
#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014L
|
|
#define FILE_DEVICE_NULL 0x00000015L
|
|
#define FILE_DEVICE_PARALLEL_PORT 0x00000016L
|
|
#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017L
|
|
#define FILE_DEVICE_PRINTER 0x00000018L
|
|
#define FILE_DEVICE_SCANNER 0x00000019L
|
|
#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001AL
|
|
#define FILE_DEVICE_SERIAL_PORT 0x0000001BL
|
|
#define FILE_DEVICE_SCREEN 0x0000001CL
|
|
#define FILE_DEVICE_SOUND 0x0000001DL
|
|
#define FILE_DEVICE_STREAMS 0x0000001EL
|
|
#define FILE_DEVICE_TAPE 0x0000001FL
|
|
#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020L
|
|
#define FILE_DEVICE_TRANSPORT 0x00000021L
|
|
#define FILE_DEVICE_UNKNOWN 0x00000022L
|
|
#define FILE_DEVICE_VIDEO 0x00000023L
|
|
#define FILE_DEVICE_VIRTUAL_DISK 0x00000024L
|
|
#define FILE_DEVICE_WAVE_IN 0x00000025L
|
|
#define FILE_DEVICE_WAVE_OUT 0x00000026L
|
|
#define FILE_DEVICE_8042_PORT 0x00000027L
|
|
#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028L
|
|
#define FILE_DEVICE_BATTERY 0x00000029L
|
|
#define FILE_DEVICE_BUS_EXTENDER 0x0000002AL
|
|
#define FILE_DEVICE_MODEM 0x0000002BL
|
|
#define FILE_DEVICE_VDM 0x0000002CL
|
|
#define FILE_DEVICE_MASS_STORAGE 0x0000002DL
|
|
#define FILE_DEVICE_SMB 0x0000002EL
|
|
#define FILE_DEVICE_KS 0x0000002FL
|
|
#define FILE_DEVICE_CHANGER 0x00000030L
|
|
#define FILE_DEVICE_SMARTCARD 0x00000031L
|
|
#define FILE_DEVICE_ACPI 0x00000032L
|
|
#define FILE_DEVICE_DVD 0x00000033L
|
|
#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034L
|
|
#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035L
|
|
#define FILE_DEVICE_DFS_VOLUME 0x00000036L
|
|
#define FILE_DEVICE_SERENUM 0x00000037L
|
|
#define FILE_DEVICE_TERMSRV 0x00000038L
|
|
#define FILE_DEVICE_KSEC 0x00000039L
|
|
#define FILE_DEVICE_FIPS 0x0000003AL
|
|
#define FILE_DEVICE_INFINIBAND 0x0000003BL
|
|
#define FILE_DEVICE_VMBUS 0x0000003EL
|
|
#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003FL
|
|
#define FILE_DEVICE_WPD 0x00000040L
|
|
#define FILE_DEVICE_BLUETOOTH 0x00000041L
|
|
#define FILE_DEVICE_MT_COMPOSITE 0x00000042L
|
|
#define FILE_DEVICE_MT_TRANSPORT 0x00000043L
|
|
#define FILE_DEVICE_BIOMETRIC 0x00000044L
|
|
#define FILE_DEVICE_PMI 0x00000045L
|
|
|
|
/* Buffering methods */
|
|
#define METHOD_BUFFERED 0L
|
|
#define METHOD_IN_DIRECT 1L
|
|
#define METHOD_OUT_DIRECT 2L
|
|
#define METHOD_NEITHER 3L
|
|
#define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
|
|
#define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
|
|
|
|
/* File access types */
|
|
#define FILE_ANY_ACCESS 0x0000L
|
|
#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
|
|
#define FILE_READ_ACCESS 0x0001L
|
|
#define FILE_WRITE_ACCESS 0x0002L
|
|
|
|
#endif /* _DEVIOCTL_ */
|
|
|
|
#ifndef _NTDDSTOR_H_
|
|
#define _NTDDSTOR_H_
|
|
|
|
/* Primitive data types */
|
|
typedef DWORD DEVICE_DATA_MANAGEMENT_SET_ACTION;
|
|
|
|
/* Storage device I/O control codes */
|
|
#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
|
|
#define IOCTL_STORAGE_CHECK_VERIFY \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_CHECK_VERIFY2 \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_MEDIA_REMOVAL \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_EJECT_MEDIA \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_LOAD_MEDIA \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_LOAD_MEDIA2 \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_RESERVE \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_RELEASE \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_FIND_NEW_DEVICES \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_EJECTION_CONTROL \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_MCN_CONTROL \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_GET_MEDIA_TYPES \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0304, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_GET_HOTPLUG_INFO \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0305, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_SET_HOTPLUG_INFO \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0306, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_STORAGE_RESET_BUS \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_RESET_DEVICE \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_BREAK_RESERVATION \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_PERSISTENT_RESERVE_IN \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_STORAGE_GET_DEVICE_NUMBER \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_PREDICT_FAILURE \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_READ_CAPACITY \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_QUERY_PROPERTY \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS )
|
|
#define IOCTL_STORAGE_GET_BC_PROPERTIES \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_STORAGE_ALLOCATE_BC_STREAM \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_STORAGE_FREE_BC_STREAM \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define OBSOLETE_IOCTL_STORAGE_RESET_BUS \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE \
|
|
CTL_CODE( IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
|
|
/* Tape statistics flags */
|
|
#define RECOVERED_WRITES_VALID 0x00000001L
|
|
#define UNRECOVERED_WRITES_VALID 0x00000002L
|
|
#define RECOVERED_READS_VALID 0x00000004L
|
|
#define UNRECOVERED_READS_VALID 0x00000008L
|
|
#define WRITE_COMPRESSION_INFO_VALID 0x00000010L
|
|
#define READ_COMPRESSION_INFO_VALID 0x00000020L
|
|
|
|
/* TAPE_GET_STATISTICS operations */
|
|
#define TAPE_RETURN_STATISTICS 0L
|
|
#define TAPE_RETURN_ENV_INFO 1L
|
|
#define TAPE_RESET_STATISTICS 2L
|
|
|
|
/* Media characteristics */
|
|
#define MEDIA_ERASEABLE 0x00000001L
|
|
#define MEDIA_WRITE_ONCE 0x00000002L
|
|
#define MEDIA_READ_ONLY 0x00000004L
|
|
#define MEDIA_READ_WRITE 0x00000008L
|
|
#define MEDIA_WRITE_PROTECTED 0x00000100L
|
|
#define MEDIA_CURRENTLY_MOUNTED 0x80000000L
|
|
|
|
/* Device data set management action flags */
|
|
#define DeviceDsmActionFlag_NonDestructive 0x80000000L
|
|
|
|
/* Macro to manipulate device data data set management action flags */
|
|
#define IsDsmActionNonDestructive( x ) \
|
|
((BOOLEAN)(((x) & DeviceDsmActionFlag_NonDestructive) != 0L))
|
|
|
|
/* Device data set management actions */
|
|
#define DeviceDsmAction_None 0L
|
|
#define DeviceDsmAction_Trim 1L
|
|
#define DeviceDsmAction_Notification (2L | DeviceDsmActionFlag_NonDestructive)
|
|
|
|
/* Device data set management flags */
|
|
#define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE 0x00000001L
|
|
|
|
/* Device data set management notification flags */
|
|
#define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001L
|
|
#define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002L
|
|
|
|
/* Storage BC version number */
|
|
#define IOCTL_STORAGE_BC_VERSION 1L
|
|
|
|
/* Storage priority hint support flags */
|
|
#define STORAGE_PRIORITY_HINT_SUPPORTED 0x00000001L
|
|
|
|
/* Storage hotplug information */
|
|
typedef struct _STORAGE_HOTPLUG_INFO {
|
|
DWORD Size;
|
|
BOOLEAN MediaRemovable;
|
|
BOOLEAN MediaHotplug;
|
|
BOOLEAN DeviceHotplug;
|
|
BOOLEAN WriteCacheEnableOverride;
|
|
} STORAGE_HOTPLUG_INFO;
|
|
typedef STORAGE_HOTPLUG_INFO *PSTORAGE_HOTPLUG_INFO;
|
|
|
|
/* Storage device number */
|
|
typedef struct _STORAGE_DEVICE_NUMBER {
|
|
DEVICE_TYPE DeviceType;
|
|
DWORD DeviceNumber;
|
|
DWORD PartitionNumber;
|
|
} STORAGE_DEVICE_NUMBER;
|
|
typedef STORAGE_DEVICE_NUMBER *PSTORAGE_DEVICE_NUMBER;
|
|
|
|
/* Storage bus reset request */
|
|
typedef struct _STORAGE_BUS_RESET_REQUEST {
|
|
BYTE PathId;
|
|
} STORAGE_BUS_RESET_REQUEST;
|
|
typedef STORAGE_BUS_RESET_REQUEST *PSTORAGE_BUS_RESET_REQUEST;
|
|
|
|
/* Storage break reservation request */
|
|
typedef struct STORAGE_BREAK_RESERVATION_REQUEST {
|
|
DWORD Length;
|
|
BYTE _unused;
|
|
BYTE PathId;
|
|
BYTE TargetId;
|
|
BYTE Lun;
|
|
} STORAGE_BREAK_RESERVATION_REQUEST;
|
|
typedef STORAGE_BREAK_RESERVATION_REQUEST *PSTORAGE_BREAK_RESERVATION_REQUEST;
|
|
|
|
/* IOCTL_STORAGE_MEDIA_REMOVAL parameters */
|
|
typedef struct _PREVENT_MEDIA_REMOVAL {
|
|
BOOLEAN PreventMediaRemoval;
|
|
} PREVENT_MEDIA_REMOVAL;
|
|
typedef PREVENT_MEDIA_REMOVAL *PPREVENT_MEDIA_REMOVAL;
|
|
|
|
/* Class media change context */
|
|
typedef struct _CLASS_MEDIA_CHANGE_CONTEXT {
|
|
DWORD MediaChangeContext;
|
|
DWORD NewState;
|
|
} CLASS_MEDIA_CHANGE_CONTEXT;
|
|
typedef CLASS_MEDIA_CHANGE_CONTEXT *PCLASS_MEDIA_CHANGE_CONTEXT;
|
|
|
|
/* Tape statistics */
|
|
typedef struct _TAPE_STATISTICS {
|
|
DWORD Version;
|
|
DWORD Flags;
|
|
LARGE_INTEGER RecoveredWrites;
|
|
LARGE_INTEGER UnrecoveredWrites;
|
|
LARGE_INTEGER RecoveredReads;
|
|
LARGE_INTEGER UnrecoveredReads;
|
|
BYTE CompressionRatioReads;
|
|
BYTE CompressionRatioWrites;
|
|
} TAPE_STATISTICS;
|
|
typedef TAPE_STATISTICS *PTAPE_STATISTICS;
|
|
|
|
/* IOCTL_TAPE_GET_STATISTICS parameters */
|
|
typedef struct _TAPE_GET_STATISTICS {
|
|
DWORD Operation;
|
|
} TAPE_GET_STATISTICS;
|
|
typedef TAPE_GET_STATISTICS *PTAPE_GET_STATISTICS;
|
|
|
|
/* Storage media types */
|
|
typedef enum _STORAGE_MEDIA_TYPE {
|
|
DDS_4mm = 0x20,
|
|
MiniQic = 0x21,
|
|
Travan = 0x22,
|
|
QIC = 0x23,
|
|
MP_8mm = 0x24,
|
|
AME_8mm = 0x25,
|
|
AIT1_8mm = 0x26,
|
|
DLT = 0x27,
|
|
NCTP = 0x28,
|
|
IBM_3480 = 0x29,
|
|
IBM_3480E = 0x2A,
|
|
IBM_Magstar_3590 = 0x2B,
|
|
IBM_Magstar_MP = 0x2C,
|
|
STK_DATA_D3 = 0x2D,
|
|
SONY_DTF = 0x2E,
|
|
DV_6mm = 0x2F,
|
|
DMI = 0x30,
|
|
SONY_D2 = 0x31,
|
|
CLEANER_CARTRIDGE = 0x32,
|
|
CD_ROM = 0x33,
|
|
CD_R = 0x34,
|
|
CD_RW = 0x35,
|
|
DVD_ROM = 0x36,
|
|
DVD_R = 0x37,
|
|
DVD_RW = 0x38,
|
|
MO_3_RW = 0x39,
|
|
MO_5_WO = 0x3A,
|
|
MO_5_RW = 0x3B,
|
|
MO_5_LIMDOW = 0x3C,
|
|
PC_5_WO = 0x3D,
|
|
PC_5_RW = 0x3E,
|
|
PD_5_RW = 0x3F,
|
|
ABL_5_WO = 0x40,
|
|
PINNACLE_APEX_5_RW = 0x41,
|
|
SONY_12_WO = 0x42,
|
|
PHILIPS_12_WO = 0x43,
|
|
HITACHI_12_WO = 0x44,
|
|
CYGNET_12_WO = 0x45,
|
|
KODAK_14_WO = 0x46,
|
|
MO_NFR_525 = 0x47,
|
|
NIKON_12_RW = 0x48,
|
|
IOMEGA_ZIP = 0x49,
|
|
IOMEGA_JAZ = 0x4A,
|
|
SYQUEST_EZ135 = 0x4B,
|
|
SYQUEST_EZFLYER = 0x4C,
|
|
SYQUEST_SYJET = 0x4D,
|
|
AVATAR_F2 = 0x4E,
|
|
MP2_8mm = 0x4F,
|
|
DST_S = 0x50,
|
|
DST_M = 0x51,
|
|
DST_L = 0x52,
|
|
VXATape_1 = 0x53,
|
|
VXATape_2 = 0x54,
|
|
#if (NTDDI_VERSION < 0x05010000)
|
|
STK_EAGLE = 0x55,
|
|
#else
|
|
STK_9840 = 0x55,
|
|
#endif
|
|
LTO_Ultrium = 0x56,
|
|
LTO_Accelis = 0x57,
|
|
DVD_RAM = 0x58,
|
|
ATI_8mm = 0x59,
|
|
ADR_1 = 0x5A,
|
|
ADR_2 = 0x5B,
|
|
STK_9940 = 0x5C,
|
|
SAIT = 0x5D,
|
|
VXATape = 0x5E
|
|
} STORAGE_MEDIA_TYPE;
|
|
typedef STORAGE_MEDIA_TYPE *PSTORAGE_MEDIA_TYPE;
|
|
|
|
/* Storage bus types */
|
|
typedef enum _STORAGE_BUS_TYPE {
|
|
BusTypeUnknown = 0x00,
|
|
BusTypeScsi = 0x01,
|
|
BusTypeAtapi = 0x02,
|
|
BusTypeAta = 0x03,
|
|
BusType1394 = 0x04,
|
|
BusTypeSsa = 0x05,
|
|
BusTypeFibre = 0x06,
|
|
BusTypeUsb = 0x07,
|
|
BusTypeRAID = 0x08,
|
|
BusTypeiScsi = 0x09,
|
|
BusTypeSas = 0x0A,
|
|
BusTypeSata = 0x0B,
|
|
BusTypeSd = 0x0C,
|
|
BusTypeMmc = 0x0D,
|
|
BusTypeVirtual = 0x0E,
|
|
BusTypeFileBackedVirtual = 0x0F,
|
|
BusTypeMax = 0x10,
|
|
BusTypeMaxReserved = 0x7F
|
|
} STORAGE_BUS_TYPE;
|
|
typedef STORAGE_BUS_TYPE *PSTORAGE_BUS_TYPE;
|
|
|
|
/* Device media information */
|
|
typedef struct _DEVICE_MEDIA_INFO {
|
|
union {
|
|
struct {
|
|
LARGE_INTEGER Cylinders;
|
|
STORAGE_MEDIA_TYPE MediaType;
|
|
DWORD TracksPerCylinder;
|
|
DWORD SectorsPerTrack;
|
|
DWORD BytesPerSector;
|
|
DWORD NumberMediaSides;
|
|
DWORD MediaCharacteristics;
|
|
} DiskInfo;
|
|
struct {
|
|
LARGE_INTEGER Cylinders;
|
|
STORAGE_MEDIA_TYPE MediaType;
|
|
DWORD TracksPerCylinder;
|
|
DWORD SectorsPerTrack;
|
|
DWORD BytesPerSector;
|
|
DWORD NumberMediaSides;
|
|
DWORD MediaCharacteristics;
|
|
} RemovableDiskInfo;
|
|
struct {
|
|
STORAGE_MEDIA_TYPE MediaType;
|
|
DWORD MediaCharacteristics;
|
|
DWORD CurrentBlockSize;
|
|
STORAGE_BUS_TYPE BusType;
|
|
union {
|
|
struct {
|
|
BYTE MediumType;
|
|
BYTE DensityCode;
|
|
} ScsiInformation;
|
|
} BusSpecificData;
|
|
} TapeInfo;
|
|
} DeviceSpecific;
|
|
} DEVICE_MEDIA_INFO;
|
|
typedef DEVICE_MEDIA_INFO *PDEVICE_MEDIA_INFO;
|
|
|
|
/* Media type information */
|
|
typedef struct _GET_MEDIA_TYPES {
|
|
DWORD DeviceType;
|
|
DWORD MediaInfoCount;
|
|
DEVICE_MEDIA_INFO MediaInfo[1];
|
|
} GET_MEDIA_TYPES;
|
|
typedef GET_MEDIA_TYPES *PGET_MEDIA_TYPES;
|
|
|
|
/* IOCTL_STORAGE_PREDICT_FAILURE returned data */
|
|
typedef struct _STORAGE_PREDICT_FAILURE {
|
|
DWORD PredictFailure;
|
|
BYTE VendorSpecific[512];
|
|
} STORAGE_PREDICT_FAILURE;
|
|
typedef STORAGE_PREDICT_FAILURE *PSTORAGE_PREDICT_FAILURE;
|
|
|
|
/* Storage query types */
|
|
typedef enum _STORAGE_QUERY_TYPE {
|
|
PropertyStandardQuery = 0,
|
|
PropertyExistsQuery = 1,
|
|
PropertyMaskQuery = 2,
|
|
PropertyQueryMaxDefined = 3
|
|
} STORAGE_QUERY_TYPE;
|
|
typedef STORAGE_QUERY_TYPE *PSTORAGE_QUERY_TYPE;
|
|
|
|
/* Storage property identifiers */
|
|
typedef enum _STORAGE_PROPERTY_ID {
|
|
StorageDeviceProperty = 0,
|
|
StorageAdapterProperty = 1,
|
|
StorageDeviceIdProperty = 2,
|
|
StorageDeviceUniqueIdProperty = 3,
|
|
StorageDeviceWriteCacheProperty = 4,
|
|
StorageMiniportProperty = 5,
|
|
StorageAccessAlignmentProperty = 6,
|
|
StorageDeviceSeekPenaltyProperty = 7,
|
|
StorageDeviceTrimProperty = 8,
|
|
StorageDeviceWriteAggregationProperty = 9
|
|
} STORAGE_PROPERTY_ID;
|
|
typedef STORAGE_PROPERTY_ID *PSTORAGE_PROPERTY_ID;
|
|
|
|
/* Storage property query */
|
|
typedef struct _STORAGE_PROPERTY_QUERY {
|
|
STORAGE_PROPERTY_ID PropertyId;
|
|
STORAGE_QUERY_TYPE QueryType;
|
|
BYTE AdditionalParameters[1];
|
|
} STORAGE_PROPERTY_QUERY;
|
|
typedef STORAGE_PROPERTY_QUERY *PSTORAGE_PROPERTY_QUERY;
|
|
|
|
/* Storage description header */
|
|
typedef struct _STORAGE_DESCRIPTOR_HEADER {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
} STORAGE_DESCRIPTOR_HEADER;
|
|
typedef STORAGE_DESCRIPTOR_HEADER *PSTORAGE_DESCRIPTOR_HEADER;
|
|
|
|
/* Storage device descriptor */
|
|
typedef struct _STORAGE_DEVICE_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
BYTE DeviceType;
|
|
BYTE DeviceTypeModifier;
|
|
BOOLEAN RemovableMedia;
|
|
BOOLEAN CommandQueueing;
|
|
DWORD VendorIdOffset;
|
|
DWORD ProductIdOffset;
|
|
DWORD ProductRevisionOffset;
|
|
DWORD SerialNumberOffset;
|
|
STORAGE_BUS_TYPE BusType;
|
|
DWORD RawPropertiesLength;
|
|
BYTE RawDeviceProperties[1];
|
|
} STORAGE_DEVICE_DESCRIPTOR;
|
|
typedef STORAGE_DEVICE_DESCRIPTOR *PSTORAGE_DEVICE_DESCRIPTOR;
|
|
|
|
/* Storage adapter descriptor */
|
|
typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
DWORD MaximumTransferLength;
|
|
DWORD MaximumPhysicalPages;
|
|
DWORD AlignmentMask;
|
|
BOOLEAN AdapterUsesPio;
|
|
BOOLEAN AdapterScansDown;
|
|
BOOLEAN CommandQueueing;
|
|
BOOLEAN AcceleratedTransfer;
|
|
#if (NTDDI_VERSION < 0x05010000)
|
|
BOOLEAN BusType;
|
|
#else
|
|
BYTE BusType;
|
|
#endif
|
|
WORD BusMajorVersion;
|
|
WORD BusMinorVersion;
|
|
} STORAGE_ADAPTER_DESCRIPTOR;
|
|
typedef STORAGE_ADAPTER_DESCRIPTOR *PSTORAGE_ADAPTER_DESCRIPTOR;
|
|
|
|
/* Storage access alignment descriptor */
|
|
typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
DWORD BytesPerCacheLine;
|
|
DWORD BytesOffsetForCacheAlignment;
|
|
DWORD BytesPerLogicalSector;
|
|
DWORD BytesPerPhysicalSector;
|
|
DWORD BytesOffsetForSectorAlignment;
|
|
} STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
|
|
typedef STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
|
|
|
|
/* Storage port code sets */
|
|
typedef enum _STORAGE_PORT_CODE_SET {
|
|
StoragePortCodeSetReserved = 0,
|
|
StoragePortCodeSetStorport = 1,
|
|
StoragePortCodeSetSCSIport = 2
|
|
} STORAGE_PORT_CODE_SET;
|
|
typedef STORAGE_PORT_CODE_SET *PSTORAGE_PORT_CODE_SET;
|
|
|
|
/* Storage miniport descriptor */
|
|
typedef struct _STORAGE_MINIPORT_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
STORAGE_PORT_CODE_SET Portdriver;
|
|
BOOLEAN LUNResetSupported;
|
|
BOOLEAN TargetResetSupported;
|
|
} STORAGE_MINIPORT_DESCRIPTOR;
|
|
typedef STORAGE_MINIPORT_DESCRIPTOR *PSTORAGE_MINIPORT_DESCRIPTOR;
|
|
|
|
/* Storage identifier code sets */
|
|
typedef enum _STORAGE_IDENTIFIER_CODE_SET {
|
|
StorageIdCodeSetReserved = 0,
|
|
StorageIdCodeSetBinary = 1,
|
|
StorageIdCodeSetAscii = 2,
|
|
StorageIdCodeSetUtf8 = 3
|
|
} STORAGE_IDENTIFIER_CODE_SET;
|
|
typedef STORAGE_IDENTIFIER_CODE_SET *PSTORAGE_IDENTIFIER_CODE_SET;
|
|
|
|
/* Storage identifier types */
|
|
typedef enum _STORAGE_IDENTIFIER_TYPE {
|
|
StorageIdTypeVendorSpecific = 0,
|
|
StorageIdTypeVendorId = 1,
|
|
StorageIdTypeEUI64 = 2,
|
|
StorageIdTypeFCPHName = 3,
|
|
StorageIdTypePortRelative = 4,
|
|
StorageIdTypeTargetPortGroup = 5,
|
|
StorageIdTypeLogicalUnitGroup = 6,
|
|
StorageIdTypeMD5LogicalUnitIdentifier = 7,
|
|
StorageIdTypeScsiNameString = 8
|
|
} STORAGE_IDENTIFIER_TYPE;
|
|
typedef STORAGE_IDENTIFIER_TYPE *PSTORAGE_IDENTIFIER_TYPE;
|
|
#define StorageIdTypeNAA StorageIdTypeFCPHName
|
|
|
|
/* Storage identifier NAA formats */
|
|
typedef enum _STORAGE_ID_NAA_FORMAT {
|
|
StorageIdNAAFormatIEEEExtended = 2,
|
|
StorageIdNAAFormatIEEERegistered = 3,
|
|
StorageIdNAAFormatIEEEERegisteredExtended = 5
|
|
} STORAGE_ID_NAA_FORMAT;
|
|
typedef STORAGE_ID_NAA_FORMAT *PSTORAGE_ID_NAA_FORMAT;
|
|
|
|
/* Storage association types */
|
|
typedef enum _STORAGE_ASSOCIATION_TYPE {
|
|
StorageIdAssocDevice = 0,
|
|
StorageIdAssocPort = 1,
|
|
StorageIdAssocTarget = 2
|
|
} STORAGE_ASSOCIATION_TYPE;
|
|
typedef STORAGE_ASSOCIATION_TYPE *PSTORAGE_ASSOCIATION_TYPE;
|
|
|
|
/* Storage identifier */
|
|
typedef struct _STORAGE_IDENTIFIER {
|
|
STORAGE_IDENTIFIER_CODE_SET CodeSet;
|
|
STORAGE_IDENTIFIER_TYPE Type;
|
|
WORD IdentifierSize;
|
|
WORD NextOffset;
|
|
STORAGE_ASSOCIATION_TYPE Association;
|
|
BYTE Identifier[1];
|
|
} STORAGE_IDENTIFIER;
|
|
typedef STORAGE_IDENTIFIER *PSTORAGE_IDENTIFIER;
|
|
|
|
/* Storage device identifier descriptor */
|
|
typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
DWORD NumberOfIdentifiers;
|
|
BYTE Identifiers[1];
|
|
} STORAGE_DEVICE_ID_DESCRIPTOR;
|
|
typedef STORAGE_DEVICE_ID_DESCRIPTOR *PSTORAGE_DEVICE_ID_DESCRIPTOR;
|
|
|
|
/* Device seek penalty descriptor */
|
|
typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
BOOLEAN IncursSeekPenalty;
|
|
} DEVICE_SEEK_PENALTY_DESCRIPTOR;
|
|
typedef DEVICE_SEEK_PENALTY_DESCRIPTOR *PDEVICE_SEEK_PENALTY_DESCRIPTOR;
|
|
|
|
/* Device write aggregation descriptor */
|
|
typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
BOOLEAN BenefitsFromWriteAggregation;
|
|
} DEVICE_WRITE_AGGREGATION_DESCRIPTOR;
|
|
typedef DEVICE_WRITE_AGGREGATION_DESCRIPTOR *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR;
|
|
|
|
/* Device trim descriptor */
|
|
typedef struct _DEVICE_TRIM_DESCRIPTOR {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
BOOLEAN TrimEnabled;
|
|
} DEVICE_TRIM_DESCRIPTOR;
|
|
typedef DEVICE_TRIM_DESCRIPTOR *PDEVICE_TRIM_DESCRIPTOR;
|
|
|
|
/* Device data set range */
|
|
typedef struct _DEVICE_DATA_SET_RANGE {
|
|
LONGLONG StartingOffset;
|
|
DWORDLONG LengthInBytes;
|
|
} DEVICE_DATA_SET_RANGE;
|
|
typedef DEVICE_DATA_SET_RANGE *PDEVICE_DATA_SET_RANGE;
|
|
|
|
/* IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES parameters */
|
|
typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
|
|
DWORD Size;
|
|
DEVICE_DATA_MANAGEMENT_SET_ACTION Action;
|
|
DWORD Flags;
|
|
DWORD ParameterBlockOffset;
|
|
DWORD ParameterBlockLength;
|
|
DWORD DataSetRangesOffset;
|
|
DWORD DataSetRangesLength;
|
|
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES;
|
|
typedef DEVICE_MANAGE_DATA_SET_ATTRIBUTES *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;
|
|
|
|
/* Device data set management notification parameters */
|
|
typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS {
|
|
DWORD Size;
|
|
DWORD Flags;
|
|
DWORD NumFileTypeIDs;
|
|
GUID FileTypeID[1];
|
|
} DEVICE_DSM_NOTIFICATION_PARAMETERS;
|
|
typedef DEVICE_DSM_NOTIFICATION_PARAMETERS *PDEVICE_DSM_NOTIFICATION_PARAMETERS;
|
|
|
|
/* IOCTL_STORAGE_GET_BC_PROPERTIES returned data */
|
|
typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT {
|
|
DWORD MaximumRequestsPerPeriod;
|
|
DWORD MinimumPeriod;
|
|
DWORDLONG MaximumRequestSize;
|
|
DWORD EstimatedTimePerRequest;
|
|
DWORD NumOutStandingRequests;
|
|
DWORDLONG RequestSize;
|
|
} STORAGE_GET_BC_PROPERTIES_OUTPUT;
|
|
typedef STORAGE_GET_BC_PROPERTIES_OUTPUT *PSTORAGE_GET_BC_PROPERTIES_OUTPUT;
|
|
|
|
/* IOCTL_STORAGE_ALLOCATE_BC_STREAM parameters */
|
|
typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT {
|
|
DWORD Version;
|
|
DWORD RequestsPerPeriod;
|
|
DWORD Period;
|
|
BOOLEAN RetryFailures;
|
|
BOOLEAN Discardable;
|
|
BOOLEAN Reserved1[2];
|
|
DWORD AccessType;
|
|
DWORD AccessMode;
|
|
} STORAGE_ALLOCATE_BC_STREAM_INPUT;
|
|
typedef STORAGE_ALLOCATE_BC_STREAM_INPUT *PSTORAGE_ALLOCATE_BC_STREAM_INPUT;
|
|
|
|
/* IOCTL_STORAGE_ALLOCATE_BC_STREAM returned data */
|
|
typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT {
|
|
DWORDLONG RequestSize;
|
|
DWORD NumOutStandingRequests;
|
|
} STORAGE_ALLOCATE_BC_STREAM_OUTPUT;
|
|
typedef STORAGE_ALLOCATE_BC_STREAM_OUTPUT *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT;
|
|
|
|
/* Storage priority hint support information */
|
|
typedef struct _STORAGE_PRIORITY_HINT_SUPPORT {
|
|
DWORD SupportFlags;
|
|
} STORAGE_PRIORITY_HINT_SUPPORT;
|
|
typedef STORAGE_PRIORITY_HINT_SUPPORT *PSTORAGE_PRIORITY_HINT_SUPPORT;
|
|
|
|
/* Storage media serial number data */
|
|
typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA {
|
|
WORD Reserved;
|
|
WORD SerialNumberLength;
|
|
BYTE SerialNumber[1];
|
|
} STORAGE_MEDIA_SERIAL_NUMBER_DATA;
|
|
typedef STORAGE_MEDIA_SERIAL_NUMBER_DATA *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA;
|
|
|
|
/* Storage read capacity */
|
|
typedef struct _STORAGE_READ_CAPACITY {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
DWORD BlockLength;
|
|
LARGE_INTEGER NumberOfBlocks;
|
|
LARGE_INTEGER DiskLength;
|
|
} STORAGE_READ_CAPACITY;
|
|
typedef STORAGE_READ_CAPACITY *PSTORAGE_READ_CAPACITY;
|
|
|
|
/* Write cache types */
|
|
typedef enum _WRITE_CACHE_TYPE {
|
|
WriteCacheTypeUnknown = 0,
|
|
WriteCacheTypeNone = 1,
|
|
WriteCacheTypeWriteBack = 2,
|
|
WriteCacheTypeWriteThrough = 3
|
|
} WRITE_CACHE_TYPE;
|
|
|
|
/* Write cache enable values */
|
|
typedef enum _WRITE_CACHE_ENABLE {
|
|
WriteCacheEnableUnknown = 0,
|
|
WriteCacheDisabled = 1,
|
|
WriteCacheEnabled = 2
|
|
} WRITE_CACHE_ENABLE;
|
|
|
|
/* Write cache change values */
|
|
typedef enum _WRITE_CACHE_CHANGE {
|
|
WriteCacheChangeUnknown = 0,
|
|
WriteCacheNotChangeable = 1,
|
|
WriteCacheChangeable = 2
|
|
} WRITE_CACHE_CHANGE;
|
|
|
|
/* Write through values */
|
|
typedef enum _WRITE_THROUGH {
|
|
WriteThroughUnknown = 0,
|
|
WriteThroughNotSupported = 1,
|
|
WriteThroughSupported = 2
|
|
} WRITE_THROUGH;
|
|
|
|
/* Storage write cache property */
|
|
typedef struct _STORAGE_WRITE_CACHE_PROPERTY {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
WRITE_CACHE_TYPE WriteCacheType;
|
|
WRITE_CACHE_ENABLE WriteCacheEnabled;
|
|
WRITE_CACHE_CHANGE WriteCacheChangeable;
|
|
WRITE_THROUGH WriteThroughSupported;
|
|
BOOLEAN FlushCacheSupported;
|
|
BOOLEAN UserDefinedPowerProtection;
|
|
BOOLEAN NVCacheEnabled;
|
|
} STORAGE_WRITE_CACHE_PROPERTY;
|
|
typedef STORAGE_WRITE_CACHE_PROPERTY *PSTORAGE_WRITE_CACHE_PROPERTY;
|
|
|
|
/* Persistent reserve command */
|
|
typedef struct _PERSISTENT_RESERVE_COMMAND {
|
|
DWORD Version;
|
|
DWORD Size;
|
|
union {
|
|
struct {
|
|
BYTE ServiceAction : 5;
|
|
BYTE Reserved1 : 3;
|
|
WORD AllocationLength;
|
|
} PR_IN;
|
|
struct {
|
|
BYTE ServiceAction : 5;
|
|
BYTE Reserved1 : 3;
|
|
BYTE Type : 4;
|
|
BYTE Scope : 4;
|
|
BYTE ParameterList[1];
|
|
} PR_OUT;
|
|
};
|
|
} PERSISTENT_RESERVE_COMMAND;
|
|
typedef PERSISTENT_RESERVE_COMMAND *PPERSISTENT_RESERVE_COMMAND;
|
|
|
|
#endif /* _NTDDSTOR_H_ */
|
|
|
|
#ifndef _NTDDDISK_H_
|
|
#define _NTDDDISK_H_
|
|
|
|
/* Bad track number data type */
|
|
typedef WORD BAD_TRACK_NUMBER;
|
|
typedef WORD *PBAD_TRACK_NUMBER;
|
|
|
|
/* Disk device I/O control codes */
|
|
#define IOCTL_DISK_BASE FILE_DEVICE_DISK
|
|
#define IOCTL_DISK_GET_DRIVE_GEOMETRY \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_GET_PARTITION_INFO \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_SET_PARTITION_INFO \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_GET_DRIVE_LAYOUT \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_SET_DRIVE_LAYOUT \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_VERIFY \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_FORMAT_TRACKS \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_REASSIGN_BLOCKS \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_PERFORMANCE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_IS_WRITABLE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_LOGGING \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x000A, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_FORMAT_TRACKS_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_HISTOGRAM_STRUCTURE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x000C, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_HISTOGRAM_DATA \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x000D, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_HISTOGRAM_RESET \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x000E, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_REQUEST_STRUCTURE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x000F, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_REQUEST_DATA \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_PERFORMANCE_OFF \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define IOCTL_DISK_CONTROLLER_NUMBER \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define SMART_GET_VERSION \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define SMART_SEND_DRIVE_COMMAND \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define SMART_RCV_DRIVE_DATA \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define IOCTL_DISK_GET_PARTITION_INFO_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0012, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_SET_PARTITION_INFO_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0014, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_DISK_SET_DRIVE_LAYOUT_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0015, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_CREATE_DISK \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_GET_LENGTH_INFO \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0028, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0502)
|
|
#define IOCTL_DISK_REASSIGN_BLOCKS_EX \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0029, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define IOCTL_DISK_UPDATE_DRIVE_SIZE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_GROW_PARTITION \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_GET_CACHE_INFORMATION \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0035, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_SET_CACHE_INFORMATION \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0036, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#if (NTDDI_VERSION < 0x05020000)
|
|
#define IOCTL_DISK_GET_WRITE_CACHE_STATE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#else
|
|
#define OBSOLETE_IOCTL_DISK_GET_WRITE_CACHE_STATE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0037, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#endif
|
|
#define IOCTL_DISK_DELETE_DRIVE_LAYOUT \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0040, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_UPDATE_PROPERTIES \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0050, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#define IOCTL_DISK_RESET_SNAPSHOT_INFO \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0084, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define IOCTL_DISK_FORMAT_DRIVE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x00F3, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_DISK_SENSE_DEVICE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x00F8, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#define IOCTL_DISK_CHECK_VERIFY \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_MEDIA_REMOVAL \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_EJECT_MEDIA \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_LOAD_MEDIA \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_RESERVE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_RELEASE \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_FIND_NEW_DEVICES \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_DISK_GET_MEDIA_TYPES \
|
|
CTL_CODE( IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
|
|
/* Partition types */
|
|
#define PARTITION_ENTRY_UNUSED 0x00000000L
|
|
#define PARTITION_FAT_12 0x00000001L
|
|
#define PARTITION_XENIX_1 0x00000002L
|
|
#define PARTITION_XENIX_2 0x00000003L
|
|
#define PARTITION_FAT_16 0x00000004L
|
|
#define PARTITION_EXTENDED 0x00000005L
|
|
#define PARTITION_HUGE 0x00000006L
|
|
#define PARTITION_IFS 0x00000007L
|
|
#define PARTITION_OS2BOOTMGR 0x0000000AL
|
|
#define PARTITION_FAT32 0x0000000BL
|
|
#define PARTITION_FAT32_XINT13 0x0000000CL
|
|
#define PARTITION_XINT13 0x0000000EL
|
|
#define PARTITION_XINT13_EXTENDED 0x0000000FL
|
|
#define PARTITION_PREP 0x00000041L
|
|
#define PARTITION_LDM 0x00000042L
|
|
#define PARTITION_UNIX 0x00000063L
|
|
#define VALID_NTFT 0x000000C0L
|
|
#define PARTITION_NTFT 0x00000080L
|
|
|
|
/* GUID partition table (GPT) partition attributes */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define GPT_ATTRIBUTE_PLATFORM_REQUIRED 0x0000000000000001LL
|
|
#define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 0x8000000000000000LL
|
|
#define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN 0x4000000000000000LL
|
|
#define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY 0x2000000000000000LL
|
|
#define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY 0x1000000000000000LL
|
|
#endif
|
|
|
|
/* Number of histogram buckets */
|
|
#define HIST_NO_OF_BUCKETS 24
|
|
|
|
/* Disk logging functions */
|
|
#define DISK_LOGGING_START 0
|
|
#define DISK_LOGGING_STOP 1
|
|
#define DISK_LOGGING_DUMP 2
|
|
#define DISK_BINNING 3
|
|
|
|
/* Version capabilities */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define CAP_ATA_ID_CMD 1L
|
|
#define CAP_ATAPI_ID_CMD 2L
|
|
#define CAP_SMART_CMD 4L
|
|
#endif
|
|
|
|
/* Command register values */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define ATAPI_ID_CMD 0xA1
|
|
#define ID_CMD 0xEC
|
|
#define SMART_CMD 0xB0
|
|
#endif
|
|
|
|
/* Cylinder register values */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define SMART_CYL_LOW 0x4F
|
|
#define SMART_CYL_HI 0xC2
|
|
#endif
|
|
|
|
/* Driver errors */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define SMART_NO_ERROR 0
|
|
#define SMART_IDE_ERROR 1
|
|
#define SMART_INVALID_FLAG 2
|
|
#define SMART_INVALID_COMMAND 3
|
|
#define SMART_INVALID_BUFFER 4
|
|
#define SMART_INVALID_DRIVE 5
|
|
#define SMART_INVALID_IOCTL 6
|
|
#define SMART_ERROR_NO_MEM 7
|
|
#define SMART_INVALID_REGISTER 8
|
|
#define SMART_NOT_SUPPORTED 9
|
|
#define SMART_NO_IDE_DEVICE 10
|
|
#endif
|
|
|
|
/* Offline diagnostic subcommands */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define SMART_OFFLINE_ROUTINE_OFFLINE 0
|
|
#define SMART_SHORT_SELFTEST_OFFLINE 1
|
|
#define SMART_EXTENDED_SELFTEST_OFFLINE 2
|
|
#define SMART_ABORT_OFFLINE_SELFTEST 127
|
|
#define SMART_SHORT_SELFTEST_CAPTIVE 129
|
|
#define SMART_EXTENDED_SELFTEST_CAPTIVE 130
|
|
#endif
|
|
|
|
/* Buffer sizes */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define READ_ATTRIBUTE_BUFFER_SIZE 512
|
|
#define IDENTITY_BUFFER_SIZE 512
|
|
#define READ_THRESHOLD_BUFFER_SIZE 512
|
|
#define SMART_LOG_SECTOR_SIZE 512
|
|
#endif
|
|
|
|
/* Feature register subcommands */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define READ_ATTRIBUTES 0xD0
|
|
#define READ_THRESHOLDS 0xD1
|
|
#define ENABLE_DISABLE_AUTOSAVE 0xD2
|
|
#define SAVE_ATTRIBUTE_VALUES 0xD3
|
|
#define EXECUTE_OFFLINE_DIAGS 0xD4
|
|
#define SMART_READ_LOG 0xD5
|
|
#define SMART_WRITE_LOG 0xD6
|
|
#define ENABLE_SMART 0xD8
|
|
#define DISABLE_SMART 0xD9
|
|
#define RETURN_SMART_STATUS 0xDA
|
|
#define ENABLE_DISABLE_AUTO_OFFLINE 0xDB
|
|
#endif
|
|
|
|
/* Media types */
|
|
typedef enum _MEDIA_TYPE {
|
|
Unknown = 0,
|
|
F5_1Pt2_512 = 1,
|
|
F3_1Pt44_512 = 2,
|
|
F3_2Pt88_512 = 3,
|
|
F3_20Pt8_512 = 4,
|
|
F3_720_512 = 5,
|
|
F5_360_512 = 6,
|
|
F5_320_512 = 7,
|
|
F5_320_1024 = 8,
|
|
F5_180_512 = 9,
|
|
F5_160_512 = 10,
|
|
RemovableMedia = 11,
|
|
FixedMedia = 12,
|
|
F3_120M_512 = 13,
|
|
F3_640_512 = 14,
|
|
F5_640_512 = 15,
|
|
F5_720_512 = 16,
|
|
F3_1Pt2_512 = 17,
|
|
F3_1Pt23_1024 = 18,
|
|
F5_1Pt23_1024 = 19,
|
|
F3_128Mb_512 = 20,
|
|
F3_230Mb_512 = 21,
|
|
F8_256_128 = 22,
|
|
F3_200Mb_512 = 23,
|
|
F3_240M_512 = 24,
|
|
F3_32M_512 = 25
|
|
} MEDIA_TYPE;
|
|
typedef MEDIA_TYPE *PMEDIA_TYPE;
|
|
|
|
/* Format parameters */
|
|
typedef struct _FORMAT_PARAMETERS {
|
|
MEDIA_TYPE MediaType;
|
|
DWORD StartCylinderNumber;
|
|
DWORD EndCylinderNumber;
|
|
DWORD StartHeadNumber;
|
|
DWORD EndHeadNumber;
|
|
} FORMAT_PARAMETERS;
|
|
typedef FORMAT_PARAMETERS *PFORMAT_PARAMETERS;
|
|
|
|
/* Format parameters (extended version) */
|
|
typedef struct _FORMAT_EX_PARAMETERS {
|
|
MEDIA_TYPE MediaType;
|
|
DWORD StartCylinderNumber;
|
|
DWORD EndCylinderNumber;
|
|
DWORD StartHeadNumber;
|
|
DWORD EndHeadNumber;
|
|
WORD FormatGapLength;
|
|
WORD SectorsPerTrack;
|
|
WORD SectorNumber[1];
|
|
} FORMAT_EX_PARAMETERS;
|
|
typedef FORMAT_EX_PARAMETERS *PFORMAT_EX_PARAMETERS;
|
|
|
|
/* Disk geometry */
|
|
typedef struct _DISK_GEOMETRY {
|
|
LARGE_INTEGER Cylinders;
|
|
MEDIA_TYPE MediaType;
|
|
DWORD TracksPerCylinder;
|
|
DWORD SectorsPerTrack;
|
|
DWORD BytesPerSector;
|
|
} DISK_GEOMETRY;
|
|
typedef DISK_GEOMETRY *PDISK_GEOMETRY;
|
|
|
|
/* Partition information */
|
|
typedef struct _PARTITION_INFORMATION {
|
|
LARGE_INTEGER StartingOffset;
|
|
LARGE_INTEGER PartitionLength;
|
|
DWORD HiddenSectors;
|
|
DWORD PartitionNumber;
|
|
BYTE PartitionType;
|
|
BOOLEAN BootIndicator;
|
|
BOOLEAN RecognizedPartition;
|
|
BOOLEAN RewritePartition;
|
|
} PARTITION_INFORMATION;
|
|
typedef PARTITION_INFORMATION *PPARTITION_INFORMATION;
|
|
|
|
/* IOCTL_DISK_SET_PARTITION_INFO parameters */
|
|
typedef struct _SET_PARTITION_INFORMATION {
|
|
BYTE PartitionType;
|
|
} SET_PARTITION_INFORMATION;
|
|
typedef SET_PARTITION_INFORMATION *PSET_PARTITION_INFORMATION;
|
|
|
|
/* Drive layout information */
|
|
typedef struct _DRIVE_LAYOUT_INFORMATION {
|
|
DWORD PartitionCount;
|
|
DWORD Signature;
|
|
PARTITION_INFORMATION PartitionEntry[1];
|
|
} DRIVE_LAYOUT_INFORMATION;
|
|
typedef DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION;
|
|
|
|
/* Verify information */
|
|
typedef struct _VERIFY_INFORMATION {
|
|
LARGE_INTEGER StartingOffset;
|
|
DWORD Length;
|
|
} VERIFY_INFORMATION;
|
|
typedef VERIFY_INFORMATION *PVERIFY_INFORMATION;
|
|
|
|
/* IOCTL_DISK_REASSIGN_BLOCKS parameters */
|
|
typedef struct _REASSIGN_BLOCKS {
|
|
WORD Reserved;
|
|
WORD Count;
|
|
DWORD BlockNumber[1];
|
|
} REASSIGN_BLOCKS;
|
|
typedef REASSIGN_BLOCKS *PREASSIGN_BLOCKS;
|
|
|
|
/* IOCTL_DISK_REASSIGN_BLOCKS_EX parameters */
|
|
#include <pshpack1.h>
|
|
typedef struct _REASSIGN_BLOCKS_EX {
|
|
WORD Reserved;
|
|
WORD Count;
|
|
LARGE_INTEGER BlockNumber[1];
|
|
} REASSIGN_BLOCKS_EX;
|
|
typedef REASSIGN_BLOCKS_EX *PREASSIGN_BLOCKS_EX;
|
|
#include <poppack.h>
|
|
|
|
/* Partition styles */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef enum _PARTITION_STYLE {
|
|
PARTITION_STYLE_MBR = 0,
|
|
PARTITION_STYLE_GPT = 1,
|
|
PARTITION_STYLE_RAW = 2
|
|
} PARTITION_STYLE;
|
|
#endif
|
|
|
|
/* GUID partition table (GPT) partition information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _PARTITION_INFORMATION_GPT {
|
|
GUID PartitionType;
|
|
GUID PartitionId;
|
|
DWORD64 Attributes;
|
|
WCHAR Name[36];
|
|
} PARTITION_INFORMATION_GPT;
|
|
typedef PARTITION_INFORMATION_GPT *PPARTITION_INFORMATION_GPT;
|
|
#endif
|
|
|
|
/* MBR partition information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _PARTITION_INFORMATION_MBR {
|
|
BYTE PartitionType;
|
|
BOOLEAN BootIndicator;
|
|
BOOLEAN RecognizedPartition;
|
|
DWORD HiddenSectors;
|
|
} PARTITION_INFORMATION_MBR;
|
|
typedef PARTITION_INFORMATION_MBR *PPARTITION_INFORMATION_MBR;
|
|
#endif
|
|
|
|
/* Alternate names of structures defined above */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR;
|
|
typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT;
|
|
#endif
|
|
|
|
/* IOCTL_DISK_SET_PARTITION_INFO_EX parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _SET_PARTITION_INFORMATION_EX {
|
|
PARTITION_STYLE PartitionStyle;
|
|
union {
|
|
SET_PARTITION_INFORMATION_MBR Mbr;
|
|
SET_PARTITION_INFORMATION_GPT Gpt;
|
|
};
|
|
} SET_PARTITION_INFORMATION_EX;
|
|
typedef SET_PARTITION_INFORMATION_EX *PSET_PARTITION_INFORMATION_EX;
|
|
#endif
|
|
|
|
/* IOCTL_DISK_CREATE_DISK parameters for GPT partitions */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _CREATE_DISK_GPT {
|
|
GUID DiskId;
|
|
DWORD MaxPartitionCount;
|
|
} CREATE_DISK_GPT;
|
|
typedef CREATE_DISK_GPT *PCREATE_DISK_GPT;
|
|
#endif
|
|
|
|
/* IOCTL_DISK_CREATE_DISK parameters for MBR partitions */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _CREATE_DISK_MBR {
|
|
DWORD Signature;
|
|
} CREATE_DISK_MBR;
|
|
typedef CREATE_DISK_MBR *PCREATE_DISK_MBR;
|
|
#endif
|
|
|
|
/* IOCTL_DISK_CREATE_DISK parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _CREATE_DISK {
|
|
PARTITION_STYLE PartitionStyle;
|
|
union {
|
|
CREATE_DISK_MBR Mbr;
|
|
CREATE_DISK_GPT Gpt;
|
|
};
|
|
} CREATE_DISK;
|
|
typedef CREATE_DISK *PCREATE_DISK;
|
|
#endif
|
|
|
|
/* IOCTL_DISK_GET_LENGTH_INFO parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _GET_LENGTH_INFORMATION {
|
|
LARGE_INTEGER Length;
|
|
} GET_LENGTH_INFORMATION;
|
|
typedef GET_LENGTH_INFORMATION *PGET_LENGTH_INFORMATION;
|
|
#endif
|
|
|
|
/* Partition information (extended version) */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _PARTITION_INFORMATION_EX {
|
|
PARTITION_STYLE PartitionStyle;
|
|
LARGE_INTEGER StartingOffset;
|
|
LARGE_INTEGER PartitionLength;
|
|
DWORD PartitionNumber;
|
|
BOOLEAN RewritePartition;
|
|
union {
|
|
PARTITION_INFORMATION_MBR Mbr;
|
|
PARTITION_INFORMATION_GPT Gpt;
|
|
};
|
|
} PARTITION_INFORMATION_EX;
|
|
typedef PARTITION_INFORMATION_EX *PPARTITION_INFORMATION_EX;
|
|
#endif
|
|
|
|
/* Drive layout information for GPT partitions */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
|
|
GUID DiskId;
|
|
LARGE_INTEGER StartingUsableOffset;
|
|
LARGE_INTEGER UsableLength;
|
|
DWORD MaxPartitionCount;
|
|
} DRIVE_LAYOUT_INFORMATION_GPT;
|
|
typedef DRIVE_LAYOUT_INFORMATION_GPT *PDRIVE_LAYOUT_INFORMATION_GPT;
|
|
#endif
|
|
|
|
/* Drive layout information for MBR partitions */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
|
|
DWORD Signature;
|
|
} DRIVE_LAYOUT_INFORMATION_MBR;
|
|
typedef DRIVE_LAYOUT_INFORMATION_MBR *PDRIVE_LAYOUT_INFORMATION_MBR;
|
|
#endif
|
|
|
|
/* Drive layout information (extended version) */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
|
|
DWORD PartitionStyle;
|
|
DWORD PartitionCount;
|
|
union {
|
|
DRIVE_LAYOUT_INFORMATION_MBR Mbr;
|
|
DRIVE_LAYOUT_INFORMATION_GPT Gpt;
|
|
};
|
|
PARTITION_INFORMATION_EX PartitionEntry[1];
|
|
} DRIVE_LAYOUT_INFORMATION_EX;
|
|
typedef DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX;
|
|
#endif
|
|
|
|
/* Detection types */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef enum _DETECTION_TYPE {
|
|
DetectNone = 0,
|
|
DetectInt13 = 1,
|
|
DetectExtInt13 = 2
|
|
} DETECTION_TYPE;
|
|
#endif
|
|
|
|
/* Interrupt 13 disk information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_INT13_INFO {
|
|
WORD DriveSelect;
|
|
DWORD MaxCylinders;
|
|
WORD SectorsPerTrack;
|
|
WORD MaxHeads;
|
|
WORD NumberDrives;
|
|
} DISK_INT13_INFO;
|
|
typedef DISK_INT13_INFO *PDISK_INT13_INFO;
|
|
#endif
|
|
|
|
/* Extended interrupt 13 disk information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_EX_INT13_INFO {
|
|
WORD ExBufferSize;
|
|
WORD ExFlags;
|
|
DWORD ExCylinders;
|
|
DWORD ExHeads;
|
|
DWORD ExSectorsPerTrack;
|
|
DWORD64 ExSectorsPerDrive;
|
|
WORD ExSectorSize;
|
|
WORD ExReserved;
|
|
} DISK_EX_INT13_INFO;
|
|
typedef DISK_EX_INT13_INFO *PDISK_EX_INT13_INFO;
|
|
#endif
|
|
|
|
/* Disk detection information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_DETECTION_INFO {
|
|
DWORD SizeOfDetectInfo;
|
|
DETECTION_TYPE DetectionType;
|
|
union {
|
|
struct {
|
|
DISK_INT13_INFO Int13;
|
|
DISK_EX_INT13_INFO ExInt13;
|
|
};
|
|
};
|
|
} DISK_DETECTION_INFO;
|
|
typedef DISK_DETECTION_INFO *PDISK_DETECTION_INFO;
|
|
#endif
|
|
|
|
/* Disk partition information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_PARTITION_INFO {
|
|
DWORD SizeOfPartitionInfo;
|
|
PARTITION_STYLE PartitionStyle;
|
|
union {
|
|
struct {
|
|
DWORD Signature;
|
|
DWORD CheckSum;
|
|
} Mbr;
|
|
struct {
|
|
GUID DiskId;
|
|
} Gpt;
|
|
};
|
|
} DISK_PARTITION_INFO;
|
|
typedef DISK_PARTITION_INFO *PDISK_PARTITION_INFO;
|
|
#endif
|
|
|
|
/* Disk geometry (extended version) */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_GEOMETRY_EX {
|
|
DISK_GEOMETRY Geometry;
|
|
LARGE_INTEGER DiskSize;
|
|
BYTE Data[1];
|
|
} DISK_GEOMETRY_EX;
|
|
typedef DISK_GEOMETRY_EX *PDISK_GEOMETRY_EX;
|
|
#endif
|
|
|
|
/* Disk controller number */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct _DISK_CONTROLLER_NUMBER {
|
|
DWORD ControllerNumber;
|
|
DWORD DiskNumber;
|
|
} DISK_CONTROLLER_NUMBER;
|
|
typedef DISK_CONTROLLER_NUMBER *PDISK_CONTROLLER_NUMBER;
|
|
#endif
|
|
|
|
/* Disk cache retention priority */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef enum {
|
|
EqualPriority = 0,
|
|
KeepPrefetchedData = 1,
|
|
KeepReadData = 2
|
|
} DISK_CACHE_RETENTION_PRIORITY;
|
|
#endif
|
|
|
|
/* Disk write cache state */
|
|
#if (_WIN32_WINNT >= 0x0500) && (NTDDI_VERSION >= 0x05010000) && \
|
|
(NTDDI_VERSION < 0x05020000)
|
|
typedef enum _DISK_WRITE_CACHE_STATE {
|
|
DiskWriteCacheNormal = 0,
|
|
DiskWriteCacheForceDisable = 1,
|
|
DiskWriteCacheDisableNotSupported = 2
|
|
} DISK_WRITE_CACHE_STATE;
|
|
typedef DISK_WRITE_CACHE_STATE *PDISK_WRITE_CACHE_STATE;
|
|
#endif
|
|
|
|
/* Disk cache information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_CACHE_INFORMATION {
|
|
BOOLEAN ParametersSavable;
|
|
BOOLEAN ReadCacheEnabled;
|
|
BOOLEAN WriteCacheEnabled;
|
|
DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority;
|
|
DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority;
|
|
WORD DisablePrefetchTransferLength;
|
|
BOOLEAN PrefetchScalar;
|
|
union {
|
|
struct {
|
|
WORD Minimum;
|
|
WORD Maximum;
|
|
WORD MaximumBlocks;
|
|
} ScalarPrefetch;
|
|
struct {
|
|
WORD Minimum;
|
|
WORD Maximum;
|
|
} BlockPrefetch;
|
|
};
|
|
} DISK_CACHE_INFORMATION;
|
|
typedef DISK_CACHE_INFORMATION *PDISK_CACHE_INFORMATION;
|
|
#endif
|
|
|
|
/* IOCTL_DISK_GROW_PARTITION parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DISK_GROW_PARTITION {
|
|
DWORD PartitionNumber;
|
|
LARGE_INTEGER BytesToGrow;
|
|
} DISK_GROW_PARTITION;
|
|
typedef DISK_GROW_PARTITION *PDISK_GROW_PARTITION;
|
|
#endif
|
|
|
|
/* Histogram bucket */
|
|
typedef struct _HISTOGRAM_BUCKET {
|
|
DWORD Reads;
|
|
DWORD Writes;
|
|
} HISTOGRAM_BUCKET;
|
|
typedef HISTOGRAM_BUCKET *PHISTOGRAM_BUCKET;
|
|
|
|
/* Disk histogram */
|
|
typedef struct _DISK_HISTOGRAM {
|
|
LARGE_INTEGER DiskSize;
|
|
LARGE_INTEGER Start;
|
|
LARGE_INTEGER End;
|
|
LARGE_INTEGER Average;
|
|
LARGE_INTEGER AverageRead;
|
|
LARGE_INTEGER AverageWrite;
|
|
DWORD Granularity;
|
|
DWORD Size;
|
|
DWORD ReadCount;
|
|
DWORD WriteCount;
|
|
PHISTOGRAM_BUCKET Histogram;
|
|
} DISK_HISTOGRAM;
|
|
typedef DISK_HISTOGRAM *PDISK_HISTOGRAM;
|
|
|
|
/* Disk performance */
|
|
typedef struct _DISK_PERFORMANCE {
|
|
LARGE_INTEGER BytesRead;
|
|
LARGE_INTEGER BytesWritten;
|
|
LARGE_INTEGER ReadTime;
|
|
LARGE_INTEGER WriteTime;
|
|
LARGE_INTEGER IdleTime;
|
|
DWORD ReadCount;
|
|
DWORD WriteCount;
|
|
DWORD QueueDepth;
|
|
DWORD SplitCount;
|
|
LARGE_INTEGER QueryTime;
|
|
DWORD StorageDeviceNumber;
|
|
WCHAR StorageManagerName[8];
|
|
} DISK_PERFORMANCE;
|
|
typedef DISK_PERFORMANCE *PDISK_PERFORMANCE;
|
|
|
|
/* Disk record */
|
|
typedef struct _DISK_RECORD {
|
|
LARGE_INTEGER ByteOffset;
|
|
LARGE_INTEGER StartTime;
|
|
LARGE_INTEGER EndTime;
|
|
PVOID VirtualAddress;
|
|
DWORD NumberOfBytes;
|
|
BYTE DeviceNumber;
|
|
BOOLEAN ReadRequest;
|
|
} DISK_RECORD;
|
|
typedef DISK_RECORD *PDISK_RECORD;
|
|
|
|
/* Disk logging information */
|
|
typedef struct _DISK_LOGGING {
|
|
BYTE Function;
|
|
PVOID BufferAddress;
|
|
DWORD BufferSize;
|
|
} DISK_LOGGING;
|
|
typedef DISK_LOGGING *PDISK_LOGGING;
|
|
|
|
/* Bin types */
|
|
typedef enum _BIN_TYPES {
|
|
RequestSize = 0,
|
|
RequestLocation = 1
|
|
} BIN_TYPES;
|
|
|
|
/* Bin range */
|
|
typedef struct _BIN_RANGE {
|
|
LARGE_INTEGER StartValue;
|
|
LARGE_INTEGER Length;
|
|
} BIN_RANGE;
|
|
typedef BIN_RANGE *PBIN_RANGE;
|
|
|
|
/* Performance bin */
|
|
typedef struct _PERF_BIN {
|
|
DWORD NumberOfBins;
|
|
DWORD TypeOfBin;
|
|
BIN_RANGE BinsRanges[1];
|
|
} PERF_BIN;
|
|
typedef PERF_BIN *PPERF_BIN;
|
|
|
|
/* Bin count */
|
|
typedef struct _BIN_COUNT {
|
|
BIN_RANGE BinRange;
|
|
DWORD BinCount;
|
|
} BIN_COUNT;
|
|
typedef BIN_COUNT *PBIN_COUNT;
|
|
|
|
/* Bin results */
|
|
typedef struct _BIN_RESULTS {
|
|
DWORD NumberOfBins;
|
|
BIN_COUNT BinCounts[1];
|
|
} BIN_RESULTS;
|
|
typedef BIN_RESULTS *PBIN_RESULTS;
|
|
|
|
/* Driver version input parameters */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#include <pshpack1.h>
|
|
typedef struct _GETVERSIONINPARAMS {
|
|
BYTE bVersion;
|
|
BYTE bRevision;
|
|
BYTE bReserved;
|
|
BYTE bIDEDeviceMap;
|
|
DWORD fCapabilities;
|
|
DWORD dwReserved[4];
|
|
} GETVERSIONINPARAMS;
|
|
typedef GETVERSIONINPARAMS *PGETVERSIONINPARAMS;
|
|
typedef GETVERSIONINPARAMS *LPGETVERSIONINPARAMS;
|
|
#include <poppack.h>
|
|
#endif
|
|
|
|
/* IDE registers */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#include <pshpack1.h>
|
|
typedef struct _IDEREGS {
|
|
BYTE bFeaturesReg;
|
|
BYTE bSectorCountReg;
|
|
BYTE bSectorNumberReg;
|
|
BYTE bCylLowReg;
|
|
BYTE bCylHighReg;
|
|
BYTE bDriveHeadReg;
|
|
BYTE bCommandReg;
|
|
BYTE bReserved;
|
|
} IDEREGS;
|
|
typedef IDEREGS *PIDEREGS;
|
|
typedef IDEREGS *LPIDEREGS;
|
|
#include <poppack.h>
|
|
#endif
|
|
|
|
/* Send command input parameters */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#include <pshpack1.h>
|
|
typedef struct _SENDCMDINPARAMS {
|
|
DWORD cBufferSize;
|
|
IDEREGS irDriveRegs;
|
|
BYTE bDriveNumber;
|
|
BYTE bReserved[3];
|
|
DWORD dwReserved[4];
|
|
BYTE bBuffer[1];
|
|
} SENDCMDINPARAMS;
|
|
typedef SENDCMDINPARAMS *PSENDCMDINPARAMS;
|
|
typedef SENDCMDINPARAMS *LPSENDCMDINPARAMS;
|
|
#include <poppack.h>
|
|
#endif
|
|
|
|
/* Driver status */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#include <pshpack1.h>
|
|
typedef struct _DRIVERSTATUS {
|
|
BYTE bDriverError;
|
|
BYTE bIDEError;
|
|
BYTE bReserved[2];
|
|
DWORD dwReserved[2];
|
|
} DRIVERSTATUS;
|
|
typedef DRIVERSTATUS *PDRIVERSTATUS;
|
|
typedef DRIVERSTATUS *LPDRIVERSTATUS;
|
|
#include <poppack.h>
|
|
#endif
|
|
|
|
/* Send command output parameters */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#include <pshpack1.h>
|
|
typedef struct _SENDCMDOUTPARAMS {
|
|
DWORD cBufferSize;
|
|
DRIVERSTATUS DriverStatus;
|
|
BYTE bBuffer[1];
|
|
} SENDCMDOUTPARAMS;
|
|
typedef SENDCMDOUTPARAMS *PSENDCMDOUTPARAMS;
|
|
typedef SENDCMDOUTPARAMS *LPSENDCMDOUTPARAMS;
|
|
#include <poppack.h>
|
|
#endif
|
|
|
|
/* Functions implemented as macros */
|
|
#define __NewIsRecognizedPartition( x ) \
|
|
(((x) == PARTITION_FAT_12) || ((x) == PARTITION_FAT_16) || \
|
|
((x) == PARTITION_HUGE) || ((x) == PARTITION_IFS) || ((x) == PARTITION_FAT32) || \
|
|
((x) == PARTITION_FAT32_XINT13) || ((x) == PARTITION_XINT13))
|
|
#if (NTDDK_VERSION < 0x06000000)
|
|
#define IsRecognizedPartition( x ) \
|
|
((((x) & PARTITION_NTFT) && ((((x) & ~0x000000C0L) == PARTITION_HUGE) || \
|
|
(((x) & 0x000000C0L) == PARTITION_IFS) || \
|
|
(((x) & 0x000000C0L) == PARTITION_FAT32) || \
|
|
(((x) & 0x000000C0L) == PARTITION_FAT32_XINT13))) || \
|
|
__NewIsRecognizedPartition( x ))
|
|
#else
|
|
#define IsRecognizedPartition( x ) __NewIsRecognizedPartition( x )
|
|
#endif
|
|
#define IsContainerPartition( x ) \
|
|
(((x) == PARTITION_EXTENDED) || ((x) == PARTITION_XINT13_EXTENDED))
|
|
#define IsFTPartition( x ) \
|
|
(((x) & PARTITION_NTFT) && ((((x) & ~0x000000C0L) == PARTITION_HUGE) || \
|
|
(((x) & ~0x000000C0L) == PARTITION_IFS) || \
|
|
(((x) & ~0x000000C0L) == PARTITION_FAT32) || \
|
|
(((x) & ~0x000000C0L) == PARTITION_FAT32_XINT13)))
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#if (NTDDI_VERSION < 0x05020000)
|
|
#define DiskGeometryGetPartition( x ) ((PDISK_PARTITION_INFO)((x) + 1))
|
|
#define DiskGeometryGetDetect( x ) \
|
|
((PDISK_DETECTION_INFO)(((PBYTE)DiskGeoemtryGetPartition( x ) + \
|
|
DiskGeometryGetPartition( x )->SizeOfPartitionInfo)))
|
|
#else
|
|
#define DiskGeometryGetPartition( x ) ((PDISK_PARTITION_INFO)((x)->Data))
|
|
#define DiskGeometryGetDetect( x ) \
|
|
((PDISK_DETECTION_INFO)(((DWORD_PTR)DiskGeometryGetPartition( x ) + \
|
|
DiskGeometryGetPartition( x )->SizeOfPartitionInfo)))
|
|
#endif
|
|
#endif
|
|
|
|
#endif /* _NTDDDISK_H_ */
|
|
|
|
/* Changer device I/O control codes */
|
|
#define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER
|
|
#define IOCTL_CHANGER_GET_PARAMETERS \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_GET_STATUS \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_GET_PRODUCT_DATA \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_SET_ACCESS \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_CHANGER_GET_ELEMENT_STATUS \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_SET_POSITION \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_EXCHANGE_MEDIUM \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_MOVE_MEDIUM \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_REINITIALIZE_TRANSPORT \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS )
|
|
#define IOCTL_CHANGER_QUERY_VOLUME_TAGS \
|
|
CTL_CODE( IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
|
|
/* Maximum sizes and lengths */
|
|
#define MAX_VOLUME_ID_SIZE 36
|
|
#define MAX_VOLUME_TEMPLATE_SIZE 40
|
|
#define VENDOR_ID_LENGTH 8
|
|
#define PRODUCT_ID_LENGTH 16
|
|
#define REVISION_LENGTH 4
|
|
#define SERIAL_NUMBER_LENGTH 32
|
|
|
|
/* Changer features */
|
|
#define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001L
|
|
#define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002L
|
|
#define CHANGER_CLOSE_IEPORT 0x00000004L
|
|
#define CHANGER_OPEN_IEPORT 0x00000008L
|
|
#define CHANGER_STATUS_NON_VOLATILE 0x00000010L
|
|
#define CHANGER_EXCHANGE_MEDIA 0x00000020L
|
|
#define CHANGER_CLEANER_SLOT 0x00000040L
|
|
#define CHANGER_LOCK_UNLOCK 0x00000080L
|
|
#define CHANGER_CARTRIDGE_MAGAZINE 0x00000100L
|
|
#define CHANGER_MEDIUM_FLIP 0x00000200L
|
|
#define CHANGER_POSITION_TO_ELEMENT 0x00000400L
|
|
#define CHANGER_REPORT_IEPORT_STATE 0x00000800L
|
|
#define CHANGER_STORAGE_DRIVE 0x00001000L
|
|
#define CHANGER_STORAGE_IEPORT 0x00002000L
|
|
#define CHANGER_STORAGE_SLOT 0x00004000L
|
|
#define CHANGER_STORAGE_TRANSPORT 0x00008000L
|
|
#define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000L
|
|
#define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000L
|
|
#define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000L
|
|
#define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000L
|
|
#define CHANGER_VOLUME_IDENTIFICATION 0x00100000L
|
|
#define CHANGER_VOLUME_SEARCH 0x00200000L
|
|
#define CHANGER_VOLUME_ASSERT 0x00400000L
|
|
#define CHANGER_VOLUME_REPLACE 0x00800000L
|
|
#define CHANGER_VOLUME_UNDEFINE 0x01000000L
|
|
#define CHANGER_SERIAL_NUMBER_VALID 0x04000000L
|
|
#define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000L
|
|
#define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000L
|
|
#define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000L
|
|
#define CHANGER_RESERVED_BIT 0x80000000L
|
|
#define CHANGER_PREMOUNT_ALIGN_TO_SLOT 0x80000001L
|
|
#define CHANGER_PREMOUNT_ALIGN_TO_DRIVE 0x80000002L
|
|
#define CHANGER_CLEANER_AUTODISMOUNT 0x80000004L
|
|
#define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008L
|
|
#define CHANGER_SLOTS_USE_TRAYS 0x80000010L
|
|
#define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020L
|
|
#define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040L
|
|
#define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080L
|
|
#define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100L
|
|
#define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200L
|
|
#define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400L
|
|
|
|
/* Changer position capabilities */
|
|
#define CHANGER_TO_TRANSPORT 0x01
|
|
#define CHANGER_TO_SLOT 0x02
|
|
#define CHANGER_TO_IEPORT 0x04
|
|
#define CHANGER_TO_DRIVE 0x08
|
|
|
|
/* Changer lock/unlock capabilities */
|
|
#define LOCK_UNLOCK_IEPORT 0x01
|
|
#define LOCK_UNLOCK_DOOR 0x02
|
|
#define LOCK_UNLOCK_KEYPAD 0x04
|
|
|
|
/* IOCTL_CHANGER_SET_ACCESS operations */
|
|
#define LOCK_ELEMENT 0L
|
|
#define UNLOCK_ELEMENT 1L
|
|
#define EXTEND_IEPORT 2L
|
|
#define RETRACT_IEPORT 3L
|
|
|
|
/* Changer element status flags */
|
|
#define ELEMENT_STATUS_FULL 0x00000001L
|
|
#define ELEMENT_STATUS_IMPEXP 0x00000002L
|
|
#define ELEMENT_STATUS_EXCEPT 0x00000004L
|
|
#define ELEMENT_STATUS_ACCESS 0x00000008L
|
|
#define ELEMENT_STATUS_EXENAB 0x00000010L
|
|
#define ELEMENT_STATUS_INENAB 0x00000020L
|
|
#define ELEMENT_STATUS_PRODUCT_DATA 0x00000040L
|
|
#define ELEMENT_STATUS_LUN_VALID 0x00001000L
|
|
#define ELEMENT_STATUS_ID_VALID 0x00002000L
|
|
#define ELEMENT_STATUS_NOT_BUS 0x00008000L
|
|
#define ELEMENT_STATUS_INVERT 0x00400000L
|
|
#define ELEMENT_STATUS_SVALID 0x00800000L
|
|
#define ELEMENT_STATUS_PVOLTAG 0x10000000L
|
|
#define ELEMENT_STATUS_AVOLTAG 0x20000000L
|
|
|
|
/* Changer element status exception codes */
|
|
#define ERROR_LABEL_UNREADABLE 0x00000001L
|
|
#define ERROR_LABEL_QUESTIONABLE 0x00000002L
|
|
#define ERROR_SLOT_NOT_PRESENT 0x00000004L
|
|
#define ERROR_DRIVE_NOT_INSTALLED 0x00000008L
|
|
#define ERROR_TRAY_MALFUNCTION 0x00000010L
|
|
#define ERROR_INIT_STATUS_NEEDED 0x00000011L
|
|
#define ERROR_UNHANDLED_ERROR 0xFFFFFFFFL
|
|
|
|
/* IOCTL_CHANGER_QUERY_VOLUME_TAGS action codes */
|
|
#define SEARCH_ALL 0x00000000L
|
|
#define SEARCH_PRIMARY 0x00000001L
|
|
#define SEARCH_ALTERNATE 0x00000002L
|
|
#define SEARCH_ALL_NO_SEQ 0x00000004L
|
|
#define SEARCH_PRI_NO_SEQ 0x00000005L
|
|
#define SEARCH_ALT_NO_SEQ 0x00000006L
|
|
#define ASSERT_PRIMARY 0x00000008L
|
|
#define ASSERT_ALTERNATE 0x00000009L
|
|
#define REPLACE_PRIMARY 0x0000000AL
|
|
#define REPLACE_ALTERNATE 0x0000000BL
|
|
#define UNDEFINE_PRIMARY 0x0000000CL
|
|
#define UNDEFINE_ALTERNATE 0x0000000DL
|
|
|
|
/* Serial port device I/O control codes */
|
|
#define IOCTL_SERIAL_LSRMST_INSERT \
|
|
CTL_CODE( FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
|
|
/* Serial port enumerator device I/O control codes */
|
|
#define IOCTL_SERENUM_EXPOSE_HARDWARE \
|
|
CTL_CODE( FILE_DEVICE_SERENUM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_SERENUM_REMOVE_HARDWARE \
|
|
CTL_CODE( FILE_DEVICE_SERENUM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_SERENUM_PORT_DESC \
|
|
CTL_CODE( FILE_DEVICE_SERENUM, 130, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_SERENUM_GET_PORT_NAME \
|
|
CTL_CODE( FILE_DEVICE_SERENUM, 131, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
|
|
/* Serial data special values */
|
|
#define SERIAL_LSRMST_ESCAPE 0x00
|
|
#define SERIAL_LSRMST_LSR_DATA 0x01
|
|
#define SERIAL_LSRMST_LSR_NODATA 0x02
|
|
#define SERIAL_LSRMST_MST 0x03
|
|
|
|
/* Serial FIFO control register values */
|
|
#define SERIAL_IOC_FCR_FIFO_ENABLE 0x00000001L
|
|
#define SERIAL_IOC_FCR_RCVR_RESET 0x00000002L
|
|
#define SERIAL_IOC_FCR_XMIT_RESET 0x00000004L
|
|
#define SERIAL_IOC_FCR_DMA_MODE 0x00000008L
|
|
#define SERIAL_IOC_FCR_RES1 0x00000010L
|
|
#define SERIAL_IOC_FCR_RES2 0x00000020L
|
|
#define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB 0x00000040L
|
|
#define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB 0x00000080L
|
|
|
|
/* Modem control register values */
|
|
#define SERIAL_IOC_MCR_DTR 0x00000001L
|
|
#define SERIAL_IOC_MCR_RTS 0x00000002L
|
|
#define SERIAL_IOC_MCR_OUT1 0x00000004L
|
|
#define SERIAL_IOC_MCR_OUT2 0x00000008L
|
|
#define SERIAL_IOC_MCR_LOOP 0x00000010L
|
|
|
|
/* File system control codes */
|
|
#define FSCTL_REQUEST_OPLOCK_LEVEL_1 \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_REQUEST_OPLOCK_LEVEL_2 \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_REQUEST_BATCH_OPLOCK \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_OPLOCK_BREAK_NOTIFY \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_LOCK_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_UNLOCK_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_DISMOUNT_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_IS_VOLUME_MOUNTED \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_IS_PATHNAME_VALID \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_MARK_VOLUME_DIRTY \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_QUERY_RETRIEVAL_POINTERS \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_COMPRESSION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SET_COMPRESSION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | \
|
|
FILE_WRITE_DATA )
|
|
#define FSCTL_SET_BOOTLOADER_ACCESSED \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_OPLOCK_BREAK_ACK_NO_2 \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_INVALIDATE_VOLUMES \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_QUERY_FAT_BPB \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_REQUEST_FILTER_OPLOCK \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_FILESYSTEM_GET_STATISTICS \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
#define FSCTL_GET_NTFS_VOLUME_DATA \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_NTFS_FILE_RECORD \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_VOLUME_BITMAP \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_RETRIEVAL_POINTERS \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_MOVE_FILE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_IS_VOLUME_DIRTY \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_ALLOW_EXTENDED_DASD_IO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define FSCTL_FIND_FILES_BY_SID \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_SET_OBJECT_ID \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_GET_OBJECT_ID \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_DELETE_OBJECT_ID \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_SET_REPARSE_POINT \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_GET_REPARSE_POINT \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_DELETE_REPARSE_POINT \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_ENUM_USN_DATA \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_SECURITY_ID_CHECK \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA )
|
|
#define FSCTL_READ_USN_JOURNAL \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_SET_OBJECT_ID_EXTENDED \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_CREATE_OR_GET_OBJECT_ID \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SET_SPARSE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_SET_ZERO_DATA \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_QUERY_ALLOCATED_RANGES \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA )
|
|
#define FSCTL_ENABLE_UPGRADE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_SET_ENCRYPTION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_ENCRYPTION_FSCTL_IO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_WRITE_RAW_ENCRYPTED \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_READ_RAW_ENCRYPTED \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_CREATE_USN_JOURNAL \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_READ_FILE_USN_DATA \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_WRITE_USN_CLOSE_RECORD \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_EXTEND_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_QUERY_USN_JOURNAL \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_DELETE_USN_JOURNAL \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_MARK_HANDLE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SIS_COPYFILE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SIS_LINK_FILES \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | \
|
|
FILE_WRITE_DATA )
|
|
#define FSCTL_RECALL_FILE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_READ_FROM_PLEX \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA )
|
|
#define FSCTL_FILE_PREFETCH \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define FSCTL_MAKE_MEDIA_COMPATIBLE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_SET_DEFECT_MANAGEMENT \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_QUERY_SPARING_INFO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_QUERY_ON_DISK_VOLUME_INFO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SET_VOLUME_COMPRESSION_STATE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_TXFS_MODIFY_RM \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_QUERY_RM_INFORMATION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_TXFS_ROLLFORWARD_REDO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_ROLLFORWARD_UNDO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_START_RM \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_SHUTDOWN_RM \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_READ_BACKUP_INFORMATION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_CREATE_SECONDARY_RM \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_GET_METADATA_INFO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_TXFS_GET_TRANSACTED_VERSION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_TXFS_SAVEPOINT_INFORMATION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_CREATE_MINIVERSION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA )
|
|
#define FSCTL_TXFS_TRANSACTION_ACTIVE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_SET_ZERO_ON_DEALLOCATION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_SET_REPAIR \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_REPAIR \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_WAIT_FOR_REPAIR \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_INITIATE_REPAIR \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_CSC_INTERNAL \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS )
|
|
#define FSCTL_SHRINK_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define FSCTL_SET_SHORT_NAME_BEHAVIOR \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_TXFS_LIST_TRANSACTIONS \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA )
|
|
#define FSCTL_QUERY_PAGEFILE_ENCRYPTION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_RESET_VOLUME_ALLOCATION_HINTS \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define FSCTL_QUERY_DEPENDENT_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SD_GLOBAL_CHANGE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define FSCTL_TXFS_READ_BACKUP_INFORMATION2 \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define FSCTL_LOOKUP_STREAM_FROM_CLUSTER \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_FILE_TYPE_NOTIFICATION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_BOOT_AREA_INFO \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_GET_RETRIEVAL_POINTER_BASE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_SET_PERSISTENT_VOLUME_STATE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_QUERY_PERSISTENT_VOLUME_STATE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_REQUEST_OPLOCK \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_CSV_TUNNEL_REQUEST \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_IS_CSV_FILE \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_CSV_GET_VOLUME_PATH_NAME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define FSCTL_IS_FILE_ON_CSV_VOLUME \
|
|
CTL_CODE( FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
#define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
|
|
|
|
/* AVIO device I/O control codes */
|
|
#define IOCTL_AVIO_ALLOCATE_STREAM \
|
|
CTL_CODE( FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define IOCTL_AVIO_FREE_STREAM \
|
|
CTL_CODE( FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
#define IOCTL_AVIO_MODIFY_STREAM \
|
|
CTL_CODE( FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
|
|
|
|
/* CSV device number special values */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFFL
|
|
#endif
|
|
|
|
/* USN records */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define USN_REASON_DATA_OVERWRITE 0x00000001L
|
|
#define USN_REASON_DATA_EXTEND 0x00000002L
|
|
#define USN_REASON_DATA_TRUNCATION 0x00000004L
|
|
#define USN_REASON_NAMED_DATA_OVERWRITE 0x00000010L
|
|
#define USN_REASON_NAMED_DATA_EXTEND 0x00000020L
|
|
#define USN_REASON_NAMED_DATA_TRUNCATION 0x00000040L
|
|
#define USN_REASON_FILE_CREATE 0x00000100L
|
|
#define USN_REASON_FILE_DELETE 0x00000200L
|
|
#define USN_REASON_EA_CHANGE 0x00000400L
|
|
#define USN_REASON_SECURITY_CHANGE 0x00000800L
|
|
#define USN_REASON_RENAME_OLD_NAME 0x00001000L
|
|
#define USN_REASON_RENAME_NEW_NAME 0x00002000L
|
|
#define USN_REASON_INDEXABLE_CHANGE 0x00004000L
|
|
#define USN_REASON_BASIC_INFO_CHANGE 0x00008000L
|
|
#define USN_REASON_HARD_LINK_CHANGE 0x00010000L
|
|
#define USN_REASON_COMPRESSION_CHANGE 0x00020000L
|
|
#define USN_REASON_ENCRYPTION_CHANGE 0x00040000L
|
|
#define USN_REASON_OBJECT_ID_CHANGE 0x00080000L
|
|
#define USN_REASON_REPARSE_POINT_CHANGE 0x00100000L
|
|
#define USN_REASON_STREAM_CHANGE 0x00200000L
|
|
#define USN_REASON_TRANSACTED_CHANGE 0x00400000L
|
|
#define USN_REASON_CLOSE 0x80000000L
|
|
#endif
|
|
|
|
/* FSCTL_DELETE_USN_JOURNAL flags */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define USN_DELETE_FLAG_DELETE 0x00000001L
|
|
#define USN_DELETE_FLAG_NOTIFY 0x00000002L
|
|
#define USN_DELETE_VALID_FLAGS 0x00000003L
|
|
#endif
|
|
|
|
/* FSCTL_MARK_HANDLE source information flags */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define USN_SOURCE_DATA_MANAGEMENT 0x00000001L
|
|
#define USN_SOURCE_AUXILIARY_DATA 0x00000002L
|
|
#define USN_SOURCE_REPLICATION_MANAGEMENT 0x00000004L
|
|
#endif
|
|
|
|
/* FSCTL_MARK_HANDLE handle information flags */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define MARK_HANDLE_PROTECT_CLUSTERS 0x00000001L
|
|
#define MARK_HANDLE_TXF_SYSTEM_LOG 0x00000004L
|
|
#define MARK_HANDLE_NOT_TXF_SYSTEM_LOG 0x00000008L
|
|
#endif
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define MARK_HANDLE_REALTIME 0x00000020L
|
|
#define MARK_HANDLE_NOT_REALTIME 0x00000040L
|
|
#endif
|
|
|
|
/* 8.3 name flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define NO_8DOT3_NAME_PRESENT 0x00000001L
|
|
#define REMOVED_8DOT3_NAME 0x00000002L
|
|
#endif
|
|
|
|
/* Persistent volume flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED 0x00000001L
|
|
#endif
|
|
|
|
/* FSCTL_IS_VOLUME_DIRTY returned flags */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define VOLUME_IS_DIRTY 0x00000001L
|
|
#define VOLUME_UPGRADE_SCHEDULED 0x00000002L
|
|
#define VOLUME_SESSION_OPEN 0x00000004L
|
|
#endif
|
|
|
|
/* File prefetch types */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define FILE_PREFETCH_TYPE_FOR_CREATE 0x00000001L
|
|
#define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x00000002L
|
|
#define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x00000003L
|
|
#define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x00000004L
|
|
#define FILE_PREFETCH_TYPE_MAX 0x00000004L
|
|
#endif
|
|
|
|
/* File system types */
|
|
#define FILESYSTEM_STATISTICS_TYPE_NTFS 1
|
|
#define FILESYSTEM_STATISTICS_TYPE_FAT 2
|
|
#define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
|
|
|
|
/* Encryption operations */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define FILE_SET_ENCRYPTION 0x00000001L
|
|
#define FILE_CLEAR_ENCRYPTION 0x00000002L
|
|
#define STREAM_SET_ENCRYPTION 0x00000003L
|
|
#define STREAM_CLEAR_ENCRYPTION 0x00000004L
|
|
#define MAXIMUM_ENCRYPTION_VALUE 0x00000004L
|
|
#endif
|
|
|
|
/* Compression formats */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define COMPRESSION_FORMAT_SPARSE 0x4000
|
|
#endif
|
|
|
|
/* FSCTL_SIS_COPYFILE flags */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
#define COPYFILE_SIS_LINK 0x00000001L
|
|
#define COPYFILE_SIS_REPLACE 0x00000002L
|
|
#define COPYFILE_SIS_FLAGS 0x00000003L
|
|
#endif
|
|
|
|
/* FSCTL_SET_REPAIR flags */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define SET_REPAIR_ENABLED 0x00000001L
|
|
#define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002L
|
|
#define SET_REPAIR_DELETE_CROSSLINK 0x00000004L
|
|
#define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008L
|
|
#define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010L
|
|
#define SET_REPAIR_VALID_MASK 0x0000000FL
|
|
#endif
|
|
|
|
/* TXFS flags */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_RM_FLAG_LOGGING_MODE 0x00000001L
|
|
#define TXFS_RM_FLAG_RENAME_RM 0x00000002L
|
|
#define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004L
|
|
#define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008L
|
|
#define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010L
|
|
#define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020L
|
|
#define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040L
|
|
#define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080L
|
|
#define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100L
|
|
#define TXFS_RM_FLAG_GROW_LOG 0x00000400L
|
|
#define TXFS_RM_FLAG_SHRINK_LOG 0x00000800L
|
|
#define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000L
|
|
#define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000L
|
|
#define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000L
|
|
#define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000L
|
|
#define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000L
|
|
#define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000L
|
|
#define TXFS_MODIFY_RM_VALID_FLAGS \
|
|
(TXFS_RM_FLAG_LOGGING_MODE | TXFS_RM_FLAG_RENAME_RM | \
|
|
TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
|
|
TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
|
|
TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
|
|
TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
|
|
TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
|
|
TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | TXFS_RM_FLAG_GROW_LOG | \
|
|
TXFS_RM_FLAG_SHRINK_LOG | TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
|
|
TXFS_RM_FLAG_PRESERVE_CHANGES | TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
|
|
TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | TMFX_RM_FLAG_PREFER_CONSISTENCY | \
|
|
TXFS_RM_FLAG_PREFER_AVAILABILITY)
|
|
#define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
|
|
(TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
|
|
TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
|
|
TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
|
|
TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
|
|
TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | TXFM_RM_FLAG_PREFER_CONSISTENCY | \
|
|
TXFS_RM_FLAG_PREFER_AVAILABILITY)
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES flags */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001L
|
|
#define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002L
|
|
#endif
|
|
|
|
/* TXFS logging modes */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_LOGGING_MODE_SIMPLE 0x0001
|
|
#define TXFS_LOGGING_MODE_FULL 0x0002
|
|
#endif
|
|
|
|
/* TXFS transaction states */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_TRANSACTION_STATE_NONE 0x00
|
|
#define TXFS_TRANSACTION_STATE_ACTIVE 0x01
|
|
#define TXFS_TRANSACTION_STATE_PREPARED 0x02
|
|
#define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
|
|
#endif
|
|
|
|
/* TXFS RM states */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_RM_STATE_NOT_STARTED 0
|
|
#define TXFS_RM_STATE_STARTING 1
|
|
#define TXFS_RM_STATE_ACTIVE 2
|
|
#define TXFS_RM_STATE_SHUTTING_DOWN 3
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_ROLLFORWARD_REDO flags */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x00000001L
|
|
#define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x00000002L
|
|
#define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
|
|
(TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
|
|
TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_START_RM flags */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001L
|
|
#define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002L
|
|
#define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004L
|
|
#define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008L
|
|
#define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010L
|
|
#define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020L
|
|
#define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040L
|
|
#define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080L
|
|
#define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200L
|
|
#define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400L
|
|
#define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800L
|
|
#define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000L
|
|
#define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000L
|
|
#define TXFS_START_RM_VALID_FLAG \
|
|
(TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
|
|
TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
|
|
TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
|
|
TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
|
|
TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
|
|
TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
|
|
TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
|
|
TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
|
|
TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
|
|
TXFS_START_RM_FLAG_LOGGING_MODE | TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
|
|
TXFS_START_RM_FLAG_PREFER_CONSISTENCY | TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_GET_TRANSACTED_VERSION special values */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFEL
|
|
#define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFFL
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_SAVEPOINT_INFORMATION flags */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
#define TXFS_SAVEPOINT_SET 0x00000001L
|
|
#define TXFS_SAVEPOINT_ROLLBACK 0x00000002L
|
|
#define TXFS_SAVEPOINT_CLEAR 0x00000004L
|
|
#define TXFS_SAVEPOINT_CLEAR_ALL 0x00000008L
|
|
#endif
|
|
|
|
/* Oplock levels */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define OPLOCK_LEVEL_CACHE_READ 0x00000001L
|
|
#define OPLOCK_LEVEL_CACHE_HANDLE 0x00000002L
|
|
#define OPLOCK_LEVEL_CACHE_WRITE 0x00000004L
|
|
#endif
|
|
|
|
/* FSCTL_REQUEST_OPLOCK input flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define REQUEST_OPLOCK_INPUT_FLAG_REQUEST 0x00000001L
|
|
#define REQUEST_OPLOCK_INPUT_FLAG_ACK 0x00000002L
|
|
#define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE 0x00000004L
|
|
#endif
|
|
|
|
/* FSCTL_REQUEST_OPLOCK output flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED 0x00000001L
|
|
#define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED 0x00000002L
|
|
#endif
|
|
|
|
/* FSCTL_REQUEST_OPLOCK parameters revision number */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define REQUEST_OPLOCK_CURRENT_VERSION 1
|
|
#endif
|
|
|
|
/* FSCTL_SD_GLOBAL_CHANGE types */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1L
|
|
#endif
|
|
|
|
/* Extended encrypted data information flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define ENCRYPTED_DATA_INFO_SPARSE_FILE 1L
|
|
#endif
|
|
|
|
/* FSCTL_LOOKUP_STREAM_FROM_CLUSTER entry flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xFF000000L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000L
|
|
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000L
|
|
#endif
|
|
|
|
/* FSCTL_FILE_TYPE_NOTIFICATION flags */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
#define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001L
|
|
#define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002L
|
|
#endif
|
|
|
|
/* Volume device I/O control codes */
|
|
#define IOCTL_VOLUME_BASE 0x00000056L
|
|
#if (NTDDI_VERSION >= 0x05000000)
|
|
#define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS \
|
|
CTL_CODE( IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_VOLUME_ONLINE \
|
|
CTL_CODE( IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#define IOCTL_VOLUME_OFFLINE \
|
|
CTL_CODE( IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS | \
|
|
FILE_WRITE_ACCESS )
|
|
#endif
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
#define IOCTL_VOLUME_IS_CLUSTERED \
|
|
CTL_CODE( IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#define IOCTL_VOLUME_GET_GPT_ATTRIBUTES \
|
|
CTL_CODE( IOCTL_VOLUME_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
|
#endif
|
|
|
|
/* Symbolic link flags */
|
|
#define SYMLINK_FLAG_RELATIVE 1L
|
|
|
|
/* Element types */
|
|
typedef enum _ELEMENT_TYPE {
|
|
AllElements = 0,
|
|
ChangerTransport = 1,
|
|
ChangerSlot = 2,
|
|
ChangerIEPort = 3,
|
|
ChangerDrive = 4,
|
|
ChangerDoor = 5,
|
|
ChangerKeypad = 6,
|
|
ChangerMaxElement = 7
|
|
} ELEMENT_TYPE;
|
|
typedef ELEMENT_TYPE *PELEMENT_TYPE;
|
|
|
|
/* Changer element */
|
|
typedef struct _CHANGER_ELEMENT {
|
|
ELEMENT_TYPE ElementType;
|
|
DWORD ElementAddress;
|
|
} CHANGER_ELEMENT;
|
|
typedef CHANGER_ELEMENT *PCHANGER_ELEMENT;
|
|
|
|
/* Changer element list */
|
|
typedef struct _CHANGER_ELEMENT_LIST {
|
|
CHANGER_ELEMENT Element;
|
|
DWORD NumberOfElements;
|
|
} CHANGER_ELEMENT_LIST;
|
|
typedef CHANGER_ELEMENT_LIST *PCHANGER_ELEMENT_LIST;
|
|
|
|
/* IOCTL_CHANGER_GET_PARAMETERS returned data */
|
|
typedef struct _GET_CHANGER_PARAMETERS {
|
|
DWORD Size;
|
|
WORD NumberTransportElements;
|
|
WORD NumberStorageElements;
|
|
WORD NumberCleanerSlots;
|
|
WORD NumberIEElements;
|
|
WORD NumberDataTransferElements;
|
|
WORD NumberOfDoors;
|
|
WORD FirstSlotNumber;
|
|
WORD FirstDriveNumber;
|
|
WORD FirstTransportNumber;
|
|
WORD FirstIEPortNumber;
|
|
WORD FirstCleanerSlotAddress;
|
|
WORD MagazineSize;
|
|
DWORD DriveCleanTimeout;
|
|
DWORD Features0;
|
|
DWORD Features1;
|
|
BYTE MoveFromTransport;
|
|
BYTE MoveFromSlot;
|
|
BYTE MoveFromIePort;
|
|
BYTE MoveFromDrive;
|
|
BYTE ExchangeFromTransport;
|
|
BYTE ExchangeFromSlot;
|
|
BYTE ExchangeFromIePort;
|
|
BYTE ExchangeFromDrive;
|
|
BYTE LockUnlockCapabilities;
|
|
BYTE PositionCapabilities;
|
|
BYTE Reserved1[2];
|
|
DWORD Reserved2[2];
|
|
} GET_CHANGER_PARAMETERS;
|
|
typedef GET_CHANGER_PARAMETERS *PGET_CHANGER_PARAMETERS;
|
|
|
|
/* Changer product data */
|
|
typedef struct _CHANGER_PRODUCT_DATA {
|
|
BYTE VendorId[VENDOR_ID_LENGTH];
|
|
BYTE ProductId[PRODUCT_ID_LENGTH];
|
|
BYTE Revision[REVISION_LENGTH];
|
|
BYTE SerialNumber[SERIAL_NUMBER_LENGTH];
|
|
BYTE DeviceType;
|
|
} CHANGER_PRODUCT_DATA;
|
|
typedef CHANGER_PRODUCT_DATA *PCHANGER_PRODUCT_DATA;
|
|
|
|
/* IOCTL_CHANGER_SET_ACCESS parameters */
|
|
typedef struct _CHANGER_SET_ACCESS {
|
|
CHANGER_ELEMENT Element;
|
|
DWORD Control;
|
|
} CHANGER_SET_ACCESS;
|
|
typedef CHANGER_SET_ACCESS *PCHANGER_SET_ACCESS;
|
|
|
|
/* IOCTL_CHANGER_GET_ELEMENT_STATUS parameters */
|
|
typedef struct _CHANGER_READ_ELEMENT_STATUS {
|
|
CHANGER_ELEMENT_LIST ElementList;
|
|
BOOLEAN VolumeTagInfo;
|
|
} CHANGER_READ_ELEMENT_STATUS;
|
|
typedef CHANGER_READ_ELEMENT_STATUS *PCHANGER_READ_ELEMENT_STATUS;
|
|
|
|
/* Changer element status */
|
|
typedef struct _CHANGER_ELEMENT_STATUS {
|
|
CHANGER_ELEMENT Element;
|
|
CHANGER_ELEMENT SrcElementAddress;
|
|
DWORD Flags;
|
|
DWORD ExceptionCode;
|
|
BYTE TargetId;
|
|
BYTE Lun;
|
|
WORD Reserved;
|
|
BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
|
|
BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE];
|
|
} CHANGER_ELEMENT_STATUS;
|
|
typedef CHANGER_ELEMENT_STATUS *PCHANGER_ELEMENT_STATUS;
|
|
|
|
/* Changer element status (extended version) */
|
|
typedef struct _CHANGER_ELEMENT_STATUS_EX {
|
|
CHANGER_ELEMENT Element;
|
|
CHANGER_ELEMENT SrcElementAddress;
|
|
DWORD Flags;
|
|
DWORD ExceptionCode;
|
|
BYTE TargetId;
|
|
BYTE Lun;
|
|
WORD Reserved;
|
|
BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
|
|
BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE];
|
|
BYTE VendorIdentification[VENDOR_ID_LENGTH];
|
|
BYTE ProductIdentification[PRODUCT_ID_LENGTH];
|
|
BYTE SerialNumber[SERIAL_NUMBER_LENGTH];
|
|
} CHANGER_ELEMENT_STATUS_EX;
|
|
typedef CHANGER_ELEMENT_STATUS_EX *PCHANGER_ELEMENT_STATUS_EX;
|
|
|
|
/* IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS parameters */
|
|
typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS {
|
|
CHANGER_ELEMENT_LIST ElementList;
|
|
BOOLEAN BarCodeScan;
|
|
} CHANGER_INITIALIZE_ELEMENT_STATUS;
|
|
typedef CHANGER_INITIALIZE_ELEMENT_STATUS *PCHANGER_INITIALIZE_ELEMENT_STATUS;
|
|
|
|
/* IOCTL_CHANGER_SET_POSITION parameters */
|
|
typedef struct _CHANGER_SET_POSITION {
|
|
CHANGER_ELEMENT Transport;
|
|
CHANGER_ELEMENT Destination;
|
|
BOOLEAN Flip;
|
|
} CHANGER_SET_POSITION;
|
|
typedef CHANGER_SET_POSITION *PCHANGER_SET_POSITION;
|
|
|
|
/* IOCTL_CHANGER_EXCHANGE_MEDIUM parameters */
|
|
typedef struct _CHANGER_EXCHANGE_MEDIUM {
|
|
CHANGER_ELEMENT Transport;
|
|
CHANGER_ELEMENT Source;
|
|
CHANGER_ELEMENT Destination1;
|
|
CHANGER_ELEMENT Destination2;
|
|
BOOLEAN Flip1;
|
|
BOOLEAN Flip2;
|
|
} CHANGER_EXCHANGE_MEDIUM;
|
|
typedef CHANGER_EXCHANGE_MEDIUM *PCHANGER_EXCHANGE_MEDIUM;
|
|
|
|
/* IOCTL_CHANGER_MOVE_MEDIUM parameters */
|
|
typedef struct _CHANGER_MOVE_MEDIUM {
|
|
CHANGER_ELEMENT Transport;
|
|
CHANGER_ELEMENT Source;
|
|
CHANGER_ELEMENT Destination;
|
|
BOOLEAN Flip;
|
|
} CHANGER_MOVE_MEDIUM;
|
|
typedef CHANGER_MOVE_MEDIUM *PCHANGER_MOVE_MEDIUM;
|
|
|
|
/* IOCTL_CHANGER_QUERY_VOLUME_TAGS parameters */
|
|
typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION {
|
|
CHANGER_ELEMENT StartingElement;
|
|
DWORD ActionCode;
|
|
BYTE VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE];
|
|
} CHANGER_SEND_VOLUME_TAG_INFORMATION;
|
|
typedef CHANGER_SEND_VOLUME_TAG_INFORMATION *PCHANGER_SEND_VOLUME_TAG_INFORMATION;
|
|
|
|
/* IOCTL_CHANGER_QUERY_VOLUME_TAG returned data */
|
|
typedef struct _READ_ELEMENT_ADDRESS_INFO {
|
|
DWORD NumberOfElements;
|
|
CHANGER_ELEMENT_STATUS ElementStatus[1];
|
|
} READ_ELEMENT_ADDRESS_INFO;
|
|
typedef READ_ELEMENT_ADDRESS_INFO *PREAD_ELEMENT_ADDRESS_INFO;
|
|
|
|
/* Changer device problem types */
|
|
typedef enum _CHANGER_DEVICE_PROBLEM_TYPE {
|
|
DeviceProblemNone = 0,
|
|
DeviceProblemHardware = 1,
|
|
DeviceProblemCHMError = 2,
|
|
DeviceProblemDoorOpen = 3,
|
|
DeviceProblemCalibrationError = 4,
|
|
DeviceProblemTargetFailure = 5,
|
|
DeviceProblemCHMMoveError = 6,
|
|
DeviceProblemCHMZeroError = 7,
|
|
DeviceProblemCartridgeInsertError = 8,
|
|
DeviceProblemPositionError = 9,
|
|
DeviceProblemSensorError = 10,
|
|
DeviceProblemCartridgeEjectError = 11,
|
|
DeviceProblemGripperError = 12,
|
|
DeviceProblemDriveError = 13
|
|
} CHANGER_DEVICE_PROBLEM_TYPE;
|
|
typedef CHANGER_DEVICE_PROBLEM_TYPE *PCHANGER_DEVICE_PROBLEM_TYPE;
|
|
|
|
/* FSCTL_IS_CSV_FILE parameters */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _CSV_NAMESPACE_INFO {
|
|
DWORD Version;
|
|
DWORD DeviceNumber;
|
|
LARGE_INTEGER StartingOffset;
|
|
DWORD SectorSize;
|
|
} CSV_NAMESPACE_INFO;
|
|
typedef CSV_NAMESPACE_INFO *PCSV_NAMESPACE_INFO;
|
|
#endif
|
|
|
|
/* Path name buffer */
|
|
typedef struct _PATHNAME_BUFFER {
|
|
DWORD PathNameLength;
|
|
WCHAR Name[1];
|
|
} PATHNAME_BUFFER;
|
|
typedef PATHNAME_BUFFER *PPATHNAME_BUFFER;
|
|
|
|
/* IOCTL_QUERY_FAT_BPB returned data */
|
|
typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
|
|
BYTE First0x24BytesOfBootSector[0x24];
|
|
} FSCTL_QUERY_FAT_BPB_BUFFER;
|
|
typedef FSCTL_QUERY_FAT_BPB_BUFFER *PFSCTL_QUERY_FAT_BPB_BUFFER;
|
|
|
|
/* NTFS volume data buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
LARGE_INTEGER VolumeSerialNumber;
|
|
LARGE_INTEGER NumberSectors;
|
|
LARGE_INTEGER TotalClusters;
|
|
LARGE_INTEGER FreeClusters;
|
|
LARGE_INTEGER TotalReserved;
|
|
DWORD BytesPerSector;
|
|
DWORD BytesPerCluster;
|
|
DWORD BytesPerFileRecordSegment;
|
|
DWORD ClustersPerFileRecordSegment;
|
|
LARGE_INTEGER MftValidDataLength;
|
|
LARGE_INTEGER MftStartLcn;
|
|
LARGE_INTEGER Mft2StartLcn;
|
|
LARGE_INTEGER MftZoneStart;
|
|
LARGE_INTEGER MftZoneEnd;
|
|
} NTFS_VOLUME_DATA_BUFFER;
|
|
typedef NTFS_VOLUME_DATA_BUFFER *PNTFS_VOLUME_DATA_BUFFER;
|
|
#endif
|
|
|
|
/* NTFS extended volume data */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
DWORD ByteCount;
|
|
WORD MajorVersion;
|
|
WORD MinorVersion;
|
|
} NTFS_EXTENDED_VOLUME_DATA;
|
|
typedef NTFS_EXTENDED_VOLUME_DATA *PNTFS_EXTENDED_VOLUME_DATA;
|
|
#endif
|
|
|
|
/* Starting LCN input buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
LARGE_INTEGER StartingLcn;
|
|
} STARTING_LCN_INPUT_BUFFER;
|
|
typedef STARTING_LCN_INPUT_BUFFER *PSTARTING_LCN_INPUT_BUFFER;
|
|
#endif
|
|
|
|
/* Volume bitmap buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
LARGE_INTEGER StartingLcn;
|
|
LARGE_INTEGER BitmapSize;
|
|
BYTE Buffer[1];
|
|
} VOLUME_BITMAP_BUFFER;
|
|
typedef VOLUME_BITMAP_BUFFER *PVOLUME_BITMAP_BUFFER;
|
|
#endif
|
|
|
|
/* Starting VCN input buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
LARGE_INTEGER StartingVcn;
|
|
} STARTING_VCN_INPUT_BUFFER;
|
|
typedef STARTING_VCN_INPUT_BUFFER *PSTARTING_VCN_INPUT_BUFFER;
|
|
#endif
|
|
|
|
/* Retrieval pointers buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct RETRIEVAL_POINTERS_BUFFER {
|
|
DWORD ExtentCount;
|
|
LARGE_INTEGER StartingVcn;
|
|
struct {
|
|
LARGE_INTEGER NextVcn;
|
|
LARGE_INTEGER Lcn;
|
|
} Extents[1];
|
|
} RETRIEVAL_POINTERS_BUFFER;
|
|
typedef RETRIEVAL_POINTERS_BUFFER *PRETRIEVAL_POINTERS_BUFFER;
|
|
#endif
|
|
|
|
/* NTFS file record input buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
LARGE_INTEGER FileReferenceNumber;
|
|
} NTFS_FILE_RECORD_INPUT_BUFFER;
|
|
typedef NTFS_FILE_RECORD_INPUT_BUFFER *PNTFS_FILE_RECORD_INPUT_BUFFER;
|
|
#endif
|
|
|
|
/* NTFS file record output buffer */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
LARGE_INTEGER FileReferenceNumber;
|
|
DWORD FileRecordLength;
|
|
BYTE FileRecordBuffer[1];
|
|
} NTFS_FILE_RECORD_OUTPUT_BUFFER;
|
|
typedef NTFS_FILE_RECORD_OUTPUT_BUFFER *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_MOVE_FILE parameters */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
HANDLE FileHandle;
|
|
LARGE_INTEGER StartingVcn;
|
|
LARGE_INTEGER StartingLcn;
|
|
DWORD ClusterCount;
|
|
} MOVE_FILE_DATA;
|
|
typedef MOVE_FILE_DATA *PMOVE_FILE_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_MOVE_FILE record data */
|
|
#if (_WIN32_WINNT >= 0x0400)
|
|
typedef struct {
|
|
HANDLE FileHandle;
|
|
LARGE_INTEGER SourceFileRecord;
|
|
LARGE_INTEGER TargetFileRecord;
|
|
} MOVE_FILE_RECORD_DATA;
|
|
typedef MOVE_FILE_RECORD_DATA *PMOVE_FILE_RECORD_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_FIND_FILES_BY_SID parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORD Restart;
|
|
SID Sid;
|
|
} FIND_BY_SID_DATA;
|
|
typedef FIND_BY_SID_DATA *PFIND_BY_SID_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_FIND_FILES_BY_SID returned data */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORD NextEntryOffset;
|
|
DWORD FileIndex;
|
|
DWORD FileNameLength;
|
|
WCHAR FileName[1];
|
|
} FIND_BY_SID_OUTPUT;
|
|
typedef FIND_BY_SID_OUTPUT *PFIND_BY_SID_OUTPUT;
|
|
#endif
|
|
|
|
/* FSCTL_ENUM_USN_DATA parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORDLONG StartFileReferenceNumber;
|
|
USN LowUsn;
|
|
USN HighUsn;
|
|
} MFT_ENUM_DATA;
|
|
typedef MFT_ENUM_DATA *PMFT_ENUM_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_CREATE_USN_JOURNAL parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORDLONG MaximumSize;
|
|
DWORDLONG AllocationDelta;
|
|
} CREATE_USN_JOURNAL_DATA;
|
|
typedef CREATE_USN_JOURNAL_DATA *PCREATE_USN_JOURNAL_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_READ_USN_JOURNAL parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
USN StartUsn;
|
|
DWORD ReasonMask;
|
|
DWORD ReturnOnlyOnClose;
|
|
DWORDLONG Timeout;
|
|
DWORDLONG BytesToWaitFor;
|
|
DWORDLONG UsnJournalID;
|
|
} READ_USN_JOURNAL_DATA;
|
|
typedef READ_USN_JOURNAL_DATA *PREAD_USN_JOURNAL_DATA;
|
|
#endif
|
|
|
|
/* USN record */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORD RecordLength;
|
|
WORD MajorVersion;
|
|
WORD MinorVersion;
|
|
DWORDLONG FileReferenceNumber;
|
|
DWORDLONG ParentFileReferenceNumber;
|
|
USN Usn;
|
|
LARGE_INTEGER TimeStamp;
|
|
DWORD Reason;
|
|
DWORD SourceInfo;
|
|
DWORD SecurityId;
|
|
DWORD FileAttributes;
|
|
WORD FileNameLength;
|
|
WORD FileNameOffset;
|
|
WCHAR FileName[1];
|
|
} USN_RECORD;
|
|
typedef USN_RECORD *PUSN_RECORD;
|
|
#endif
|
|
|
|
/* USN journal data */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORDLONG UsnJournalID;
|
|
USN FirstUsn;
|
|
USN NextUsn;
|
|
USN LowestValidUsn;
|
|
USN MaxUsn;
|
|
DWORDLONG MaximumSize;
|
|
DWORDLONG AllocationDelta;
|
|
} USN_JOURNAL_DATA;
|
|
typedef USN_JOURNAL_DATA *PUSN_JOURNAL_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_DELETE_USN_JOURNAL parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORDLONG UsnJournalID;
|
|
DWORD DeleteFlags;
|
|
} DELETE_USN_JOURNAL_DATA;
|
|
typedef DELETE_USN_JOURNAL_DATA *PDELETE_USN_JOURNAL_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_MARK_HANDLE parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
DWORD UsnSourceInfo;
|
|
HANDLE VolumeHandle;
|
|
DWORD HandleInfo;
|
|
} MARK_HANDLE_INFO;
|
|
typedef MARK_HANDLE_INFO *PMARK_HANDLE_INFO;
|
|
#endif
|
|
|
|
/* Bulk security test data */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct {
|
|
ACCESS_MASK DesiredAccess;
|
|
DWORD SecurityIds[1];
|
|
} BULK_SECURITY_TEST_DATA;
|
|
typedef BULK_SECURITY_TEST_DATA *PBULK_SECURITY_TEST_DATA;
|
|
#endif
|
|
|
|
/* FSCTL_FILE_PREFETCH parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _FILE_PREFETCH {
|
|
DWORD Type;
|
|
DWORD Count;
|
|
DWORDLONG Prefetch[1];
|
|
} FILE_PREFETCH;
|
|
typedef FILE_PREFETCH *PFILE_PREFETCH;
|
|
#endif
|
|
|
|
/* FSCTL_FILE_PREFETCH parameters (extended version) */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _FILE_PREFETCH_EX {
|
|
DWORD Type;
|
|
DWORD Count;
|
|
PVOID Context;
|
|
DWORDLONG Prefetch[1];
|
|
} FILE_PREFETCH_EX;
|
|
typedef FILE_PREFETCH_EX *PFILE_PREFETCH_EX;
|
|
#endif
|
|
|
|
/* File system statistics */
|
|
typedef struct _FILESYSTEM_STATISTICS {
|
|
WORD FileSystemType;
|
|
WORD Version;
|
|
DWORD SizeOfCompleteStructure;
|
|
DWORD UserFileReads;
|
|
DWORD UserFileReadBytes;
|
|
DWORD UserDiskReads;
|
|
DWORD UserFileWrites;
|
|
DWORD UserFileWriteBytes;
|
|
DWORD UserDiskWrites;
|
|
DWORD MetaDataReads;
|
|
DWORD MetaDataReadBytes;
|
|
DWORD MetaDataDiskReads;
|
|
DWORD MetaDataWrites;
|
|
DWORD MetaDataWriteBytes;
|
|
DWORD MetaDataDiskWrites;
|
|
} FILESYSTEM_STATISTICS;
|
|
typedef FILESYSTEM_STATISTICS *PFILESYSTEM_STATISTICS;
|
|
|
|
/* FAT statistics */
|
|
typedef struct _FAT_STATISTICS {
|
|
DWORD CreateHits;
|
|
DWORD SuccessfulCreates;
|
|
DWORD FailedCreates;
|
|
DWORD NonCachedReads;
|
|
DWORD NonCachedReadBytes;
|
|
DWORD NonCachedWrites;
|
|
DWORD NonCachedWriteBytes;
|
|
DWORD NonCachedDiskReads;
|
|
DWORD NonCachedDiskWrites;
|
|
} FAT_STATISTICS;
|
|
typedef FAT_STATISTICS *PFAT_STATISTICS;
|
|
|
|
/* Extended FAT statistics */
|
|
typedef struct _EXFAT_STATISTICS {
|
|
DWORD CreateHits;
|
|
DWORD SuccessfulCreates;
|
|
DWORD FailedCreates;
|
|
DWORD NonCachedReads;
|
|
DWORD NonCachedReadBytes;
|
|
DWORD NonCachedWrites;
|
|
DWORD NonCachedWriteBytes;
|
|
DWORD NonCachedDiskReads;
|
|
DWORD NonCachedDiskWrites;
|
|
} EXFAT_STATISTICS;
|
|
typedef EXFAT_STATISTICS *PEXFAT_STATISTICS;
|
|
|
|
/* NTFS statistics */
|
|
typedef struct _NTFS_STATISTICS {
|
|
DWORD LogFileFullExceptions;
|
|
DWORD OtherExceptions;
|
|
DWORD MftReads;
|
|
DWORD MftReadBytes;
|
|
DWORD MftWrites;
|
|
DWORD MftWriteBytes;
|
|
struct {
|
|
WORD Write;
|
|
WORD Create;
|
|
WORD SetInfo;
|
|
WORD Flush;
|
|
} MftWritesUserLevel;
|
|
WORD MftWritesFlushForLogFileFull;
|
|
WORD MftWritesLazyWriter;
|
|
WORD MftWritesUserRequest;
|
|
DWORD Mft2Writes;
|
|
DWORD Mft2WriteBytes;
|
|
struct {
|
|
WORD Write;
|
|
WORD Create;
|
|
WORD SetInfo;
|
|
WORD Flush;
|
|
} Mft2WritesUserLevel;
|
|
WORD Mft2WritesFlushForLogFileFull;
|
|
WORD Mft2WritesLazyWriter;
|
|
WORD Mft2WritesUserRequest;
|
|
DWORD RootIndexReads;
|
|
DWORD RootIndexReadBytes;
|
|
DWORD RootIndexWrites;
|
|
DWORD RootIndexWriteBytes;
|
|
DWORD BitmapReads;
|
|
DWORD BitmapReadBytes;
|
|
DWORD BitmapWrites;
|
|
DWORD BitmapWriteBytes;
|
|
WORD BitmapWritesFlushForLogFileFull;
|
|
WORD BitmapWritesLazyWriter;
|
|
WORD BitmapWritesUserRequest;
|
|
struct {
|
|
WORD Write;
|
|
WORD Create;
|
|
WORD SetInfo;
|
|
} BitmapWritesUserLevel;
|
|
DWORD MftBitmapReads;
|
|
DWORD MftBitmapReadBytes;
|
|
DWORD MftBitmapWrites;
|
|
DWORD MftBitmapWriteBytes;
|
|
WORD MftBitmapWritesFlushForLogFileFull;
|
|
WORD MftBitmapWritesLazyWriter;
|
|
WORD MftBitmapWritesUserRequest;
|
|
struct {
|
|
WORD Write;
|
|
WORD Create;
|
|
WORD SetInfo;
|
|
WORD Flush;
|
|
} MftBitmapWritesUserLevel;
|
|
DWORD UserIndexReads;
|
|
DWORD UserIndexReadBytes;
|
|
DWORD UserIndexWrites;
|
|
DWORD UserIndexWriteBytes;
|
|
DWORD LogFileReads;
|
|
DWORD LogFileReadBytes;
|
|
DWORD LogFileWrites;
|
|
DWORD LogFileWriteBytes;
|
|
struct {
|
|
DWORD Calls;
|
|
DWORD Clusters;
|
|
DWORD Hints;
|
|
DWORD RunsReturned;
|
|
DWORD HintsHonored;
|
|
DWORD HintsClustered;
|
|
DWORD Cache;
|
|
DWORD CacheClusters;
|
|
DWORD CacheMiss;
|
|
DWORD CacheMissClusters;
|
|
} Allocate;
|
|
} NTFS_STATISTICS;
|
|
typedef NTFS_STATISTICS *PNTFS_STATISTICS;
|
|
|
|
/* File object identifier buffer */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _FILE_OBJECTID_BUFFER {
|
|
BYTE ObjectId[16];
|
|
union {
|
|
struct {
|
|
BYTE BirthVolumeId[16];
|
|
BYTE BirthObjectId[16];
|
|
BYTE DomainId[16];
|
|
};
|
|
BYTE ExtendedInfo[48];
|
|
};
|
|
} FILE_OBJECTID_BUFFER;
|
|
typedef FILE_OBJECTID_BUFFER *PFILE_OBJECTID_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_SET_SPARSE parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _FILE_SET_SPARSE_BUFFER {
|
|
BOOLEAN SetSparse;
|
|
} FILE_SET_SPARSE_BUFFER;
|
|
typedef FILE_SET_SPARSE_BUFFER *PFILE_SET_SPARSE_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_SET_ZERO_DATA parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _FILE_ZERO_DATA_INFORMATION {
|
|
LARGE_INTEGER FileOffset;
|
|
LARGE_INTEGER BeyondFinalZero;
|
|
} FILE_ZERO_DATA_INFORMATION;
|
|
typedef FILE_ZERO_DATA_INFORMATION *PFILE_ZERO_DATA_INFORMATION;
|
|
#endif
|
|
|
|
/* File allocated range buffer */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
|
|
LARGE_INTEGER FileOffset;
|
|
LARGE_INTEGER Length;
|
|
} FILE_ALLOCATED_RANGE_BUFFER;
|
|
typedef FILE_ALLOCATED_RANGE_BUFFER *PFILE_ALLOCATE_RANGE_BUFFER;
|
|
#endif
|
|
|
|
/* Encryption buffer */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _ENCRYPTION_BUFFER {
|
|
DWORD EncryptionOperation;
|
|
BYTE Private[1];
|
|
} ENCRYPTION_BUFFER;
|
|
typedef ENCRYPTION_BUFFER *PENCRYPTION_BUFFER;
|
|
#endif
|
|
|
|
/* Decryption status buffer */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _DECRYPTION_STATUS_BUFFER {
|
|
BOOLEAN NoEncryptedStreams;
|
|
} DECRYPTION_STATUS_BUFFER;
|
|
typedef DECRYPTION_STATUS_BUFFER *PDECRYPTION_STATUS_BUFFER;
|
|
#endif
|
|
|
|
/* Raw encrypted data request information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
|
|
LONGLONG FileOffset;
|
|
DWORD Length;
|
|
} REQUEST_RAW_ENCRYPTED_DATA;
|
|
typedef REQUEST_RAW_ENCRYPTED_DATA *PREQEUST_RAW_ENCRYPTED_DATA;
|
|
#endif
|
|
|
|
/* Encrypted data information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _ENCRYPTED_DATA_INFO {
|
|
DWORDLONG StartingFileOffset;
|
|
DWORD OutputBufferOffset;
|
|
DWORD BytesWithinFileSize;
|
|
DWORD BytesWithinValidDataLength;
|
|
WORD CompressionFormat;
|
|
BYTE DataUnitShift;
|
|
BYTE ChunkShift;
|
|
BYTE ClusterShift;
|
|
BYTE EncryptionFormat;
|
|
WORD NumberOfDataBlocks;
|
|
DWORD DataBlockSize[ANYSIZE_ARRAY];
|
|
} ENCRYPTED_DATA_INFO;
|
|
typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO;
|
|
#endif
|
|
|
|
/* Plex data read request information */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _PLEX_READ_DATA_REQUEST {
|
|
LARGE_INTEGER ByteOffset;
|
|
DWORD ByteLength;
|
|
DWORD PlexNumber;
|
|
} PLEX_READ_DATA_REQUEST;
|
|
typedef PLEX_READ_DATA_REQUEST *PPLEX_READ_DATA_REQUEST;
|
|
#endif
|
|
|
|
/* FSCTL_SIS_COPYFILE parameters */
|
|
#if (_WIN32_WINNT >= 0x0500)
|
|
typedef struct _SI_COPYFILE {
|
|
DWORD SourceFileNameLength;
|
|
DWORD DestinationFileNameLength;
|
|
DWORD Flags;
|
|
WCHAR FileNameBuffer[1];
|
|
} SI_COPYFILE;
|
|
typedef SI_COPYFILE *PSI_COPYFILE;
|
|
#endif
|
|
|
|
/* FSCTL_MAKE_MEDIA_COMPATIBLE parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
|
|
BOOLEAN CloseDisc;
|
|
} FILE_MAKE_COMPATIBLE_BUFFER;
|
|
typedef FILE_MAKE_COMPATIBLE_BUFFER *PFILE_MAKE_COMPATIBLE_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_SET_DEFECT_MANAGEMENT parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
|
|
BOOLEAN Disable;
|
|
} FILE_SET_DEFECT_MGMT_BUFFER;
|
|
typedef FILE_SET_DEFECT_MGMT_BUFFER *PFILE_SET_DEFECT_MGMT_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_QUERY_SPARING_INFO returned data */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _FILE_QUERY_SPARING_BUFFER {
|
|
DWORD SparingUnitBytes;
|
|
BOOLEAN SoftwareSparing;
|
|
DWORD TotalSpareBlocks;
|
|
DWORD FreeSpareBlocks;
|
|
} FILE_QUERY_SPARING_BUFFER;
|
|
typedef FILE_QUERY_SPARING_BUFFER *PFILE_QUERY_SPARING_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_QUERY_ON_DISK_VOLUME_INFO returned data */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
|
|
LARGE_INTEGER DirectoryCount;
|
|
LARGE_INTEGER FileCount;
|
|
WORD FsFormatMajVersion;
|
|
WORD FsFormatMinVersion;
|
|
WCHAR FsFormatName[12];
|
|
LARGE_INTEGER FormatTime;
|
|
LARGE_INTEGER LastUpdateTime;
|
|
WCHAR CopyrightInfo[34];
|
|
WCHAR AbstractInfo[34];
|
|
WCHAR FormattingImplementationInfo[34];
|
|
WCHAR LastModifyingImplementationInfo[34];
|
|
} FILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
|
|
typedef FILE_QUERY_ON_DISK_VOL_INFO_BUFFER *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_SHRINK_VOLUME request types */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
|
|
ShrinkPrepare = 1,
|
|
ShrinkCommit = 2,
|
|
ShrinkAbort = 3
|
|
} SHRINK_VOLUME_REQUEST_TYPES;
|
|
typedef SHRINK_VOLUME_REQUEST_TYPES *PSHRINK_VOLUME_REQUEST_TYPES;
|
|
#endif
|
|
|
|
/* FSCTL_SHRINK_VOLUME parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _SHRINK_VOLUME_INFORMATION {
|
|
SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
|
|
DWORDLONG Flags;
|
|
LONGLONG NewNumberOfSectors;
|
|
} SHRINK_VOLUME_INFORMATION;
|
|
typedef SHRINK_VOLUME_INFORMATION *PSHRINK_VOLUME_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_MODIFY_RM parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_MODIFY_RM {
|
|
DWORD Flags;
|
|
DWORD LogContainerCountMax;
|
|
DWORD LogContainerCountMin;
|
|
DWORD LogContainerCount;
|
|
DWORD LogGrowthIncrement;
|
|
DWORD LogAutoShrinkPercentage;
|
|
DWORDLONG Reserved;
|
|
WORD LoggingMode;
|
|
} TXFS_MODIFY_RM;
|
|
typedef TXFS_MODIFY_RM *PTXFS_MODIFY_RM;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_QUERY_RM_INFORMATION parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_QUERY_RM_INFORMATION {
|
|
DWORD BytesRequired;
|
|
DWORDLONG TailLsn;
|
|
DWORDLONG CurrentLsn;
|
|
DWORDLONG ArchiveTailLsn;
|
|
DWORDLONG LogContainerSize;
|
|
LARGE_INTEGER HighestVirtualClock;
|
|
DWORD LogContainerCount;
|
|
DWORD LogContainerCountMax;
|
|
DWORD LogContainerCountMin;
|
|
DWORD LogGrowthIncrement;
|
|
DWORD LogAutoShrinkPercentage;
|
|
DWORD Flags;
|
|
WORD LoggingMode;
|
|
WORD Reserved;
|
|
DWORD RmState;
|
|
DWORDLONG LogCapacity;
|
|
DWORDLONG LogFree;
|
|
DWORDLONG TopsSize;
|
|
DWORDLONG TopsUsed;
|
|
DWORDLONG TransactionCount;
|
|
DWORDLONG OnePCCount;
|
|
DWORDLONG TwoPCCount;
|
|
DWORDLONG NumberLogFileFull;
|
|
DWORDLONG OldestTransactionAge;
|
|
GUID RMName;
|
|
DWORD TmLogPathOffset;
|
|
} TXFS_QUERY_RM_INFORMATION;
|
|
typedef TXFS_QUERY_RM_INFORMATION *PTXFS_QUERY_RM_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_ROLLFORWARD_REDO parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
|
|
LARGE_INTEGER LastVirtualClock;
|
|
DWORDLONG LastRedoLsn;
|
|
DWORDLONG HighestRecoveryLsn;
|
|
DWORD Flags;
|
|
} TXFS_ROLLFORWARD_REDO_INFORMATION;
|
|
typedef TXFS_ROLLFORWARD_REDO_INFORMATION *PTXFS_ROLLFORWARD_REDO_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_STAR_RM parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_START_RM_INFORMATION {
|
|
DWORD Flags;
|
|
DWORDLONG LogContainerSize;
|
|
DWORD LogContainerCountMin;
|
|
DWORD LogContainerCountMax;
|
|
DWORD LogGrowthIncrement;
|
|
DWORD LogAutoShrinkPercentage;
|
|
DWORD TmLogPathOffset;
|
|
WORD TmLogPathLength;
|
|
WORD LoggingMode;
|
|
WORD LogPathLength;
|
|
WORD Reserved;
|
|
WCHAR LogPath[1];
|
|
} TXFS_START_RM_INFORMATION;
|
|
typedef TXFS_START_RM_INFORMATION *PTXFS_START_RM_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_GET_METADATA_INFO returned data */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_GET_METADATA_INFO_OUT {
|
|
struct {
|
|
LONGLONG LowPart;
|
|
LONGLONG HighPart;
|
|
} TxfFileId;
|
|
GUID LockingTransaction;
|
|
DWORDLONG LastLsn;
|
|
DWORD TransactionState;
|
|
} TXFS_GET_METADATA_INFO_OUT;
|
|
typedef TXFS_GET_METADATA_INFO_OUT *PTXFS_GET_METADATA_INFO_OUT;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES entry */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
|
|
DWORDLONG Offset;
|
|
DWORD NameFlags;
|
|
LONGLONG FileId;
|
|
DWORD Reserved1;
|
|
DWORD Reserved2;
|
|
LONGLONG Reserved3;
|
|
WCHAR FileName[1];
|
|
} TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
|
|
typedef TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY *PTXFS_TRANSACTION_LOCKED_FILES_ENTRY;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
|
|
GUID KtmTransaction;
|
|
DWORDLONG NumberOfFiles;
|
|
DWORDLONG BufferSizeRequired;
|
|
DWORDLONG Offset;
|
|
} TXFS_LIST_TRANSACTION_LOCKED_FILES;
|
|
typedef TXFS_LIST_TRANSACTION_LOCKED_FILES *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_LIST_TRANSACTIONS entry */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
|
|
GUID TransactionId;
|
|
DWORD TransactionState;
|
|
DWORD Reserved1;
|
|
DWORD Reserved2;
|
|
LONGLONG Reserved3;
|
|
} TXFS_LIST_TRANSACTIONS_ENTRY;
|
|
typedef TXFS_LIST_TRANSACTIONS_ENTRY *PTXFS_LIST_TRANSACTIONS_ENTRY;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_LIST_TRANSACTIONS parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_LIST_TRANSACTIONS {
|
|
DWORDLONG NumberOfTransactions;
|
|
DWORDLONG BufferSizeRequired;
|
|
} TXFS_LIST_TRANSACTIONS;
|
|
typedef TXFS_LIST_TRANSACTIONS *PTXFS_LIST_TRANSACTIONS;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_READ_BACKUP_INFORMATION returned data */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
|
|
union {
|
|
DWORD BufferLength;
|
|
BYTE Buffer[1];
|
|
};
|
|
} TXFS_READ_BACKUP_INFORMATION_OUT;
|
|
typedef TXFS_READ_BACKUP_INFORMATION_OUT *PTXFS_READ_BACKUP_INFORMATION_OUT;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_WRITE_BACKUP_INFORMATION parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
|
|
BYTE Buffer[1];
|
|
} TXFS_WRITE_BACKUP_INFORMATION;
|
|
typedef TXFS_WRITE_BACKUP_INFORMATION *PTXFS_WRITE_BACKUP_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_GET_TRANSACTED_VERSION parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_GET_TRANSACTED_VERSION {
|
|
DWORD ThisBaseVersion;
|
|
DWORD LatestVersion;
|
|
WORD ThisMiniVersion;
|
|
WORD FirstMiniVersion;
|
|
WORD LatestMiniVersion;
|
|
} TXFS_GET_TRANSACTED_VERSION;
|
|
typedef TXFS_GET_TRANSACTED_VERSION *PTXFS_GET_TRANSACTED_VERSION;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_SAVEPOINT_INFORMATION parameters */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_SAVEPOINT_INFORMATION {
|
|
HANDLE KtmTransaction;
|
|
DWORD ActionCode;
|
|
DWORD SavepointId;
|
|
} TXFS_SAVEPOINT_INFORMATION;
|
|
typedef TXFS_SAVEPOINT_INFORMATION *PTXFS_SAVEPOINT_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_GET_BOOT_AREA_INFO returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _BOOT_AREA_INFO {
|
|
DWORD BootSectorCount;
|
|
struct {
|
|
LARGE_INTEGER Offset;
|
|
} BootSectors[2];
|
|
} BOOT_AREA_INFO;
|
|
typedef BOOT_AREA_INFO *PBOOT_AREA_INFO;
|
|
#endif
|
|
|
|
/* FSCTL_GET_RETRIEVAL_POINTER_BASE returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _RETRIEVAL_POINTER_BASE {
|
|
LARGE_INTEGER FileAreaOffset;
|
|
} RETRIEVAL_POINTER_BASE;
|
|
typedef RETRIEVAL_POINTER_BASE *PRETRIEVAL_POINTER_BASE;
|
|
#endif
|
|
|
|
/* Persistent volume information */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
|
|
DWORD VolumeFlags;
|
|
DWORD FlagMask;
|
|
DWORD Version;
|
|
DWORD Reserved;
|
|
} FILE_FS_PERSISTENT_VOLUME_INFORMATION;
|
|
typedef FILE_FS_PERSISTENT_VOLUME_INFORMATION *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_QUERY_FILE_SYSTEM_RECOGNITION returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
|
|
CHAR FileSystem[9];
|
|
} FILE_SYSTEM_RECOGNITION_INFORMATION;
|
|
typedef FILE_SYSTEM_RECOGNITION_INFORMATION *PFILE_SYSTEM_RECOGNITION_INFORMATION;
|
|
#endif
|
|
|
|
/* FSCTL_REQUEST_OPLOCK parameters */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
|
|
WORD StructureVersion;
|
|
WORD StructureLength;
|
|
DWORD RequestedOplockLevel;
|
|
DWORD Flags;
|
|
} REQUEST_OPLOCK_INPUT_BUFFER;
|
|
typedef REQUEST_OPLOCK_INPUT_BUFFER *PREQUEST_OPLOCK_INPUT_BUFFER;
|
|
#endif
|
|
|
|
/* FSCTL_REQUEST_OPLOCK returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
|
|
WORD StructureVersion;
|
|
WORD StructureLength;
|
|
DWORD OriginalOplockLevel;
|
|
DWORD NewOplockLevel;
|
|
DWORD Flags;
|
|
ACCESS_MASK AccessMode;
|
|
WORD ShareMode;
|
|
} REQUEST_OPLOCK_OUTPUT_BUFFER;
|
|
typedef REQUEST_OPLOCK_OUTPUT_BUFFER *PREQUEST_OPLOCK_OUTPUT_BUFFER;
|
|
#endif
|
|
|
|
/* SD_GLOBAL_CHANGE_TYPE_MACHINE_SID parameters */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
|
|
WORD CurrentMachineSIDOffset;
|
|
WORD CurrentMachineSIDLength;
|
|
WORD NewMachineSIDOffset;
|
|
WORD NewMachineSIDLength;
|
|
} SD_CHANGE_MACHINE_SID_INPUT;
|
|
typedef SD_CHANGE_MACHINE_SID_INPUT *PSD_CHANGE_MACHINE_SID_INPUT;
|
|
#endif
|
|
|
|
/* SD_GLOBAL_CHANGE_TYPE_MACHINE_SID returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
|
|
DWORDLONG NumSDChangedSuccess;
|
|
DWORDLONG NumSDChangedFail;
|
|
DWORDLONG NumSDUnused;
|
|
DWORDLONG NumSDTotal;
|
|
DWORDLONG NumMftSDChangedSuccess;
|
|
DWORDLONG NumMftSDChangedFail;
|
|
DWORDLONG NumMftSDTotal;
|
|
} SD_CHANGE_MACHINE_SID_OUTPUT;
|
|
typedef SD_CHANGE_MACHINE_SID_OUTPUT *PSD_CHANGE_MACHINE_SID_OUTPUT;
|
|
#endif
|
|
|
|
/* FSCTL_SD_GLOBAL_CHANGE parameters */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _SD_GLOBAL_CHANGE_INPUT {
|
|
DWORD Flags;
|
|
DWORD ChangeType;
|
|
union {
|
|
SD_CHANGE_MACHINE_SID_INPUT SdChange;
|
|
};
|
|
} SD_GLOBAL_CHANGE_INPUT;
|
|
typedef SD_GLOBAL_CHANGE_INPUT *PSD_GLOBAL_CHANGE_INPUT;
|
|
#endif
|
|
|
|
/* FSCTL_SD_GLOBAL_CHANGE returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
|
|
DWORD Flags;
|
|
DWORD ChangeType;
|
|
union {
|
|
SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
|
|
};
|
|
} SD_GLOBAL_CHANGE_OUTPUT;
|
|
typedef SD_GLOBAL_CHANGE_OUTPUT *PSD_GLOBAL_CHANGE_OUTPUT;
|
|
#endif
|
|
|
|
/* Extended encrypted data information */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
|
|
DWORD ExtendedCode;
|
|
DWORD Length;
|
|
DWORD Flags;
|
|
DWORD Reserved;
|
|
} EXTENDED_ENCRYPTED_DATA_INFO;
|
|
typedef EXTENDED_ENCRYPTED_DATA_INFO *PEXTENDED_ENCRYPTED_DATA_INFO;
|
|
#endif
|
|
|
|
/* FSCTL_LOOKUP_STREAM_FROM_CLUSTER parameters */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
|
|
DWORD Flags;
|
|
DWORD NumberOfClusters;
|
|
LARGE_INTEGER Cluster[1];
|
|
} LOOKUP_STREAM_FROM_CLUSTER_INPUT;
|
|
typedef LOOKUP_STREAM_FROM_CLUSTER_INPUT *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
|
|
#endif
|
|
|
|
/* FSCTL_LOOKUP_STREAM_FROM_CLUSTER returned data */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
|
|
DWORD Offset;
|
|
DWORD NumberOfMatches;
|
|
DWORD BufferSizeRequired;
|
|
} LOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
|
|
typedef LOOKUP_STREAM_FROM_CLUSTER_OUTPUT *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
|
|
#endif
|
|
|
|
/* FSCTL_LOOKUP_STREAM_FROM_CLUSTER entry */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
|
|
DWORD OffsetToNext;
|
|
DWORD Flags;
|
|
LARGE_INTEGER Reserved;
|
|
LARGE_INTEGER Cluster;
|
|
WCHAR FileName[1];
|
|
} LOOKUP_STREAM_FROM_CLUSTER_ENTRY;
|
|
typedef LOOKUP_STREAM_FROM_CLUSTER_ENTRY *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
|
|
#endif
|
|
|
|
/* FSCTL_FILE_TYPE_NOTIFICATION parameters */
|
|
#if (_WIN32_WINNT >= 0x0601)
|
|
typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
|
|
DWORD Flags;
|
|
DWORD NumFileTypeIDs;
|
|
GUID FileTypeID[1];
|
|
} FILE_TYPE_NOTIFICATION_INPUT;
|
|
typedef FILE_TYPE_NOTIFICATION_INPUT *PFILE_TYPE_NOTIFICATION_INPUT;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_CREATE_MINIVERSION returned data */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_CREATE_MINIVERSION_INFO {
|
|
WORD StructureVersion;
|
|
WORD StructureLength;
|
|
DWORD BaseVersion;
|
|
WORD MiniVersion;
|
|
} TXFS_CREATE_MINIVERSION_INFO;
|
|
typedef TXFS_CREATE_MINIVERSION_INFO *PTXFS_CREATE_MINIVERSION_INFO;
|
|
#endif
|
|
|
|
/* FSCTL_TXFS_TRANSACTION_ACTIVE returned data */
|
|
#if (_WIN32_WINNT >= 0x0600)
|
|
typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
|
|
BOOLEAN TransactionsActiveAtSnapshot;
|
|
} TXFS_TRANSACTION_ACTIVE_INFO;
|
|
typedef TXFS_TRANSACTION_ACTIVE_INFO *PTXFS_TRANSACTION_ACTIVE_INFO;
|
|
#endif
|
|
|
|
/* Disk extent */
|
|
#if (NTDDI_VERSION >= 0x05000000)
|
|
typedef struct _DISK_EXTENT {
|
|
DWORD DiskNumber;
|
|
LARGE_INTEGER StartingOffset;
|
|
LARGE_INTEGER ExtentLength;
|
|
} DISK_EXTENT;
|
|
typedef DISK_EXTENT *PDISK_EXTENT;
|
|
#endif
|
|
|
|
/* Volume disk extents */
|
|
#if (NTDDI_VERSION >= 0x05000000)
|
|
typedef struct _VOLUME_DISK_EXTENTS {
|
|
DWORD NumberOfDiskExtents;
|
|
DISK_EXTENT Extents[ANYSIZE_ARRAY];
|
|
} VOLUME_DISK_EXTENTS;
|
|
typedef VOLUME_DISK_EXTENTS *PVOLUME_DISK_EXTENTS;
|
|
#endif
|
|
|
|
/* IOCTL_VOLUME_GET_GPT_ATTRIBUTES returned data */
|
|
#if (NTDDI_VERSION >= 0x05010000)
|
|
typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
|
|
DWORDLONG GptAttributes;
|
|
} VOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
|
|
typedef VOLUME_GET_GPT_ATTRIBUTES_INFORMATION *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* _WINIOCTL_ */
|