OSDN Git Service

Resolve improper macro expansion issue [#2307].
authorKeith Marshall <keithmarshall@users.sourceforge.net>
Thu, 21 Jul 2016 21:20:34 +0000 (22:20 +0100)
committerKeith Marshall <keithmarshall@users.sourceforge.net>
Thu, 21 Jul 2016 21:20:34 +0000 (22:20 +0100)
w32api/ChangeLog
w32api/include/ddk/ntdddisk.h
w32api/include/ddk/ntddstor.h
w32api/include/ddk/winddk.h

index 076f248..ae30f46 100644 (file)
@@ -1,3 +1,40 @@
+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.
index 76314f4..e82bea3 100644 (file)
 #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,
@@ -408,16 +408,16 @@ struct _DISK_GROW_PARTITION
  */
 _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))
index 59fdb86..724ad4f 100644 (file)
  * 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
@@ -105,8 +105,8 @@ 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
index 07bbafc..5858a4b 100644 (file)
@@ -134,10 +134,10 @@ enum
 /* 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