На этот раз речь про
LPPROC_THREAD_ATTRIBUTE_LIST, который нужен при расширенном создании процессов и потоков.Проблема в API простая:
- сначала нужно отдельно узнать размер буфера
- потом вручную выделить память
- вызвать
InitializeProcThreadAttributeList- после работы обязательно вызвать
DeleteProcThreadAttributeList- и только потом освободить сам буфер
Chen предлагает обернуть всё это в RAII через WIL, чтобы очистка происходила автоматически.
Из интересного:
- отдельный helper для освобождения списка
- безопасное получение нужного размера
- разбор того, почему CTAD здесь не помогает
- перегрузки через SFINAE, чтобы не ловить неоднозначность с
int- возможность сразу предзаполнить список атрибутами
- можно заранее оставить место под дополнительные атрибуты, которые добавятся позже
В итоге работа с
LPPROC_THREAD_ATTRIBUTE_LIST становится заметно аккуратнее и меньше похожа на ручной Win32-ритуал с кучей cleanup-кода. https://devblogs.microsoft.com/oldnewthing/20260813-00/?p=112611
