+2016-07-21 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Resolve improper macro expansion issue [#2307].
+
+ * include/ddk/winddk.h (__FILE_AM_BUFFERED, __FILE_RD_BUFFERED)
+ (__FILE_RW_BUFFERED): Redefine, encapsulating the expansion of each
+ dependent macro WITHIN the expansion of each of these; hence...
+
+ * include/ddk/ntdddisk.h (IOCTL_DISK_GET_DRIVE_GEOMETRY)
+ (IOCTL_DISK_FORMAT_TRACKS_EX, IOCTL_DISK_REASSIGN_BLOCKS)
+ (IOCTL_DISK_GET_MEDIA_TYPES, IOCTL_DISK_CONTROLLER_NUMBER)
+ (IOCTL_DISK_GET_DRIVE_LAYOUT, IOCTL_DISK_SET_DRIVE_LAYOUT)
+ (IOCTL_DISK_GET_PARTITION_INFO, IOCTL_DISK_SET_PARTITION_INFO)
+ (IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, IOCTL_DISK_UPDATE_DRIVE_SIZE)
+ (IOCTL_DISK_VERIFY, IOCTL_DISK_FORMAT_TRACKS, IOCTL_DISK_PERFORMANCE)
+ (IOCTL_DISK_CREATE_DISK, IOCTL_DISK_RESERVE, IOCTL_DISK_IS_WRITABLE)
+ (IOCTL_DISK_GET_PARTITION_INFO_EX, IOCTL_DISK_SET_PARTITION_INFO_EX)
+ (IOCTL_DISK_GET_CACHE_INFORMATION, IOCTL_DISK_SET_CACHE_INFORMATION)
+ (IOCTL_DISK_INTERNAL_SET_VERIFY, IOCTL_DISK_INTERNAL_CLEAR_VERIFY)
+ (IOCTL_DISK_GET_DRIVE_LAYOUT_EX, IOCTL_DISK_SET_DRIVE_LAYOUT_EX)
+ (IOCTL_DISK_GROW_PARTITION, IOCTL_DISK_DELETE_DRIVE_LAYOUT)
+ (IOCTL_DISK_GET_LENGTH_INFO, IOCTL_DISK_PERFORMANCE_OFF)
+ (IOCTL_DISK_CHECK_VERIFY, IOCTL_DISK_FIND_NEW_DEVICES)
+ (SMART_GET_VERSION, SMART_RCV_DRIVE_DATA, SMART_SEND_DRIVE_COMMAND):
+ ...adjust these dependent macro definitions accordingly.
+
+ * include/ddk/ntddstor.h (IOCTL_STORAGE_CHECK_VERIFY)
+ (IOCTL_STORAGE_CHECK_VERIFY2, IOCTL_STORAGE_MEDIA_REMOVAL)
+ (IOCTL_STORAGE_EJECTION_CONTROL, IOCTL_STORAGE_MCN_CONTROL)
+ (IOCTL_STORAGE_GET_DEVICE_NUMBER, IOCTL_STORAGE_PREDICT_FAILURE)
+ (IOCTL_STORAGE_GET_MEDIA_TYPES, IOCTL_STORAGE_GET_MEDIA_TYPES_EX)
+ (IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER, IOCTL_STORAGE_QUERY_PROPERTY)
+ (IOCTL_STORAGE_RELEASE, IOCTL_STORAGE_FIND_NEW_DEVICES)
+ (IOCTL_STORAGE_RESET_BUS, IOCTL_STORAGE_RESET_DEVICE)
+ (IOCTL_STORAGE_EJECT_MEDIA, IOCTL_STORAGE_LOAD_MEDIA)
+ (IOCTL_STORAGE_LOAD_MEDIA2, IOCTL_STORAGE_RESERVE): Likewise.
+
2016-07-14 Keith Marshall <keithmarshall@users.sourceforge.net>
Prepare and tag all files for release of w32api-3.18.
#define __IOCTL_DISK_(FN,M,A) CTL_CODE(IOCTL_DISK_BASE,(FN),(M),(A))
#define IOCTL_DISK_BASE FILE_TYPE_DISK
-#define IOCTL_DISK_GET_DRIVE_GEOMETRY __IOCTL_DISK_(0x0000,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_GET_PARTITION_INFO __IOCTL_DISK_(0x0001,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_SET_PARTITION_INFO __IOCTL_DISK_(0x0002,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_GET_DRIVE_LAYOUT __IOCTL_DISK_(0x0003,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_SET_DRIVE_LAYOUT __IOCTL_DISK_(0x0004,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_VERIFY __IOCTL_DISK_(0x0005,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_FORMAT_TRACKS __IOCTL_DISK_(0x0006,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_REASSIGN_BLOCKS __IOCTL_DISK_(0x0007,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_PERFORMANCE __IOCTL_DISK_(0x0008,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_IS_WRITABLE __IOCTL_DISK_(0x0009,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_FORMAT_TRACKS_EX __IOCTL_DISK_(0x000B,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_GET_PARTITION_INFO_EX __IOCTL_DISK_(0x0012,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_SET_PARTITION_INFO_EX __IOCTL_DISK_(0x0013,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX __IOCTL_DISK_(0x0014,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_SET_DRIVE_LAYOUT_EX __IOCTL_DISK_(0x0015,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_CREATE_DISK __IOCTL_DISK_(0x0016,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_GET_LENGTH_INFO __IOCTL_DISK_(0x0017,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_PERFORMANCE_OFF __IOCTL_DISK_(0x0018,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX __IOCTL_DISK_(0x0028,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_UPDATE_DRIVE_SIZE __IOCTL_DISK_(0x0032,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_GROW_PARTITION __IOCTL_DISK_(0x0034,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_GET_CACHE_INFORMATION __IOCTL_DISK_(0x0035,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_SET_CACHE_INFORMATION __IOCTL_DISK_(0x0036,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_DELETE_DRIVE_LAYOUT __IOCTL_DISK_(0x0040,__FILE_RW_BUFFERED)
-#define IOCTL_DISK_CHECK_VERIFY __IOCTL_DISK_(0x0200,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_RESERVE __IOCTL_DISK_(0x0204,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_FIND_NEW_DEVICES __IOCTL_DISK_(0x0206,__FILE_RD_BUFFERED)
-#define IOCTL_DISK_GET_MEDIA_TYPES __IOCTL_DISK_(0x0300,__FILE_AM_BUFFERED)
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0000)
+#define IOCTL_DISK_GET_PARTITION_INFO __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0001)
+#define IOCTL_DISK_SET_PARTITION_INFO __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0002)
+#define IOCTL_DISK_GET_DRIVE_LAYOUT __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0003)
+#define IOCTL_DISK_SET_DRIVE_LAYOUT __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0004)
+#define IOCTL_DISK_VERIFY __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0005)
+#define IOCTL_DISK_FORMAT_TRACKS __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0006)
+#define IOCTL_DISK_REASSIGN_BLOCKS __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0007)
+#define IOCTL_DISK_PERFORMANCE __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0008)
+#define IOCTL_DISK_IS_WRITABLE __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0009)
+#define IOCTL_DISK_FORMAT_TRACKS_EX __FILE_RW_BUFFERED(__IOCTL_DISK_,0x000B)
+#define IOCTL_DISK_GET_PARTITION_INFO_EX __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0012)
+#define IOCTL_DISK_SET_PARTITION_INFO_EX __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0013)
+#define IOCTL_DISK_GET_DRIVE_LAYOUT_EX __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0014)
+#define IOCTL_DISK_SET_DRIVE_LAYOUT_EX __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0015)
+#define IOCTL_DISK_CREATE_DISK __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0016)
+#define IOCTL_DISK_GET_LENGTH_INFO __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0017)
+#define IOCTL_DISK_PERFORMANCE_OFF __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0018)
+#define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0028)
+#define IOCTL_DISK_UPDATE_DRIVE_SIZE __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0032)
+#define IOCTL_DISK_GROW_PARTITION __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0034)
+#define IOCTL_DISK_GET_CACHE_INFORMATION __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0035)
+#define IOCTL_DISK_SET_CACHE_INFORMATION __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0036)
+#define IOCTL_DISK_DELETE_DRIVE_LAYOUT __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0040)
+#define IOCTL_DISK_CHECK_VERIFY __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0200)
+#define IOCTL_DISK_RESERVE __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0204)
+#define IOCTL_DISK_FIND_NEW_DEVICES __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0206)
+#define IOCTL_DISK_GET_MEDIA_TYPES __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0300)
enum
{ PARTITION_ENTRY_UNUSED = 0x00,
*/
_BEGIN_C_DECLS
-#define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN"
-#define DD_DISK_DEVICE_NAME_U L"\\Device\\UNKNOWN"
+#define DD_DISK_DEVICE_NAME "\\Device\\UNKNOWN"
+#define DD_DISK_DEVICE_NAME_U L"\\Device\\UNKNOWN"
-#define IOCTL_DISK_CONTROLLER_NUMBER __IOCTL_DISK_(0x0011,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_INTERNAL_SET_VERIFY __IOCTL_DISK_(0x0100,__FILE_AM_BUFFERED)
-#define IOCTL_DISK_INTERNAL_CLEAR_VERIFY __IOCTL_DISK_(0x0101,__FILE_AM_BUFFERED)
+#define IOCTL_DISK_CONTROLLER_NUMBER __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0011)
+#define IOCTL_DISK_INTERNAL_SET_VERIFY __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0100)
+#define IOCTL_DISK_INTERNAL_CLEAR_VERIFY __FILE_AM_BUFFERED(__IOCTL_DISK_,0x0101)
-#define SMART_GET_VERSION __IOCTL_DISK_(0x0020,__FILE_RD_BUFFERED)
-#define SMART_RCV_DRIVE_DATA __IOCTL_DISK_(0x0022,__FILE_RW_BUFFERED)
-#define SMART_SEND_DRIVE_COMMAND __IOCTL_DISK_(0x0021,__FILE_RW_BUFFERED)
+#define SMART_GET_VERSION __FILE_RD_BUFFERED(__IOCTL_DISK_,0x0020)
+#define SMART_RCV_DRIVE_DATA __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0022)
+#define SMART_SEND_DRIVE_COMMAND __FILE_RW_BUFFERED(__IOCTL_DISK_,0x0021)
#define IsFTPartition( PartitionType ) \
(((PartitionType) & PARTITION_NTFT) && IsRecognizedPartition(PartitionType))
* structural type STORAGE_BUS_TYPE, and its associated pointer type,
* are required to be defined by both <ddk/ntddstor.h> and <winioctl.h>,
* but if both repeat inclusion guards are already defined, then we've
- * already seen this; ther is no need to process it again.
+ * already seen this; there is no need to process it again.
*/
#define __IOCTL_STORAGE_(FN,M,A) CTL_CODE(IOCTL_STORAGE_BASE,(FN),(M),(A))
#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
-#define IOCTL_STORAGE_CHECK_VERIFY __IOCTL_STORAGE_(0x0200,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_CHECK_VERIFY2 __IOCTL_STORAGE_(0x0200,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_MEDIA_REMOVAL __IOCTL_STORAGE_(0x0201,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_EJECT_MEDIA __IOCTL_STORAGE_(0x0202,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_LOAD_MEDIA __IOCTL_STORAGE_(0x0203,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_LOAD_MEDIA2 __IOCTL_STORAGE_(0x0203,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_RESERVE __IOCTL_STORAGE_(0x0204,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_RELEASE __IOCTL_STORAGE_(0x0205,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_FIND_NEW_DEVICES __IOCTL_STORAGE_(0x0206,__FILE_RD_BUFFERED)
-#define IOCTL_STORAGE_EJECTION_CONTROL __IOCTL_STORAGE_(0x0250,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_MCN_CONTROL __IOCTL_STORAGE_(0x0251,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_GET_MEDIA_TYPES __IOCTL_STORAGE_(0x0300,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX __IOCTL_STORAGE_(0x0301,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_RESET_BUS __IOCTL_STORAGE_(0x0400,__FILE_RW_BUFFERED)
-#define IOCTL_STORAGE_RESET_DEVICE __IOCTL_STORAGE_(0x0401,__FILE_RW_BUFFERED)
-#define IOCTL_STORAGE_GET_DEVICE_NUMBER __IOCTL_STORAGE_(0x0420,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_PREDICT_FAILURE __IOCTL_STORAGE_(0x0440,__FILE_AM_BUFFERED)
+#define IOCTL_STORAGE_CHECK_VERIFY __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0200)
+#define IOCTL_STORAGE_CHECK_VERIFY2 __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0200)
+#define IOCTL_STORAGE_MEDIA_REMOVAL __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0201)
+#define IOCTL_STORAGE_EJECT_MEDIA __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0202)
+#define IOCTL_STORAGE_LOAD_MEDIA __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0203)
+#define IOCTL_STORAGE_LOAD_MEDIA2 __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0203)
+#define IOCTL_STORAGE_RESERVE __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0204)
+#define IOCTL_STORAGE_RELEASE __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0205)
+#define IOCTL_STORAGE_FIND_NEW_DEVICES __FILE_RD_BUFFERED(__IOCTL_STORAGE_,0x0206)
+#define IOCTL_STORAGE_EJECTION_CONTROL __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0250)
+#define IOCTL_STORAGE_MCN_CONTROL __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0251)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0300)
+#define IOCTL_STORAGE_GET_MEDIA_TYPES_EX __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0301)
+#define IOCTL_STORAGE_RESET_BUS __FILE_RW_BUFFERED(__IOCTL_STORAGE_,0x0400)
+#define IOCTL_STORAGE_RESET_DEVICE __FILE_RW_BUFFERED(__IOCTL_STORAGE_,0x0401)
+#define IOCTL_STORAGE_GET_DEVICE_NUMBER __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0420)
+#define IOCTL_STORAGE_PREDICT_FAILURE __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0440)
typedef
enum _STORAGE_BUS_TYPE
*/
_BEGIN_C_DECLS
-#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER __IOCTL_STORAGE_(0x0304,__FILE_AM_BUFFERED)
-#define IOCTL_STORAGE_QUERY_PROPERTY __IOCTL_STORAGE_(0x0500,__FILE_AM_BUFFERED)
+#define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0304)
+#define IOCTL_STORAGE_QUERY_PROPERTY __FILE_AM_BUFFERED(__IOCTL_STORAGE_,0x0500)
DEFINE_GUID( GUID_DEVINTERFACE_DISK,
0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b
/* Some derived convenience macros; Microsoft do not specify these,
* but they help to keep the CTL_CODE specifications tidy.
*/
-#define __FILE_RW_ACCESS (FILE_READ_ACCESS | FILE_WRITE_ACCESS)
-#define __FILE_AM_BUFFERED METHOD_BUFFERED, FILE_ANY_ACCESS
-#define __FILE_RD_BUFFERED METHOD_BUFFERED, FILE_READ_ACCESS
-#define __FILE_RW_BUFFERED METHOD_BUFFERED, __FILE_RW_ACCESS
+#define __FILE_RW_ACCESS (FILE_READ_ACCESS | FILE_WRITE_ACCESS)
+#define __FILE_AM_BUFFERED(F,OP) F(OP, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define __FILE_RD_BUFFERED(F,OP) F(OP, METHOD_BUFFERED, FILE_READ_ACCESS)
+#define __FILE_RW_BUFFERED(F,OP) F(OP, METHOD_BUFFERED, __FILE_RW_ACCESS)
typedef
struct _DRIVE_LAYOUT_INFORMATION_MBR