Esme Povirk (@madewokherd) commented about dlls/uiautomationcore/uia_private.h:
HWND hwnd; BOOL nested_node;
- struct list *prov_thread_list_entry;
I really don't think this needs to be a pointer. If there's going to be at most 1 entry per uia_node, and it doesn't need to outlive the uia_node, you can put the entry in there directly.
You can use list_init() when creating uia_node and list_empty() to check if the entry is being used. (Though list_remove will leave the entry in an invalid state, and you'll have to init it again if you want that check to work afterwards.)