I had these in my patch repo for quite a while.
Patch 1 shouldn't need explanation.
The problem fixed by patch 2 and 3 is that sizeof(KEY_{BASIC,VALUE_PARTIAL,FULL}_INFORMATION) are all slightly bigger than the actual minimum size required to get all the requested info, because those structs include an array of size 1 as their last member, which is intended to be a variable length array. Fixing these size calculations removes one allocation in wineserver and reduces the amount of data transmitted by 1 - 2 bytes.
Patch 4 just reduces the amount of data transmitted from wineserver for each update_display_cache_from_registry call, which is called every time the display device lists are locked.
-- v3: win32u: Query basic instead of full key information to get the LastWriteTime. win32u: Calculate buffer sizes from registry structs correctly. ntdll: Calculate buffer sizes from registry structs correctly. ntdll: Use correct output buffer size in RtlpNtEnumerateSubKey.