EreTIk's Box » Cтатьи, исходники » Сюрпризы от Windows 10 build 17133: ObQueryNameString для ключей реестра перестала выдавать ошибку STATUS_INFO_LENGTH_MISMATCH


Завершающим сюрпризом ( первый, второй ) стало то, что функциия 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). Для вызова:

Status = ObQueryNameString(pObject, pObjInfo, uBufSize, &uResLen);

Было:

0: kd> dv Status = 0xc0000004

Стало:

1: kd> dv pObject = 0x86a00420 Status = 0n0 uBufSize = 0x10 pObjInfo = 0x8c2c4d30 uResLen = 0x9e 1: kd> dx pObjInfo pObjInfo : 0x8c2c4d30 [Type: _OBJECT_NAME_INFORMATION *] [+0x000] Name : "\RE" [Type: _UNICODE_STRING] 1: kd> !object 0x86a00420 Object: 86a00420 Type: (869169d0) Key ObjectHeader: 86a00408 (new version) HandleCount: 1 PointerCount: 33 Directory Object: 00000000 Name: \REGISTRY\MACHINE\SYSTEM\CONTROLSET001\CONTROL\SESSION MANAGER\ENVIRONMENT

Текущая проблемная версия ядра:

Windows 10 Kernel Version 17133 MP (2 procs) Free x86 compatible Built by: 17133.1.x86fre.rs4_release.180323-1312

ΞρεΤΙκ