[MOUNTMGR][DDK] Fix some IOCTLs definitions to Win2k3+ compatibility (#6959)

Fix IOCTL_MOUNTDEV_LINK_CREATED, IOCTL_MOUNTDEV_LINK_DELETED,
IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY, to Win2k3+ compatible definitions.
The previous versions of these IOCTLs (in Win2000 and XP) were defined without any access protection.

This was noticed here:
https://community.osr.com/t/ioctl-mountdev-link-created-definition-changed/29428
This commit is contained in:
Hermès Bélusca-Maïto 2024-05-26 20:05:10 +02:00
parent 7930bed0a1
commit ed27d733f7
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
2 changed files with 37 additions and 14 deletions

View file

@ -33,12 +33,19 @@
extern "C" {
#endif
/* Windows 2003 fixed the required access for some IOCTLs */
#if (NTDDI_VERSION >= NTDDI_WS03)
#define EXPECTED_ACCESS (FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#else
#define EXPECTED_ACCESS FILE_ANY_ACCESS
#endif
#if (NTDDI_VERSION >= NTDDI_WIN2K)
#define IOCTL_MOUNTDEV_QUERY_UNIQUE_ID CTL_CODE(MOUNTDEVCONTROLTYPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME CTL_CODE(MOUNTDEVCONTROLTYPE, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_MOUNTDEV_LINK_CREATED CTL_CODE(MOUNTDEVCONTROLTYPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_MOUNTDEV_LINK_DELETED CTL_CODE(MOUNTDEVCONTROLTYPE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_MOUNTDEV_LINK_CREATED CTL_CODE(MOUNTDEVCONTROLTYPE, 4, METHOD_BUFFERED, EXPECTED_ACCESS)
#define IOCTL_MOUNTDEV_LINK_DELETED CTL_CODE(MOUNTDEVCONTROLTYPE, 5, METHOD_BUFFERED, EXPECTED_ACCESS)
typedef struct _MOUNTDEV_UNIQUE_ID {
USHORT UniqueIdLength;
@ -63,8 +70,9 @@ typedef struct _MOUNTDEV_STABLE_GUID {
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
/* FIXME : These definitions don't exist in the official header : */
#define IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY CTL_CODE(MOUNTDEVCONTROLTYPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
/* NOTE: Support for IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY
* seems to have been removed from official WDK in Vista+ */
#define IOCTL_MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY CTL_CODE(MOUNTDEVCONTROLTYPE, 1, METHOD_BUFFERED, EXPECTED_ACCESS)
typedef struct _MOUNTDEV_UNIQUE_ID_CHANGE_NOTIFY_OUTPUT {
ULONG Size;
USHORT OldUniqueIdOffset;