Завершающим сюрпризом ( первый, второй ) стало то, что функциия ObQueryNameString перестала выдавать ошибку STATUS_INFO_LENGTH_MISMATCH для объектов ключей реестра при нехватке выходного буфера.
То есть для ситуации, когда размер выходного буфера больше структуры OBJECT_NAME_INFORMATION, но заведомо меньше полного имени ключа, раньше (до Windows 10 build 17133) функция возвращала статус ошибки STATUS_INFO_LENGTH_MISMATCH. А сейчас функция стала возвращать STATUS_SUCCESS, заполнять огрызок имени в структуре UNICODE_STRING (сколько уместилось в буфере), а факт нехватки памяти сигнализируется лишь тем, что последним выходным параметром ReturnLength функция возвращает больший размер, чем мы указывали во входном параметре Length.
Как это выглядит в отладчике (продублировано c https://github.com/MicrosoftDocs/windows-driver-docs-ddi/issues/36). Для вызова:
Было:
Стало:
Текущая проблемная версия ядра:
ΞρεΤΙκ