[PATCH 3/5] setupapi: Fix compiler warnings when converting between pointers and integers on 64-bit systems
Michael Stefaniuc
mstefani at winehq.org
Wed Aug 9 05:36:57 CDT 2017
On 08/09/2017 04:26 AM, Hugh McMaster wrote:
> On Tuesday, 8 August 2017 9:04 PM, Alexandre Julliard wrote:
>> That's only hiding the bug.
>
> The basic problem is the use of DWORD in the following structure. On 64-bit
> systems we then see warnings about the sizeof(DWORD) vs sizeof(void *).
>
> /* Pointed to by SP_DEVINFO_DATA's Reserved member */
> struct DeviceInfo
> {
> struct DeviceInfoSet *set;
> HKEY key;
> BOOL phantom;
> DWORD devId;
> LPWSTR instanceId;
> struct list interfaces;
> };
>
> There are several ways to fix the core problem. One option is to replace
> the DWORD in that struct with DWORD_PTR or ULONG_PTR.
> Both types are identical, with DWORD_PTR being a typedef'd ULONG_PTR.
>
> Another option is to typedef a QWORD, and then use C preprocessing:
> #ifdef _WIN64
> QWORD devId;
> #else
> DWORD devID;
> #endif
>
> Unfortunately, however we choose to fix this part, using (multiple) casts
> will still be necessary to prevent the compiler warning about
> mismatched size conversion between pointers and integers.
>
> For example, in line 471:
>> devInfo->devId = (DWORD)devInst;
> devInst is a HANDLE (i.e. void *).
>
> Line 4027 in dlls/setupapi/devinst.c:
> struct DeviceInfo *ppdevInfo = GlobalLock((HANDLE)dnDevInst);
> dnDevInst is type DEVINST, which is a typedef'd DWORD.
>
> How do you want to proceed?
Your proposals will keep truncating a pointer to the lower 32 bits for
Win64. That's what Alexandre meant with just masking the error.
As DevId is a DWORD (struct SP_DEVINFO_DATA from the public API)
wouldn't the correct fix be to move away from DevId being just a pointer?
https://msdn.microsoft.com/en-us/library/windows/hardware/ff552344(v=vs.85).aspx
It could be an index or a hash, something that fits into 32 bits.
Aric might have some insight here as he looked at the Plug&Play manager
as well as at the Device Tree.
bye
michael
More information about the wine-devel
mailing list