ULONG SharedDelete;
} SHARE_ACCESS, *PSHARE_ACCESS;
-/* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
- inheritance, even from a struct renders the type non-POD. So we use
- this hack */
-#define PCI_COMMON_HEADER_LAYOUT \
- USHORT VendorID; \
- USHORT DeviceID; \
- USHORT Command; \
- USHORT Status; \
- UCHAR RevisionID; \
- UCHAR ProgIf; \
- UCHAR SubClass; \
- UCHAR BaseClass; \
- UCHAR CacheLineSize; \
- UCHAR LatencyTimer; \
- UCHAR HeaderType; \
- UCHAR BIST; \
- union { \
- struct _PCI_HEADER_TYPE_0 { \
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
- ULONG CIS; \
- USHORT SubVendorID; \
- USHORT SubSystemID; \
- ULONG ROMBaseAddress; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved1[3]; \
- ULONG Reserved2; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- UCHAR MinimumGrant; \
- UCHAR MaximumLatency; \
- } type0; \
- struct _PCI_HEADER_TYPE_1 { \
- ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
- UCHAR PrimaryBus; \
- UCHAR SecondaryBus; \
- UCHAR SubordinateBus; \
- UCHAR SecondaryLatency; \
- UCHAR IOBase; \
- UCHAR IOLimit; \
- USHORT SecondaryStatus; \
- USHORT MemoryBase; \
- USHORT MemoryLimit; \
- USHORT PrefetchBase; \
- USHORT PrefetchLimit; \
- ULONG PrefetchBaseUpper32; \
- ULONG PrefetchLimitUpper32; \
- USHORT IOBaseUpper16; \
- USHORT IOLimitUpper16; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved1[3]; \
- ULONG ROMBaseAddress; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- USHORT BridgeControl; \
- } type1; \
- struct _PCI_HEADER_TYPE_2 { \
- ULONG SocketRegistersBaseAddress; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved; \
- USHORT SecondaryStatus; \
- UCHAR PrimaryBus; \
- UCHAR SecondaryBus; \
- UCHAR SubordinateBus; \
- UCHAR SecondaryLatency; \
- struct { \
- ULONG Base; \
- ULONG Limit; \
- } Range[PCI_TYPE2_ADDRESSES-1]; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- USHORT BridgeControl; \
- } type2; \
- } u;
-
typedef enum _CREATE_FILE_TYPE {
CreateFileTypeNone,
CreateFileTypeNamedPipe,
#define VPB_RAW_MOUNT 0x0010
#define VPB_DIRECT_WRITES_ALLOWED 0x0020
-/* IRP.Flags */
+/* IO_STACK_LOCATION.Flags */
#define SL_FORCE_ACCESS_CHECK 0x01
#define SL_OPEN_PAGING_FILE 0x02
$endif (_WDMDDK_ || _DEVIOCTL_)
$if (_WDMDDK_)
+
+/* IRP.Flags */
#define IRP_NOCACHE 0x00000001
#define IRP_PAGING_IO 0x00000002
#define IRP_MOUNT_COMPLETION 0x00000002
#define IRP_RETRY_IO_COMPLETION 0x00004000
#define IRP_CLASS_CACHE_OPERATION 0x00008000
+/* IRP.AllocationFlags */
#define IRP_QUOTA_CHARGED 0x01
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
#define IRP_ALLOCATED_FIXED_SIZE 0x04
IO_ERROR_LOG_PACKET EntryData;
} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
+/* See ndk/lpctypes.h */
+#ifdef _WIN64
+#define PORT_MAXIMUM_MESSAGE_LENGTH 512
+#else
+#define PORT_MAXIMUM_MESSAGE_LENGTH 256
+#endif
+
#define ERROR_LOG_LIMIT_SIZE 240
#define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
sizeof(IO_ERROR_LOG_PACKET) + \
#define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
-#ifdef _WIN64
-#define PORT_MAXIMUM_MESSAGE_LENGTH 512
-#else
-#define PORT_MAXIMUM_MESSAGE_LENGTH 256
-#endif
-
typedef enum _DMA_WIDTH {
Width8Bits,
Width16Bits,
typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
_Function_class_(DRIVER_DISPATCH)
-_IRQL_requires_(PASSIVE_LEVEL)
+_IRQL_requires_max_(DISPATCH_LEVEL)
_IRQL_requires_same_
typedef NTSTATUS
(NTAPI DRIVER_DISPATCH)(
_In_ struct _DEVICE_OBJECT *DeviceObject,
_Inout_ struct _IRP *Irp);
typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
+typedef DRIVER_DISPATCH DRIVER_DISPATCH_RAISED;
+
+_Function_class_(DRIVER_DISPATCH)
+_IRQL_requires_(PASSIVE_LEVEL)
+_IRQL_requires_same_
+typedef NTSTATUS
+(NTAPI DRIVER_DISPATCH_PAGED)(
+ _In_ struct _DEVICE_OBJECT *DeviceObject,
+ _Inout_ struct _IRP *Irp);
+typedef DRIVER_DISPATCH_PAGED *PDRIVER_DISPATCH_PAGED;
typedef struct _DRIVER_OBJECT {
CSHORT Type;
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
+#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
#define PCI_TYPE1_ADDRESSES 2
#define PCI_TYPE2_ADDRESSES 5
+/* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
+ inheritance, even from a struct renders the type non-POD. So we use
+ this hack */
+#define PCI_COMMON_HEADER_LAYOUT \
+ USHORT VendorID; \
+ USHORT DeviceID; \
+ USHORT Command; \
+ USHORT Status; \
+ UCHAR RevisionID; \
+ UCHAR ProgIf; \
+ UCHAR SubClass; \
+ UCHAR BaseClass; \
+ UCHAR CacheLineSize; \
+ UCHAR LatencyTimer; \
+ UCHAR HeaderType; \
+ UCHAR BIST; \
+ union { \
+ struct _PCI_HEADER_TYPE_0 { \
+ ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
+ ULONG CIS; \
+ USHORT SubVendorID; \
+ USHORT SubSystemID; \
+ ULONG ROMBaseAddress; \
+ UCHAR CapabilitiesPtr; \
+ UCHAR Reserved1[3]; \
+ ULONG Reserved2; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ UCHAR MinimumGrant; \
+ UCHAR MaximumLatency; \
+ } type0; \
+ struct _PCI_HEADER_TYPE_1 { \
+ ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
+ UCHAR PrimaryBus; \
+ UCHAR SecondaryBus; \
+ UCHAR SubordinateBus; \
+ UCHAR SecondaryLatency; \
+ UCHAR IOBase; \
+ UCHAR IOLimit; \
+ USHORT SecondaryStatus; \
+ USHORT MemoryBase; \
+ USHORT MemoryLimit; \
+ USHORT PrefetchBase; \
+ USHORT PrefetchLimit; \
+ ULONG PrefetchBaseUpper32; \
+ ULONG PrefetchLimitUpper32; \
+ USHORT IOBaseUpper16; \
+ USHORT IOLimitUpper16; \
+ UCHAR CapabilitiesPtr; \
+ UCHAR Reserved1[3]; \
+ ULONG ROMBaseAddress; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ USHORT BridgeControl; \
+ } type1; \
+ struct _PCI_HEADER_TYPE_2 { \
+ ULONG SocketRegistersBaseAddress; \
+ UCHAR CapabilitiesPtr; \
+ UCHAR Reserved; \
+ USHORT SecondaryStatus; \
+ UCHAR PrimaryBus; \
+ UCHAR SecondaryBus; \
+ UCHAR SubordinateBus; \
+ UCHAR SecondaryLatency; \
+ struct { \
+ ULONG Base; \
+ ULONG Limit; \
+ } Range[PCI_TYPE2_ADDRESSES-1]; \
+ UCHAR InterruptLine; \
+ UCHAR InterruptPin; \
+ USHORT BridgeControl; \
+ } type2; \
+ } u;
+
typedef struct _PCI_COMMON_HEADER {
PCI_COMMON_HEADER_LAYOUT
} PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
+#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
+#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
+#define FILE_SUPPORTS_SPARSE_VDL 0x10000000
+#define FILE_DAX_VOLUME 0x20000000
#define FILE_NEED_EA 0x00000080
#endif
+#if (_WIN32_WINNT >= 0x0603)
+
+#define FSCTL_DUPLICATE_EXTENTS_TO_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 209, METHOD_BUFFERED, FILE_WRITE_DATA)
+
+#endif
+
#define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
typedef struct _PATHNAME_BUFFER {